VBO:数组未绘制



我正在遵循本指南,我正在尝试在屏幕上绘制一个四边形。我也看到了源代码,它是一样的,它应该可以工作,但就我而言,屏幕上没有显示任何内容。我正在使用带有顶点着色器的 OpenGL 2.0,它只是将颜色设置为红色,以使四边形在屏幕上可见。

在callig glutMainLoop之前,我生成顶点缓冲区对象:

#include <GL/glut.h>
#include <GL/glew.h>
vector<GLfloat> quad; 
GLuint buffer;
void init()
{
    // This routine gets called before glutMainLoop(), I omitted all the code
    // that has to do with shaders, since it's correct.
    glewInit();
    quad= vector<GLfloat>{-1,-1,0, 1,-1,0, 1,1,0, -1,1,0};
    glGenBuffers(1,&buffer);
    glBindBuffer(GL_ARRAY_BUFFER, buffer);
    glBufferData(GL_ARRAY_BUFFER,sizeof(GLfloat)*12,quad.data(),GL_STATIC_DRAW);
}

这是我的渲染例程:

void display()
{
    glClearColor(0,0,0,0);
    glClear(GL_COLOR_BUFFER_BIT);
    glEnableVertexAttribArray(0);
    glBindBuffer(GL_ARRAY_BUFFER,buffer);
    glVertexAttribPointer(0,3,GL_FLOAT,GL_FALSE,0,0);
    // I also tried passing quad.data() as last argument, but nothing to do.
    glDrawArrays(GL_QUADS,0,12);
    glDisableVertexAttribArray(0);
    glutSwapBuffers();
}

问题是屏幕上没有吸引任何东西,我只看到一个黑色窗口。四边形应该是红色的,因为我在顶点着色器中设置了红色。

所以也许问题在于 glDrawArrays(GL_QUADS, 0,

12) 中的计数; 必须是 glDrawArrays(GL_QUADS, 0, 4);

我缺少像这样的glEnableClientState:

glEnableClientState(GL_VERTEX_ARRAY);
glDrawArrays(GL_QUADS,0,12);
glDisableClientState(GL_VERTEX_ARRAY);

相关内容

  • 没有找到相关文章

最新更新