OSDN Git Service

add mqo loader
[meshio/pymeshio.git] / examples / vertexarraymap.py
1 #!/usr/bin/python
2 # coding: utf-8
3
4 import numpy
5 import vertexarray
6
7
8 '''
9 頂点配列をマテリアル毎に分別する
10 '''
11 class VertexArrayMap(object):
12     def __init__(self, materials):
13         self.materials=materials
14         self.vertexArrayMap={}
15
16     def getVertexArray(self, material_index):
17         material=self.materials[material_index]
18         if not material in self.vertexArrayMap:
19             vertexArray=vertexarray.VertexArray([])
20             self.vertexArrayMap[material]=vertexArray
21         return self.vertexArrayMap[material]
22
23     def addTriangle(self, material_index, v0, v1, v2):
24         vertexArray=self.getVertexArray(material_index)
25         vertexArray.vertices.append(v0.x)
26         vertexArray.vertices.append(v0.y)
27         vertexArray.vertices.append(v0.z)
28         vertexArray.vertices.append(v1.x)
29         vertexArray.vertices.append(v1.y)
30         vertexArray.vertices.append(v1.z)
31         vertexArray.vertices.append(v2.x)
32         vertexArray.vertices.append(v2.y)
33         vertexArray.vertices.append(v2.z)
34
35     def draw(self):
36         for m, vertexArray in self.vertexArrayMap.items():
37             m.begin()
38             vertexArray.draw()
39             m.end()
40
41     def optimize(self):
42         for v in self.vertexArrayMap.values():
43             v.vertices=numpy.array(v.vertices, 'f') 
44
45
46 '''
47 頂点配列をマテリアル毎に分別する(UV付き)
48 '''
49 class VertexArrayMapWithUV(object):
50     def __init__(self, materials):
51         self.materials=materials
52         self.vertexArrayWithUVMap={}
53
54     def getVertexArray(self, material_index):
55         material=self.materials[material_index]
56         if not material in self.vertexArrayWithUVMap:
57             vertexArray=vertexarray.VertexArrayWithUV([], [])
58             self.vertexArrayWithUVMap[material]=vertexArray
59         return self.vertexArrayWithUVMap[material]
60
61     def addTriangle(self, material_index, v0, v1, v2, uv0, uv1, uv2):
62         vertexArray=self.getVertexArray(material_index)
63         vertexArray.vertices.append(v0.x)
64         vertexArray.vertices.append(v0.y)
65         vertexArray.vertices.append(v0.z)
66         vertexArray.vertices.append(v1.x)
67         vertexArray.vertices.append(v1.y)
68         vertexArray.vertices.append(v1.z)
69         vertexArray.vertices.append(v2.x)
70         vertexArray.vertices.append(v2.y)
71         vertexArray.vertices.append(v2.z)
72         vertexArray.uvarray.append(uv0.x)
73         vertexArray.uvarray.append(uv0.y)
74         vertexArray.uvarray.append(uv1.x)
75         vertexArray.uvarray.append(uv1.y)
76         vertexArray.uvarray.append(uv2.x)
77         vertexArray.uvarray.append(uv2.y)
78
79     def draw(self):
80         for m, vertexArray in self.vertexArrayWithUVMap.items():
81             m.begin()
82             vertexArray.draw()
83             m.end()
84
85     def optimize(self):
86         for v in self.vertexArrayWithUVMap.values():
87             v.vertices=numpy.array(v.vertices, 'f') 
88             v.uvarray=numpy.array(v.uvarray, 'f') 
89
90     def onInitialize(self):
91         [m.onInitialize() for m in self.materials]
92