glDrawArrays()不起作用

Kra*_*rab 0 opengl

我尝试使用glVertexPointer,glColorPointer和glDrawArrays渲染简单三角形,但它仍然不起作用.还有glBegin的版本,它可以工作,所以顶点没有错误.

void GlWindow::paintGL() {

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

    glLoadIdentity();

    glTranslated(0,-0.5,-1.0);

    GLfloat object[] = {
        -length/5, 0.0, 0.0,
        length/5, 0.0, 0.0,
        0.0, 1.0, 0.0
    };

    GLfloat colors[] = {
        0.0, 1.0, 0.0,
        0.0, 1.0, 0.0,
        0.0, 1.0, 0.0
    };


    glEnableClientState(GL_VERTEX_ARRAY);
    glEnableClientState(GL_COLOR_ARRAY);

    glVertexPointer(3, GL_FLOAT, 0, object);
    glColorPointer(3, GL_FLOAT, 0, colors);

    glDrawArrays(GL_TRIANGLES, 0, 1);

    glDisableClientState(GL_VERTEX_ARRAY);
    glDisableClientState(GL_COLOR_ARRAY);


    /*
    glColor3f(0.0, 1.0, 0.0);

    glBegin(GL_TRIANGLES);
    glVertex3f(-length/5, 0.0, 0.0);
    glVertex3f(length/5, 0.0, 0.0);
    glVertex3f(0.0, 1.0, 0.0);
    glEnd();
    */
    glFlush();

}
Run Code Online (Sandbox Code Playgroud)

Vil*_*nde 5

glDrawArrays的最后一个参数是顶点数.所以在这种情况下你应该指定3而不是1.

  • @Krab:即使它是元素的数量(因为OpenGL使用该术语),它仍然是3.OpenGL在此上下文中定义元素来表示索引.三角形是一种基元,没有绘制命令可以获取基元的数量. (2认同)