opengl glVertexAttribPointer的最后一个参数是“0”还是“None”?[已关闭]

c9qzyr3d  于 2023-02-22  发布在  其他
关注(0)|答案(1)|浏览(168)

编辑问题以包含desired behavior, a specific problem or error, and the shortest code necessary to reproduce the problem。这将有助于其他人回答问题。
19天前关闭。
截至19天前,社区正在审查是否重新讨论这个问题。
Improve this question
我尝试在pyOpenGL中设置一个简单的3D引擎。我当前的目标是实现一个2D矩形显示在屏幕上,这根本不起作用。(没有任何东西被渲染到屏幕上,程序也没有抛出任何异常。)
我使用的渲染方法如下所示:

@staticmethod
    def render(model: RawModel):
        glBindVertexArray(model.get_vao_id())
        glEnableVertexAttribArray(0)
        glDrawArrays(GL_TRIANGLES, 1, model.get_vertex_count())
        glDisableVertexAttribArray(0)
        glBindVertexArray(0)

我猜想glDrawArrays()方法可能出了问题,这是由于我绑定Buffer数据的方式造成的:

@classmethod
    def bind_indices_buffer(cls, attribute_number: int, data: list):
        data = numpy.array(data, dtype='float32')
        vbo_id = glGenBuffers(1)
        cls.__vbos.append(vbo_id)
        glBindBuffer(GL_ARRAY_BUFFER, vbo_id)
        glBufferData(GL_ARRAY_BUFFER, data, GL_STATIC_DRAW)
        glVertexAttribPointer(attribute_number, 3, GL_FLOAT, False, 0, 0)
        glBindBuffer(GL_ARRAY_BUFFER, 0)
gz5pxeao

gz5pxeao1#

问题就在这里:
glVertexAttribPointer(attribute_number, 3, GL_FLOAT, False, 0, 0)

glVertexAttribPointer(attribute_number, 3, GL_FLOAT, False, 0, None)

glVertexAttribIPointer的lase参数的类型是const GLvoid *。因此参数必须是Nonectypes.c_void_p(0),但不能是0。

相关问题