X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=blender%2Fio_mesh_mspgl%2Fexport_mspgl.py;h=1d7062e68eaa2d5bdca07d500a87549965b953e6;hb=8b8361a2bb9bb377f222408ec59422bd33cfd64f;hp=6de38f8722935d884f45c4fbc441bca1e28926f7;hpb=5028e8accde81677fc4a50c771b955cf324851b2;p=libs%2Fgl.git diff --git a/blender/io_mesh_mspgl/export_mspgl.py b/blender/io_mesh_mspgl/export_mspgl.py index 6de38f87..1d7062e6 100644 --- a/blender/io_mesh_mspgl/export_mspgl.py +++ b/blender/io_mesh_mspgl/export_mspgl.py @@ -1,5 +1,3 @@ -# $Id: mesh_export.py 137 2010-12-05 19:22:35Z tdb $ - import bpy class VertexCache: @@ -71,10 +69,13 @@ class Exporter: self.optimize_cache = False self.cache_size = 64 self.export_lines = True + self.export_uv = "UNIT0" self.tbn_vecs = False + self.tbn_uvtex = "" self.compound = False self.object = False self.material_tex = False + self.smoothing = "MSPGL" def stripify(self, mesh, progress = None): for f in mesh.faces: @@ -228,7 +229,7 @@ class Exporter: mesh = None bmeshes = [] for o in objs: - bmesh = o.create_mesh(context.scene, True, "PREVIEW") + bmesh = o.to_mesh(context.scene, True, "PREVIEW") bmeshes.append(bmesh) if not mesh: mesh = Mesh(bmesh) @@ -236,20 +237,39 @@ class Exporter: mesh.splice(Mesh(bmesh)) progress.set_task("Smoothing", 0.05, 0.35) - mesh.split_smooth() + if self.smoothing=="NONE": + mesh.flatten_faces() + mesh.split_smooth(progress) - mesh.compute_normals() + if self.smoothing!="BLENDER": + mesh.compute_normals() if self.material_tex: mesh.generate_material_uv() - if mesh.has_uv: - progress.set_task("Splitting UVs", 0.35, 0.65) - mesh.split_uv() + texunits = [] + if mesh.uv_textures and self.export_uv!="NONE": + if self.export_uv=="UNIT0": + texunits = [0] + else: + texunits = list(range(len(mesh.uv_textures))) - mesh.compute_uv() + tbn_unit = 0 if self.tbn_vecs: - mesh.compute_tbn() + uvtex_names = [u.name for u in mesh.uv_textures] + if self.tbn_uvtex in uvtex_names: + tbn_unit = uvtex_names.index(uvtex) + del texunits[tbn_unit] + texunits.insert(0, tbn_unit) + + for i in texunits: + progress.set_task("Splitting UVs", 0.35+0.3*i/len(texunits), 0.35+0.3*(i+1)/len(texunits)) + mesh.split_uv(i, progress) + if self.tbn_vecs and i==tbn_unit: + mesh.compute_uv() + mesh.compute_tbn(i) + + mesh.compute_uv() strips = [] loose = mesh.faces @@ -264,23 +284,29 @@ class Exporter: out_file.begin("mesh") fmt = "NORMAL3" - if mesh.has_uv: + if texunits: fmt += "_TEXCOORD2" + for i in texunits[1:]: + fmt += "_TEXCOORD2%d"%i if self.tbn_vecs: fmt += "_ATTRIB33_ATTRIB34" fmt += "_VERTEX3" out_file.begin("vertices", fmt) normal = None - uv = None + uvs = [None]*len(mesh.uv_textures) tan = None bino = None for v in mesh.vertices: if v.normal!=normal: out_file.write("normal3", *v.normal) normal = v.normal - if v.uv!=uv: - out_file.write("texcoord2", *v.uv) - uv = v.uv + for i in texunits: + if v.uvs[i]!=uvs[i]: + if i==0: + out_file.write("texcoord2", *v.uvs[i]) + else: + out_file.write("multitexcoord2", i, *v.uvs[i]) + uvs[i] = v.uvs[i] if v.tan!=tan: out_file.write("attrib3", 3, *v.tan) tan = v.tan @@ -337,12 +363,15 @@ class Exporter: out_file.end() out_file.end() elif mesh.materials: - m = mesh.materials[0] + mat = mesh.materials[0] out_file.begin("material") - out_file.write("diffuse", m.R, m.G, m.B, 1.0) - out_file.write("ambient", m.R*m.amb, m.G*m.amb, m.B*m.amb, 1.0) - out_file.write("specular", m.specR*m.spec, m.specG*m.spec, m.specB*m.spec, 1.0) - out_file.write("shininess", m.hard); + diff = mat.diffuse_color + out_file.write("diffuse", diff.r, diff.g, diff.b, 1.0) + amb = diff*mat.ambient + out_file.write("ambient", amb.r, amb.g, amb.b, 1.0) + spec = mat.specular_color*mat.specular_intensity + out_file.write("specular", spec.r, spec.g, spec.b, 1.0) + out_file.write("shininess", mat.specular_hardness); out_file.end() out_file.end() out_file.end()