1

我尝试使用 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();

}
4

1 回答 1

6

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

于 2013-11-11T17:33:51.807 回答