如何让VBO与Python和PyOpenGL一起使用

时间:2012-11-01 14:48:34

标签: python opengl pygame vbo vertex-buffer

以下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 ...你没有画VBOs?

我的系统:Python 2.7.3; OpenGL 4.2.0; Linux Mint Maya 64位

1 个答案:

答案 0 :(得分:8)

好的,我刚刚发现它:

glVertexPointer调用的第4个参数必须是None,表示空指针

glVertexPointer (3, GL_FLOAT, 0, None)

我发誓,昨晚我搜索了几个小时,但没有看到。