1 回答
TA贡献1817条经验 获得超6个赞
的第 5 个参数glVertexAttribPointer是连续通用顶点属性之间的字节偏移量。
在您的情况下,属性元组由 5 个浮点数 [x, y, z, ux, uy] 组成。所以偏移量必须是 5*4 = 20。
如果绑定了命名缓冲区对象,则将第 6 个参数glVertexAttribPointer视为缓冲区对象数据存储中的字节偏移量。但无论如何,参数的类型是指针 ( c_void_p)。
因此,如果偏移量为 0,则第 5 个参数可以是None,c_void_p(0)否则偏移量必须被强制转换为c_void_p:
glBindVertexArray(vao)
glEnableVertexAttribArray(posLoc)
glEnableVertexAttribArray(uvLoc)
vertices.bind()
glVertexAttribPointer(posLoc, 3, GL_FLOAT, False, 20, None)
glVertexAttribPointer(uvLoc, 2, GL_FLOAT, False, 20, c_void_p(12))
vertices.bind()假定绑定顶点数组对象 ( glBindBuffer(GL_ARRAY_BUFFER, vbo))。
当glVertexAttribPointer被调用时,通用顶点属性数组的规范存储在当前顶点数组对象的状态向量中。所以必须在 ( glBindVertexArray(vao))之前绑定 VAO 。
此外,对当前绑定的顶点缓冲区对象的名称引用存储在 VAO 中。每个顶点属性都有自己的 VBO 引用。对于所有或某些属性,它们可以全部相同,也可以不同。所以之前也必须绑定顶点缓冲区对象。
添加回答
举报