mirror of
https://git.code.sf.net/p/quake/quakeforge
synced 2025-02-22 19:51:54 +00:00
Export non-triangular faces as triangle clusters.
It turns out this behavior is preferable (by at least one artist, anyway).
This commit is contained in:
parent
a4da11cdb5
commit
634b3b043d
2 changed files with 21 additions and 18 deletions
|
@ -1,4 +1,4 @@
|
||||||
o auto-convert quads/ngons to tris
|
X auto-convert quads/ngons to tris
|
||||||
o combine multiple selected meshes into one mdl
|
o combine multiple selected meshes into one mdl
|
||||||
? active object determines origin?
|
? active object determines origin?
|
||||||
? non-active objects' meshes rotated relative to active? all objects
|
? non-active objects' meshes rotated relative to active? all objects
|
||||||
|
|
|
@ -109,22 +109,25 @@ def build_tris(mesh):
|
||||||
stverts = []
|
stverts = []
|
||||||
tris = []
|
tris = []
|
||||||
vertmap = [] # map mdl vert num to blender vert num (for 3d verts)
|
vertmap = [] # map mdl vert num to blender vert num (for 3d verts)
|
||||||
uvdict = {}
|
vuvdict = {}
|
||||||
for face in mesh.polygons:
|
for face in mesh.polygons:
|
||||||
fv = list(face.vertices)
|
fv = list(face.vertices)
|
||||||
uv = uvfaces[face.loop_start:face.loop_start + face.loop_total]
|
uv = uvfaces[face.loop_start:face.loop_start + face.loop_total]
|
||||||
uv = list(map(lambda a: a.uv, uv))
|
uv = list(map(lambda a: a.uv, uv))
|
||||||
# blender's and quake's vertex order seem to be opposed
|
face_tris = []
|
||||||
fv.reverse()
|
for i in range (1, len(fv) - 1):
|
||||||
uv.reverse()
|
# blender's and quake's vertex order are opposed
|
||||||
|
face_tris.append([(fv[0], tuple(uv[0])),
|
||||||
|
(fv[i + 1], tuple(uv[i + 1])),
|
||||||
|
(fv[i], tuple(uv[i]))])
|
||||||
|
for ft in face_tris:
|
||||||
tv = []
|
tv = []
|
||||||
for v, u in map(lambda a,b: (a,b), fv, uv):
|
for vuv in ft:
|
||||||
k = v, tuple(u)
|
if vuv not in vuvdict:
|
||||||
if k not in uvdict:
|
vuvdict[vuv] = len(stverts)
|
||||||
uvdict[k] = len(stverts)
|
vertmap.append(vuv[0])
|
||||||
vertmap.append(v)
|
stverts.append(vuv[1])
|
||||||
stverts.append(u)
|
tv.append(vuvdict[vuv])
|
||||||
tv.append(uvdict[k])
|
|
||||||
tris.append(MDL.Tri(tv))
|
tris.append(MDL.Tri(tv))
|
||||||
return tris, stverts, vertmap
|
return tris, stverts, vertmap
|
||||||
|
|
||||||
|
@ -264,10 +267,10 @@ def process_frame(mdl, scene, frame, vertmap, ingroup = False,
|
||||||
def export_mdl(operator, context, filepath):
|
def export_mdl(operator, context, filepath):
|
||||||
obj = context.active_object
|
obj = context.active_object
|
||||||
mesh = obj.to_mesh (context.scene, True, 'PREVIEW') #wysiwyg?
|
mesh = obj.to_mesh (context.scene, True, 'PREVIEW') #wysiwyg?
|
||||||
if not check_faces (mesh):
|
#if not check_faces (mesh):
|
||||||
operator.report({'ERROR'},
|
# operator.report({'ERROR'},
|
||||||
"Mesh has faces with more than 3 vertices.")
|
# "Mesh has faces with more than 3 vertices.")
|
||||||
return {'CANCELLED'}
|
# return {'CANCELLED'}
|
||||||
mdl = MDL(obj.name)
|
mdl = MDL(obj.name)
|
||||||
mdl.obj = obj
|
mdl.obj = obj
|
||||||
if not get_properties(operator, mdl, obj):
|
if not get_properties(operator, mdl, obj):
|
||||||
|
|
Loading…
Reference in a new issue