C++/OpenGL - VAO Problems
C++/OpenGL - VAO Problems
在了解了VBO之后,一位朋友告诉我尝试使用VAO将立方体索引与顶点链接起来。我几乎遵循了我能找到的每一个教程,但都无济于事。看起来缓冲区绑定正确,在我尝试绘制它们之前,一切都正常。
这就是我生成VAO-的方式
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);
您的代码没有意义。您从未将任何东西绑定到GL_ARRAY_BUFFER
,因此glVertexAttribPointer()
调用将指向无效的VBO——这解释了当您尝试绘制该对象时发生的崩溃。
我不知道你在这里想干什么。看起来cubeIndex
应该是用于索引渲染的元素数组。但您似乎试图将索引用作顶点属性。但您应该将其作为GL_EMEMENT_ARRAY_BUFFER
(正如您已经做的那样)与glDrawElements()
(您没有做的事情)一起使用。cubeVBO
应该是GL_ARRAY_BUFFER
,并且应该将其用作顶点属性。
你的阵列的大小看起来也很奇怪。当绘制一个有6条边和2个三角形的立方体时,36个Uint作为索引缓冲区是有意义的。但是,每个向量有3个分量的顶点数据的21个浮点值只有7个顶点——这对于立方体来说很奇怪。
请查看OpenGL wiki中的"顶点规范"answers"顶点渲染"页面,或者查看一些教程——到目前为止,您发布的代码让我认为您没有掌握基本概念。
相关文章:
- Problems with std::cin.fail()
- 无法使用VAO和EBO(openGL)绘制多个对象
- QT GStreamer Windows linker problems
- opengl-VAO也存储Texrture单元调用
- VBO必须在VAO之后绑定
- Problems with emscripten (WebAssembly)
- 无法在 OpenGL 上渲染具有不同 VAO 的不同网格
- 为什么当我从语句检查中删除"+ mod"时,以下程序给出错误的答案。问题链接:https://www.codechef.com/problems/FFC219B
- OpenGL如何区分VAO中的结合点和glBindBufferBase定义的结合点?
- Problems with QByteArray::right
- 我们是否需要序列化 VAO 和 VBO
- OpenGL VAO VBO resize
- glVertexAttribDivisor 存储在哪里 - VAO、VBO 或全局状态?
- 将VAO与glDrawElements一起使用
- 为什么VAO可以使用VBO数据绑定它?
- 两个不同的对象 OpenGL.VAO VBO IBO 网格失真问题
- 如果我使用VAO,我是否需要致电GlenableVertexattribarray
- glutPassiveMotionFunc problems
- OpenGL VAO无法按预期工作
- C++/OpenGL - VAO Problems