4 from OpenGL.GL import *
\r
15 class VertexArray(object):
\r
16 def __init__(self, vertices):
\r
17 self.vertices=vertices
\r
20 return "<VertexArray %d>" % len(self.vertices)
\r
24 glEnableClientState(GL_VERTEX_ARRAY)
\r
25 glVertexPointer(3, GL_FLOAT, 0, self.vertices)
\r
27 glDrawArrays(GL_TRIANGLES, 0, len(self.vertices))
\r
29 glDisableClientState(GL_VERTEX_ARRAY)
\r
42 class VertexArrayWithUV(object):
\r
43 def __init__(self, vertices, uvarray):
\r
44 self.vertices=vertices
\r
45 self.uvarray=uvarray
\r
48 return "<VertexArrayWithUV %d>" % len(self.vertices)
\r
52 glEnableClientState(GL_VERTEX_ARRAY)
\r
53 glVertexPointer(3, GL_FLOAT, 0, self.vertices)
\r
55 glEnableClientState(GL_TEXTURE_COORD_ARRAY)
\r
56 glTexCoordPointer(2, GL_FLOAT, 0, self.uvarray)
\r
58 triangle_count=int(len(self.vertices)/3)
\r
59 glDrawArrays(GL_TRIANGLES, 0, triangle_count)
\r
61 glDisableClientState(GL_TEXTURE_COORD_ARRAY)
\r
62 glDisableClientState(GL_VERTEX_ARRAY)
\r
74 class IndexedVertexArray(object):
\r
88 def addVertex(self, pos, normal, uv, color, b0, b1, w0):
\r
97 def addMaterial(self, material):
\r
98 self.materials.append(material)
\r
100 self.indicesMap[material]=indices
\r
105 glEnableClientState(GL_VERTEX_ARRAY)
\r
106 glVertexPointer(4, GL_FLOAT, 0, self.vertices)
\r
108 glEnableClientState(GL_TEXTURE_COORD_ARRAY)
\r
109 glTexCoordPointer(2, GL_FLOAT, 0, self.uvlist)
\r
111 for m in self.materials:
\r
114 indices=self.indicesMap[m]
\r
116 glDrawElements(GL_TRIANGLES, len(indices), GL_UNSIGNED_INT, indices)
\r
119 glDisableClientState(GL_TEXTURE_COORD_ARRAY)
\r
120 glDisableClientState(GL_VERTEX_ARRAY)
\r
122 def optimize(self):
\r
123 self.vertices=numpy.array(self.vertices, numpy.float32)
\r
124 self.uvlist=numpy.array(self.uvlist, numpy.float32)
\r
125 for m, indices in self.indicesMap.items():
\r
126 self.indicesMap[m]=numpy.array(indices, numpy.uint32)
\r
128 def get_boundingbox(self):
\r
129 vertices_size=len(self.vertices)
\r
130 if(vertices_size==0):
\r
131 return ([0, 0, 0], [0, 0, 0])
\r
132 print('vertices_size %d' % vertices_size)
\r
133 print(self.vertices[0])
\r
134 def vertex_gen_factory():
\r
135 for i in range(0, vertices_size, 4):
\r
138 self.vertices[i+1],
\r
141 vertex_gen=vertex_gen_factory()
\r
145 for v in vertex_gen:
\r
158 return (min_v, max_v)
\r