X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;ds=sidebyside;f=blender%2Fio_mspgl%2Fexport_mesh.py;h=c1dd2ac09b488cd87e5e856b7a46ebdedf10b42d;hb=912ae952489699769be43f90d4478263461964a4;hp=30a5b4630a145efaaa0829f1b118b176a5b4ff66;hpb=e37851b98dde5082ee92570354746f2f92e21940;p=libs%2Fgl.git diff --git a/blender/io_mspgl/export_mesh.py b/blender/io_mspgl/export_mesh.py index 30a5b463..c1dd2ac0 100644 --- a/blender/io_mspgl/export_mesh.py +++ b/blender/io_mspgl/export_mesh.py @@ -1,12 +1,5 @@ import itertools import bpy -from .outfile import OutFile - -def linear_to_srgb(l): - if l<0.0031308: - return 12.92*l - else: - return 1.055*(l**(1/2.4))-0.055 class VertexCache: def __init__(self, size): @@ -51,10 +44,7 @@ class MeshExporter: self.tbn_vecs = False self.tbn_uvtex = "" self.compound = False - self.object = False self.material_tex = False - self.srgb_colors = True - self.textures = "REF" self.smoothing = "MSPGL" self.export_groups = False self.max_groups = 2 @@ -201,7 +191,7 @@ class MeshExporter: return strips, loose - def export(self, context, fn): + def export(self, context, out_file): if self.compound: objs = context.selected_objects else: @@ -289,9 +279,8 @@ class MeshExporter: progress.set_task("Writing file", 0.95, 1.0) - out_file = OutFile(fn) - if self.object: - out_file.begin("mesh") + from .outfile import open_output + out_file = open_output(out_file) fmt = ["NORMAL3"] if texunits: @@ -365,89 +354,9 @@ class MeshExporter: out_file.write("indices", l.vertices[0].index, l.vertices[1].index) out_file.end() - if self.object: - out_file.end() - out_file.begin("technique") - out_file.begin("pass", '""') - if mesh.materials: - if self.srgb_colors: - cm = linear_to_srgb - else: - cm = lambda x: x - - if self.material_tex: - out_file.begin("material") - out_file.write("diffuse", 1.0, 1.0, 1.0, 1.0) - out_file.end() - index = 0 - for u in mesh.uv_layers: - if u.name=="material_tex": - index = u.unit - out_file.begin("texunit", index) - out_file.begin("texture2d") - out_file.write("min_filter", "NEAREST") - out_file.write("mag_filter", "NEAREST") - out_file.write("storage", "RGB", len(mesh.materials), 1) - texdata = '"' - for m in mesh.materials: - color = [int(cm(c)*255) for c in m.diffuse_color] - texdata += "\\x%02X\\x%02X\\x%02X"%tuple(color) - texdata += '"' - out_file.write("raw_data", texdata) - out_file.end() - out_file.end() - else: - mat = mesh.materials[0] - out_file.begin("material") - if any((s and s.use_map_color_diffuse) for s in mat.texture_slots): - out_file.write("diffuse", 1.0, 1.0, 1.0, 1.0) - amb = cm(mat.ambient) - out_file.write("ambient", amb, amb, amb, 1.0) - else: - diff = mat.diffuse_color - out_file.write("diffuse", cm(diff.r), cm(diff.g), cm(diff.b), 1.0) - amb = diff*mat.ambient - out_file.write("ambient", cm(amb.r), cm(amb.g), cm(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() - - if self.textures!="NONE": - for slot in mesh.materials[0].texture_slots: - if not slot: - continue - - tex = slot.texture - if tex.type!="IMAGE": - continue - - if slot.uv_layer: - for u in mesh.uv_layers: - if u.name==slot.uv_layer: - index = u.unit - else: - index = mesh.uv_layers[0].unit - - out_file.begin("texunit", index) - if self.textures=="INLINE": - out_file.begin("texture2d") - out_file.write("min_filter", "LINEAR") - out_file.write("storage", "RGBA", tex.image.size[0], tex.image.size[1]) - texdata = '"' - for p in tex.image.pixels: - texdata += "\\x%02X"%int(p*255) - texdata += '"' - out_file.write("raw_data", texdata) - out_file.end() - else: - out_file.write("texture", '"%s"'%tex.image.name) - out_file.end() - - out_file.end() - out_file.end() - progress.set_task("Done", 1.0, 1.0) for m in bmeshes: bpy.data.meshes.remove(m) + + return mesh