Wie man VBOs arbeiten mit Python PyOpenGL
Das folgende Python-Programm soll zeichnen Sie ein weißes Dreieck in der rechten oberen Quadranten des Fensters.
import pygame
from OpenGL.GL import *
from ctypes import *
pygame.init ()
screen = pygame.display.set_mode ((800,600), pygame.OPENGL|pygame.DOUBLEBUF, 24)
glViewport (0, 0, 800, 600)
glClearColor (0.0, 0.5, 0.5, 1.0)
glEnableClientState (GL_VERTEX_ARRAY)
vertices = [ 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0 ]
vbo = glGenBuffers (1)
glBindBuffer (GL_ARRAY_BUFFER, vbo)
glBufferData (GL_ARRAY_BUFFER, len(vertices)*4, (c_float*len(vertices))(*vertices), GL_STATIC_DRAW)
running = True
while running:
for event in pygame.event.get():
if event.type == pygame.QUIT:
running = False
glClear (GL_COLOR_BUFFER_BIT)
glBindBuffer (GL_ARRAY_BUFFER, vbo)
glVertexPointer (3, GL_FLOAT, 0, 0)
glDrawArrays (GL_TRIANGLES, 0, 3)
pygame.display.flip ()
Es nicht werfen Fehler, aber leider ist es nicht ziehen Sie das Dreieck.
Ich habe auch versucht, die zum senden der Daten-Puffer als ein NumPy-array:
glBufferData (GL_ARRAY_BUFFER, len(vertices)*4, np.array (vertices, dtype="float32"), GL_STATIC_DRAW)
Auch kein Dreieck gezeichnet wird. PyOpenGL... Y U NO draw VBOs ?
Mein system: Python-2.7.3 ; OpenGL 4.2.0 ; Linux Mint Maya 64 bit
Du musst angemeldet sein, um einen Kommentar abzugeben.
Okay, ich habe es gerade gefunden:
Den 4. parameter des
glVertexPointer
Aufruf mussNone
vertreten eine NULL-Zeiger -Ich schwöre, ich suchte Stunden Letzte Nacht und didn ' T sehen, dass.
GL.glVertexAttribPointer(0, 4, GL.GL_FLOAT, GL.GL_FALSE, 0, None)
. Vorbei0
als letzten parameter funktioniert wohl in C/C++ - code, aber anscheinend nicht in PyOpenGL. Es mussNone
. Ich verbrachte mehrere Stunden Debuggen, bevor ich das gefunden. Ich war schon verrückt. Du hast mich gerettet, vielen Dank!