【问题标题】:pyOpenGL failing to create a vertex buffer objectpyOpenGL 无法创建顶点缓冲区对象
【发布时间】:2014-04-13 18:32:11
【问题描述】:

我刚开始使用 OpenGL,并尝试使用 Python 2.7、pygame 和 pyOpenGL 创建一个基本的“hello world”类型的 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() 之后立即调用。

【问题讨论】:

    标签: python opengl buffer


    【解决方案1】:

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

    【讨论】:

    • 这并没有提供问题的答案。要批评或要求作者澄清,请在他们的帖子下方发表评论 - 您可以随时评论自己的帖子,一旦您有足够的reputation,您就可以comment on any post
    • 对不起,我不明白。你说这不是答案吗?我会说是,而且我知道,因为我在这里回答我自己的问题。你说不清楚?在这种情况下,我将进行编辑以澄清。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多