X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=blender%2Fio_mesh_mspgl%2Fmesh.py;h=99fb2ee4dafe4f63fbf476440b229654db137de3;hb=b621123e1b2118087223267598d887e8484aba40;hp=165c276fd1533c8b8adb89e85c13adddd4cc158d;hpb=2298b92eddff337760561b12311d1f4e82745486;p=libs%2Fgl.git diff --git a/blender/io_mesh_mspgl/mesh.py b/blender/io_mesh_mspgl/mesh.py index 165c276f..99fb2ee4 100644 --- a/blender/io_mesh_mspgl/mesh.py +++ b/blender/io_mesh_mspgl/mesh.py @@ -67,7 +67,6 @@ class Face: self.vertices = mf.vertices[:] self.uvs = [] self.flag = False - self.material = None def __getattr__(self, attr): return getattr(self._mface, attr) @@ -99,6 +98,18 @@ class Line: self.flag = False +class UvLayer: + def __init__(self, l): + self._layer = l + self.name = None + + def __getattr__(self, attr): + return getattr(self._layer, attr) + +class FakeUvLayer: + def __init__(self, n): + self.name = n + def uvtex_unit_number(uvtex): dot = uvtex.name.find('.') if dot!=-1 and uvtex.name[dot+1:dot+5]=="unit" and uvtex.name[dot+5:].isdigit(): @@ -111,20 +122,22 @@ class Mesh: self._mesh = m self.vertices = [Vertex(v) for v in self.vertices] - self.faces = [Face(f) for f in self.faces] + self.faces = [Face(f) for f in self.polygons] self.materials = self.materials[:] - self.uv_textures = [u for u in self.uv_textures if not u.name.endswith(".hidden")] - self.uv_textures.sort(key=uvtex_unit_number) + self.uv_layers = [UvLayer(u) for u in self.uv_layers] + for i in range(len(self.uv_layers)): + self.uv_layers[i].name = self.uv_textures[i].name + self.uv_layers = [u for u in self.uv_layers if not u.name.endswith(".hidden")] + self.uv_layers.sort(key=uvtex_unit_number) for f in self.faces: f.vertices = [self.vertices[i] for i in f.vertices] for v in f.vertices: v.faces.append(f) - for u in self.uv_textures: - r = u.data[f.index].uv_raw; - f.uvs.append([(r[i], r[i+1]) for i in range(0, 8, 2)]) + for u in self.uv_layers: + f.uvs.append([u.data[f.loop_indices[i]].uv for i in range(len(f.vertices))]) self.edges = dict([(e.key, Edge(e)) for e in self.edges]) for f in self.faces: @@ -164,7 +177,8 @@ class Mesh: offset = len(self.faces) for f in other.faces: f.index += offset - f.material = material_map[f.material_index] + if other.materials: + f.material_index = material_map[f.material_index] self.faces.append(f) for e in other.edges.values(): @@ -181,9 +195,9 @@ class Mesh: e.check_smooth(1) def generate_material_uv(self): + self.uv_layers.append(FakeUvLayer("material_tex")) for f in self.faces: - f.uv = ([(f.material_index+0.5)/len(self.materials), 0.5],)*len(f.vertices) - self.has_uv = True + f.uvs.append([((f.material_index+0.5)/len(self.materials), 0.5)]*len(f.vertices)) def split_vertices(self, find_group_func, progress, *args): groups = [] @@ -298,7 +312,7 @@ class Mesh: v.uvs = [u[i] for u in f.uvs] def compute_tbn(self, index): - if not self.uv_textures: + if not self.uv_layers: return for v in self.vertices: