在了解了VBO之后,一位朋友告诉我尝试使用VAOs将多维数据集索引与顶点连接起来。我跟踪了我能找到的每一个教程,但都没有用。看起来缓冲区是正确的绑定和所有的工作,直到我试图绘制他们。
我就是这样产生的-
glGenVertexArrays(1, &VAO);
glBindVertexArray(VAO);
glEnableVertexAttribArray(0);
glGenBuffers(1, &cubeIndex);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cubeIndex);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 36 * sizeof(GLuint), cubeIndices, GL_STATIC_DRAW);
glVertexAttribPointer(0, 3, GL_UNSIGNED_INT, GL_FALSE, sizeof(GLuint)*3, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
glEnableVertexAttribArray(1);
glGenBuffers(1, &cubeVBO);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, cubeVBO);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, 21 * sizeof(GLfloat), cubeVertPoints, GL_STATIC_DRAW);
glVertexAttribPointer(1, 3, GL_FLOAT, GL_FALSE, sizeof(GLfloat)*3, 0);
glBindVertexArray(0);
glDisableVertexAttribArray(0);
glDisableVertexAttribArray(1);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);渲染-
glEnableClientState(GL_VERTEX_ARRAY);
glBindVertexArray(VAO);
glDrawArrays(GL_TRIANGLES, 0, size);//Runtime exception here if anything larger that '2' is provided?
glBindVertexArray(0);发布于 2014-02-16 18:11:11
你的代码没有意义。您从不将任何东西绑定到GL_ARRAY_BUFFER,因此您的glVertexAttribPointer()调用将指向无效的VBOs -在绘制该对象时解释崩溃。
我不知道你想在这里做什么。看起来,cubeIndex应该是索引呈现的元素数组。但是,您似乎试图使用索引作为顶点属性。但是,您应该将其作为GL_EMEMENT_ARRAY_BUFFER (就像您已经做的那样)与glDrawElements() (您不做的事情)结合使用。您的cubeVBO应该是一个GL_ARRAY_BUFFER,您应该使用它作为顶点属性。
您的数组的大小似乎也很奇怪。当绘制一个六面和两个三角形的立方体时,36 Uint作为索引缓冲区是有意义的。但是,对于每个向量有3个分量的顶点数据,21个浮点仅为7个顶点--对于一个立方体来说很奇怪。
请看一下顶点规范和顶点绘制在OpenGL wiki中的页面,或者看看一些教程--到目前为止您发布的代码让我觉得您没有理解基本的概念。
https://stackoverflow.com/questions/21814711
复制相似问题