以下 Python 程序应该在窗口的右上象限绘制一个白色三角形。
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 ()
它不会抛出任何错误,但不幸的是它没有绘制三角形。
我还尝试将缓冲区数据提交为NumPy数组:
glBufferData (GL_ARRAY_BUFFER, len(vertices)*4, np.array (vertices, dtype="float32"), GL_STATIC_DRAW)
也没有绘制任何三角形。PyOpenGL...为什么不绘制VBO?
我的系统:Python 2.7.3; OpenGL 4.2.0; Linux Mint Maya 64位
GL.glVertexAttribPointer(0, 4, GL.GL_FLOAT, GL.GL_FALSE, 0, None)
也是一样的。在C/C++代码中将0
作为最后一个参数传递可能有效,但在PyOpenGL中显然不行。它必须是None
。在我发现这个问题之前,我花了几个小时进行调试。我已经快疯了。你救了我,非常感谢! - Jiří Stránský