X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=blender%2Fio_mspgl%2Fexport_mesh.py;h=30a5b4630a145efaaa0829f1b118b176a5b4ff66;hb=8141d1e1cf5de45d1e8d640f3f8643ee748292dc;hp=0d2e66ab442206b9f2454baa0ffe2e37f7557cb3;hpb=b61c103559c83d6fe7309f2ca4489f09e701c4cf;p=libs%2Fgl.git diff --git a/blender/io_mspgl/export_mesh.py b/blender/io_mspgl/export_mesh.py index 0d2e66ab..30a5b463 100644 --- a/blender/io_mspgl/export_mesh.py +++ b/blender/io_mspgl/export_mesh.py @@ -2,6 +2,12 @@ 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): self.size = size @@ -47,6 +53,7 @@ class MeshExporter: self.compound = False self.object = False self.material_tex = False + self.srgb_colors = True self.textures = "REF" self.smoothing = "MSPGL" self.export_groups = False @@ -286,19 +293,19 @@ class MeshExporter: if self.object: out_file.begin("mesh") - fmt = "NORMAL3" + fmt = ["NORMAL3"] if texunits: for i, u in texunits: if u.unit==0: - fmt += "_TEXCOORD2" + fmt.append("TEXCOORD2") else: - fmt += "_TEXCOORD2%d"%u.unit + fmt.append("TEXCOORD2_%d"%u.unit) if self.tbn_vecs: - fmt += "_ATTRIB33_ATTRIB34" + fmt += ["TANGENT3", "BINORMAL3"] if self.export_groups: - fmt += "_ATTRIB%d5"%(self.max_groups*2) - fmt += "_VERTEX3" - out_file.begin("vertices", fmt) + fmt.append("ATTRIB%d_5"%(self.max_groups*2)) + fmt.append("VERTEX3") + out_file.begin("vertices", *fmt) normal = None uvs = [None]*len(texunits) tan = None @@ -317,10 +324,10 @@ class MeshExporter: uvs[i] = v.uvs[i] if self.tbn_vecs: if v.tan!=tan: - out_file.write("attrib3", 3, *v.tan) + out_file.write("tangent3", *v.tan) tan = v.tan if v.bino!=bino: - out_file.write("attrib3", 4, *v.bino) + out_file.write("binormal3", *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]] @@ -363,6 +370,11 @@ class MeshExporter: 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) @@ -378,7 +390,7 @@ class MeshExporter: out_file.write("storage", "RGB", len(mesh.materials), 1) texdata = '"' for m in mesh.materials: - color = [int(c*255) for c in m.diffuse_color] + 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) @@ -387,10 +399,15 @@ class MeshExporter: else: mat = mesh.materials[0] out_file.begin("material") - 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) + 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);