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, 'f')
\r
124 self.uvlist=numpy.array(self.uvlist, 'f')
\r