首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++/OpenGL - VAO问题

C++/OpenGL - VAO问题
EN

Stack Overflow用户
提问于 2014-02-16 17:24:45
回答 1查看 523关注 0票数 0

在了解了VBO之后,一位朋友告诉我尝试使用VAOs将多维数据集索引与顶点连接起来。我跟踪了我能找到的每一个教程,但都没有用。看起来缓冲区是正确的绑定和所有的工作,直到我试图绘制他们。

我就是这样产生的-

代码语言:javascript
复制
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);

渲染-

代码语言:javascript
复制
glEnableClientState(GL_VERTEX_ARRAY);
glBindVertexArray(VAO);

glDrawArrays(GL_TRIANGLES, 0, size);//Runtime exception here if anything larger that '2' is provided?

glBindVertexArray(0);
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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中的页面,或者看看一些教程--到目前为止您发布的代码让我觉得您没有理解基本的概念。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21814711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档