我正在尝试创建opengl三角形,但遇到了一些问题。
EBO : ElementArrayBufferObject VAO : VertexArrayObject
当我试图在绑定VAO之前绑定EBO时,它导致了错误,我不知道为什么。
我的代码:
// Generate the VAO and VBO with only 1 object each
glGenVertexArrays(1, &VAO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);
// Make the VAO the current Vertex Array Object by binding it
glBindVertexArray(VAO);它会在渲染时导致问题。
如果我像这样修改代码。
// Generate the VAO and VBO with only 1 object each
glGenVertexArrays(1, &VAO);
// Make the VAO the current Vertex Array Object by binding it
glBindVertexArray(VAO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, sizeof(indices), indices, GL_STATIC_DRAW);它的工作情况和我预期的一样。
我真的不知道为什么不在VAO之前绑定EBO。
发布于 2021-09-29 19:47:39
index buffer (ELEMENT_ARRAY_BUFFER)绑定存储在Vertex Array Object中。调用glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, EBO)时,元素缓冲区对象存储在当前绑定的顶点数组对象中。因此,必须在元素缓冲区之前使用glBindVertexArray(VAO)绑定VAO。
请注意,与index buffer (ELEMENT_ARRAY_BUFFER)相比,vertex buffer绑定(ARRAY_BUFFER)是一种全局状态。
在VAOs状态向量中陈述的每个属性可以引用不同的ARRAY_BUFFER。此引用在调用glVertexAttribPointer时存储。然后,将当前绑定到目标ARRAY_BUFFER的缓冲区与指定的属性索引相关联,并且将对象的名称(值)存储在当前绑定的VAO的状态向量中。
然而,索引缓冲区是VAO的一种状态。如果缓冲区绑定到目标ELEMENT_ARRAY_BUFFER,则此缓冲区将指定给当前绑定的顶点数组对象。
https://stackoverflow.com/questions/69382389
复制相似问题