OpenGL:glDrawElements可以绘制

时间:2012-07-15 03:12:40

标签: opengl

我正在尝试使用Vertex Arrays,但由于某种原因,glDrawElements命令不会为我绘制任何内容。我可以在中间使用glBegin / glEnd和glDrawElements绘制,但glDrawElements不起作用。这是一段代码:

这些数组在构造函数中设置:

double points[100];
GLint indices[50];

for (int i=0; i < 50; i++){
    points[2*i] = radius * cos(i*2*PI/50);
    points[2*i + 1] = radius * sin(i*2*PI/50);
    indices[i] = i;
}

仅使用带有glArrayElement的points数组的工作代码:

void GLCircle::draw()
{
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(2, GL_DOUBLE, 0, points);

    glBegin(GL_POLYGON);
    for (int i=0; i < 50; i++){
        glArrayElement(i);
    }
    glEnd();
}

还使用点数组工作代码,通过索引数组访问特定索引:

void GLCircle::draw()
{
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(2, GL_DOUBLE, 0, points);

    glBegin(GL_POLYGON);
    for (int i=0; i < 50; i++){
        glArrayElement(indices[i]);
    }
    glEnd();
}

非工作代码,试图使用glDrawElements:

void GLCircle::draw()
{
    glEnableClientState(GL_VERTEX_ARRAY);
    glVertexPointer(2, GL_DOUBLE, 0, points);

    glDrawElements(GL_POLYGON, 4, GL_INT, indices);
}

有什么建议吗?在这一点上我并不完全有必要使用它,但令人不安的是它不起作用......

3 个答案:

答案 0 :(得分:7)

glDrawElements的第二个参数是count,所以4不应该是索引的数量(50)?

答案 1 :(得分:4)

的参数
glDrawElements()

如下......:

第一个[模式]参数是要呈现的基元类型。

第二个[ count ]参数应该是要渲染的元素数。即。 顶点的数量

第3个[类型]参数应该是第4个参数中值的类型..只能是

 GL_UNSIGNED_BYTE or GL_UNSIGNED_SHORT or GL_UNSIGNED_INT

第4个[ indices ]参数是指向索引存储位置的指针。

您可以阅读有关此here ..

的更多信息

答案 2 :(得分:1)

我刚遇到同样的问题。

尝试GL_UNSIGNED_INT

glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_INT, indices);