Starting to work with VBOs
This commit is contained in:
parent
0bd7eae818
commit
1b769e05d3
|
@ -92,6 +92,7 @@ class ModelParser:
|
||||||
self.faces = []
|
self.faces = []
|
||||||
self.bounding_box = BoundingBox()
|
self.bounding_box = BoundingBox()
|
||||||
self.center_and_scale = True
|
self.center_and_scale = True
|
||||||
|
self.vbo = None
|
||||||
|
|
||||||
def add_vertex(self, vertex):
|
def add_vertex(self, vertex):
|
||||||
self.vertices.append(vertex)
|
self.vertices.append(vertex)
|
||||||
|
@ -128,6 +129,16 @@ class ModelParser:
|
||||||
gl.glScalef(1/scale, 1/scale, 1/scale)
|
gl.glScalef(1/scale, 1/scale, 1/scale)
|
||||||
gl.glTranslatef(-center.x, -center.y, -center.z)
|
gl.glTranslatef(-center.x, -center.y, -center.z)
|
||||||
|
|
||||||
|
if self.vbo is not None:
|
||||||
|
|
||||||
|
self.vbo.bind()
|
||||||
|
gl.glEnableClientState(gl.GL_VERTEX_ARRAY);
|
||||||
|
gl.glVertexPointerf(self.vbo)
|
||||||
|
gl.glDrawArrays(gl.GL_TRIANGLES, 0, len(self.vbo.data) * 9)
|
||||||
|
self.vbo.unbind()
|
||||||
|
|
||||||
|
else:
|
||||||
|
|
||||||
gl.glBegin(gl.GL_TRIANGLES)
|
gl.glBegin(gl.GL_TRIANGLES)
|
||||||
for face in self.faces:
|
for face in self.faces:
|
||||||
v1 = self.vertices[face.a.vertex]
|
v1 = self.vertices[face.a.vertex]
|
||||||
|
@ -156,6 +167,21 @@ class ModelParser:
|
||||||
if self.center_and_scale:
|
if self.center_and_scale:
|
||||||
gl.glPopMatrix()
|
gl.glPopMatrix()
|
||||||
|
|
||||||
|
def generate_vbo(self):
|
||||||
|
from OpenGL.arrays import vbo
|
||||||
|
from numpy import array
|
||||||
|
# Build VBO
|
||||||
|
l = []
|
||||||
|
|
||||||
|
for face in self.faces:
|
||||||
|
v1 = self.vertices[face.a.vertex]
|
||||||
|
v2 = self.vertices[face.b.vertex]
|
||||||
|
v3 = self.vertices[face.c.vertex]
|
||||||
|
l += [[v1.x, v1.y, v1.z], [v2.x, v2.y, v2.z], [v3.x, v3.y, v3.z]]
|
||||||
|
|
||||||
|
self.vbo = vbo.VBO(array(l, 'f'))
|
||||||
|
|
||||||
|
|
||||||
def generate_vertex_normals(self):
|
def generate_vertex_normals(self):
|
||||||
self.normals = [Normal() for i in self.vertices]
|
self.normals = [Normal() for i in self.vertices]
|
||||||
|
|
||||||
|
|
|
@ -42,8 +42,9 @@ class TrackBallControls:
|
||||||
|
|
||||||
dV = Vertex(move[1] * time * coeff, move[0] * time * coeff, 0)
|
dV = Vertex(move[1] * time * coeff, move[0] * time * coeff, 0)
|
||||||
dTheta = dV.norm2()
|
dTheta = dV.norm2()
|
||||||
|
print(dTheta)
|
||||||
|
|
||||||
if abs(dTheta) < 0.01:
|
if abs(dTheta) < 0.00001:
|
||||||
return
|
return
|
||||||
|
|
||||||
dV.normalize()
|
dV.normalize()
|
||||||
|
@ -95,6 +96,7 @@ def main(args):
|
||||||
running = True
|
running = True
|
||||||
|
|
||||||
model = load_model(args.input)
|
model = load_model(args.input)
|
||||||
|
# model.generate_vbo()
|
||||||
|
|
||||||
while running:
|
while running:
|
||||||
for event in pygame.event.get():
|
for event in pygame.event.get():
|
||||||
|
@ -109,6 +111,10 @@ def main(args):
|
||||||
if event.button == 1:
|
if event.button == 1:
|
||||||
pygame.mouse.get_rel()
|
pygame.mouse.get_rel()
|
||||||
|
|
||||||
|
# Update physics
|
||||||
|
controls.update()
|
||||||
|
|
||||||
|
# Draw frame
|
||||||
init_frame()
|
init_frame()
|
||||||
|
|
||||||
glPushMatrix()
|
glPushMatrix()
|
||||||
|
@ -119,9 +125,7 @@ def main(args):
|
||||||
glFlush()
|
glFlush()
|
||||||
pygame.display.flip()
|
pygame.display.flip()
|
||||||
|
|
||||||
# Update physics
|
# Sleep
|
||||||
controls.update()
|
|
||||||
|
|
||||||
pygame.time.wait(10)
|
pygame.time.wait(10)
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue