pyOpenGL 无法创建顶点缓冲对象

0 投票
1 回答
552 浏览
提问于 2025-04-18 02:36

我刚开始学习OpenGL,想用Python 2.7、pygame和pyOpenGL来做一个简单的“你好,世界”类型的OpenGL应用,目的是用GPU来渲染一些2D图形。在尝试为顶点数据创建一个顶点缓冲区时:

Traceback (most recent call last):
  File "test.py", line 126, in <module>
    main()
  File "test.py", line 59, in main
    vertexbuffer = vbo.VBO([[0, 0], [1, 0], [1, 1], [0, 1], [2.2, 2.2], [2.7, 2.7], [2.2, 3.2], [1.7, 2.7]])
  File "/usr/lib/python2.7/site-packages/OpenGL/arrays/vbo.py", line 180, in __init__
    self.set_array( data, size )
  File "/usr/lib/python2.7/site-packages/OpenGL/arrays/vbo.py", line 204, in set_array
     self.size = ArrayDatatype.arrayByteCount( self.data )
  File "/usr/lib/python2.7/site-packages/OpenGL/arrays/arraydatatype.py", line 176, in arrayByteCount
    return cls.getHandler(value).arrayByteCount( value )
AttributeError: 'ListHandler' object has no attribute 'arrayByteCount'

vbo.VBOOpenGL.arrays.vbo.VBO

这让我很困惑。搜索这个错误信息,居然没有找到任何具体的解决办法。

有没有什么见解?

编辑:我想把在这个VBO调用之前执行的代码也贴上来。

def init(screen_size):
    screen = pygame.display.set_mode(screen_size, HWSURFACE | OPENGL | DOUBLEBUF)

    glViewport(0, 0, screen_size[0], screen_size[1])

    glShadeModel(GL_SMOOTH)
    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)

    viewport = glGetIntegerv(GL_VIEWPORT)

    glMatrixMode(GL_PROJECTION)
    glLoadIdentity()
    glFrustum(-1.0, 1.0,  1.0, -1.0,  1, 10.0);

    glMatrixMode(GL_MODELVIEW)
    glLoadIdentity()

从错误追踪信息中看到的 vbo.VBO(...) 这一行是在这个 init() 之后立即被调用的。

1 个回答

0

我自己解决了。vbo.VBO 需要的是 numpy 类型的数组(numpy.array),而不是普通的列表。

撰写回答