X-Git-Url: http://git.tdb.fi/?p=libs%2Fgl.git;a=blobdiff_plain;f=blender%2Fio_mspgl%2Fexport_mesh.py;h=0d2e66ab442206b9f2454baa0ffe2e37f7557cb3;hp=3f0771fe426b60ad1a59d4fbeb47f85016c5a686;hb=b61c103559c83d6fe7309f2ca4489f09e701c4cf;hpb=fcdc70624618488c514676874006f5eddc4e63df diff --git a/blender/io_mspgl/export_mesh.py b/blender/io_mspgl/export_mesh.py index 3f0771fe..0d2e66ab 100644 --- a/blender/io_mspgl/export_mesh.py +++ b/blender/io_mspgl/export_mesh.py @@ -1,3 +1,4 @@ +import itertools import bpy from .outfile import OutFile @@ -48,6 +49,8 @@ class MeshExporter: self.material_tex = False self.textures = "REF" self.smoothing = "MSPGL" + self.export_groups = False + self.max_groups = 2 def stripify(self, mesh, progress = None): for f in mesh.faces: @@ -227,6 +230,18 @@ class MeshExporter: if self.smoothing!="BLENDER": mesh.compute_normals() + if self.export_groups: + mesh.sort_vertex_groups(self.max_groups) + + # Create a mapping from vertex group indices to bone indices + group_index_map = dict((i, i) for i in range(len(objs[0].vertex_groups))) + if objs[0].parent and objs[0].parent.type=="ARMATURE": + armature = objs[0].parent.data + bone_indices = dict((armature.bones[i].name, i) for i in range(len(armature.bones))) + for g in objs[0].vertex_groups: + if g.name in bone_indices: + group_index_map[g.index] = bone_indices[g.name] + if self.material_tex and mesh.materials: mesh.generate_material_uv() @@ -280,12 +295,15 @@ class MeshExporter: fmt += "_TEXCOORD2%d"%u.unit if self.tbn_vecs: fmt += "_ATTRIB33_ATTRIB34" + if self.export_groups: + fmt += "_ATTRIB%d5"%(self.max_groups*2) fmt += "_VERTEX3" out_file.begin("vertices", fmt) normal = None uvs = [None]*len(texunits) tan = None bino = None + group = None for v in mesh.vertices: if v.normal!=normal: out_file.write("normal3", *v.normal) @@ -304,6 +322,14 @@ class MeshExporter: if v.bino!=bino: out_file.write("attrib3", 4, *v.bino) bino = v.bino + if self.export_groups: + group_attr = [(group_index_map[g.group], g.weight*v.group_weight_scale) for g in v.groups[:self.max_groups]] + while len(group_attr)