5

我正在尝试 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 的点数组的工作代码:

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);
}

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

4

3 回答 3

7

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

于 2012-07-15T03:18:47.697 回答
5

参数为

glDrawElements()

如下面所述.. :

第一个 [ mode ] 参数是要渲染什么样的图元。

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

第三个 [ type ] 参数应该是第四个参数中值的类型.. 只能是

 GL_UNSIGNED_BYTE or GL_UNSIGNED_SHORT or GL_UNSIGNED_INT

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

你可以在这里阅读更多关于这个..

于 2012-07-15T04:20:01.347 回答
1

我刚刚遇到了同样的问题。

尝试GL_UNSIGNED_INT

glDrawElements(GL_POLYGON, 4, GL_UNSIGNED_INT, indices);
于 2014-04-09T09:05:16.443 回答