glDrawElements三角形使用start& amp;中的顶点进行渲染顶点数组的末尾(使用GL_TRIANGLE_STRIP)

时间:2013-02-12 18:16:40

标签: ios opengl-es-2.0 gl-triangle-strip

我正在尝试使用glDrawElements()的单个调用来渲染一组行。每一行都是一个四边形,我在它们之间使用退化三角形来分隔它们。

渲染时,使用索引0n-1n-2处的顶点绘制了一个额外的三角形,我认为这不是GL_TRIANGLE_STRIPS的正常行为

例如,12个顶点包含3个四边形,我的索引数组如下所示:

(0,1,2,3, 3 4 ,4,5,6,7, 7 8 ,8,9,10,11)

结果如下:

Triangle rendered between first and last vertices

无论我尝试渲染多少个顶点,或者我在索引列表中放了多少个索引,它仍然加入了开始和放大。以三角形结束。我正在使用VBO和IBO绘制,包含在VAO中。所以我想简单地说:

glBindVertexArrayOES(vao);
glDrawElements(GL_TRIANGLE_STRIP, indexCount * sizeof(GLushort), GL_UNSIGNED_SHORT, 0);
glBindVertexArrayOES(0);

VAO设置:

// Bind VAO.
glBindVertexArrayOES(vao);

// Bind and set VBO data.
glBindBuffer(GL_ARRAY_BUFFER, vbo);
glBufferData(GL_ARRAY_BUFFER, vertexCount * sizeof(VertexStructure), vertices, GL_STATIC_DRAW);

// Enable attribute pointers.
glVertexAttribPointer(position, 2, GL_FLOAT, GL_FALSE, sizeof(VertexStructure), (void*)offsetof(VertexStructure, vertex));
glEnableVertexAttribArray(position);
glVertexAttribPointer(color, 4, GL_UNSIGNED_BYTE, GL_TRUE, sizeof(VertexStructure), (void*)offsetof(VertexStructure, color));
glEnableVertexAttribArray(color);

// Bind and set IBO data.
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, ibo);
glBufferData(GL_ELEMENT_ARRAY_BUFFER, indexCount * sizeof(GLushort), indices, GL_STATIC_DRAW);

// Unbind VBO & VAO.
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArrayOES(0);

// Disable attribute pointers.                                                       
glDisableVertexAttribArray(position);
glDisableVertexAttribArray(color);


我可能做些什么愚蠢的事情导致这种行为?

1 个答案:

答案 0 :(得分:2)

  

count 指定要渲染的元素数。

glDrawElements(GL_TRIANGLE_STRIP, indexCount, GL_UNSIGNED_SHORT, 0);