OpenGL:glDrawElements不绘制

may*_*nic 5 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;
}
Run Code Online (Sandbox Code Playgroud)

仅使用带有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();
}
Run Code Online (Sandbox Code Playgroud)

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

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();
}
Run Code Online (Sandbox Code Playgroud)

不工作的代码,试图使用glDrawElements:

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

    glDrawElements(GL_POLYGON, 4, GL_INT, indices);
}
Run Code Online (Sandbox Code Playgroud)

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

wqu*_*ist 7

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


iKl*_*lsR 5

的参数

glDrawElements()
Run Code Online (Sandbox Code Playgroud)

如下面所述.. :

第一个[ mode ]参数是要呈现的原始类型。

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

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

 GL_UNSIGNED_BYTE or GL_UNSIGNED_SHORT or GL_UNSIGNED_INT
Run Code Online (Sandbox Code Playgroud)

第四个[ indexs ]参数是指向存储索引的指针。

您可以在此处阅读更多内容。

  • 哦,对,对。实际上,它是指向索引存储位置的指针。但是与普通的c指针不同,它不指向系统内存中的数据,而是指向元素缓冲区中的数据(因此0x0是IB中的第一个元素)。 (5认同)
  • “第四个[索引]参数是指向索引存储位置的指针。” 不!索引必须存储在当前绑定到GL_ELEMENT_ARRAY_BUFFER的缓冲区中。第四个参数是索引数组中的偏移指针。 (3认同)