【问题标题】:VAO problems with bind绑定的 VAO 问题
【发布时间】:2013-05-04 13:42:35
【问题描述】:

帮助查找错误。
我认为绑定是错误的。在“显示”中,我使用了 VBO - 一切正常。
但是当我使用 VAO 时,我得到了黑屏。

void createVAO(GLuint *_vId, GLuint *_cId, GLuint *_tId, GLuint *_vao) {
glGenVertexArrays(1, _vao);
glBindVertexArray(*_vao);

glEnableClientState( GL_VERTEX_ARRAY );
glBindBuffer(GL_ARRAY_BUFFER, *_vId );
glVertexPointer( 3, GL_FLOAT, 0, 0 );

glBindVertexArray(0);

glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0); }


void createVBO(GLuint *_vId, GLuint *_cId, GLuint *_tId) {
glGenBuffers(1, _vId);
glBindBuffer(GL_ARRAY_BUFFER, *_vId);
glBufferData(GL_ARRAY_BUFFER, sizeof(XYZ) * cubeVerticesCount, cubePositions, GL_STATIC_DRAW );
glBindBuffer(GL_ARRAY_BUFFER, 0); }


void display() {
glClear(GL_COLOR_BUFFER_BIT);

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glTranslatef(0, 0, -800);
glRotatef(rotate.angle_x, 1, 0, 0);
glRotatef(rotate.angle_y, 0, 1, 0);
glScalef(zoom,zoom,zoom);

// VAO - dont work
glColor3f(1.0f,1.0f,1.0f);
glBindVertexArray(vao);
glDrawElements(GL_POINTS, 0, GL_UNSIGNED_INT, NULL);
glBindVertexArray(0);

// VBO - work
//glEnableClientState( GL_VERTEX_ARRAY );
//glBindBuffer( GL_ARRAY_BUFFER, vId );
//glVertexPointer( 3, GL_FLOAT, 0, 0 );
//glDrawArrays(GL_POINTS, 0, cubeVerticesCount);
//glDisableClientState(GL_VERTEX_ARRAY);

calculateFPS();
glutSwapBuffers(); }

完整的源代码。 http://codepad.org/I87AxDl4

我很抱歉有很多不必要的代码。

【问题讨论】:

    标签: c++ opengl vbo


    【解决方案1】:

    VAO 没有index buffer in itGL_ELEMENT_ARRAY_BUFFER 是 VAO 状态的一部分。因此,当您绑定 VAO 时,绑定到 GL_ELEMENT_ARRAY_BUFFER 的内容将更改到该 VAO 的元素数组缓冲区。

    您需要在绑定您的 VAO 之后(但在取消绑定之前)绑定 createVAO 中的元素缓冲区。

    【讨论】:

    • 我理解正确吗?我还需要创建一个索引数组,并绑定它?
    • @ObiSan:这就是glDrawElements 所做的:它draws with an array of indices。因此,如果要使用索引数组进行绘制,则需要使用索引数组进行绘制。如果您不想使用索引数组进行绘制,为什么要使用glDrawElements
    • 找到了一个不错的教程,但是没仔细看。谢谢。
    【解决方案2】:

    您在 VAO 中使用 glDrawElements 而没有任何 GL_ELEMENT_ARRAY_BUFFER

    你可能想使用glDrawArrays,就像你的// VBO - work一样

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多