我正在尝试使用对glDrawElements()
. 每条线都是一个四边形,我在它们之间使用退化三角形来分隔它们。
渲染时,正在使用索引和处的顶点绘制一个额外的三角形0
,我认为这不是.n-1
n-2
GL_TRIANGLE_STRIPS
例如,12 个顶点组成 3 个四边形,我的索引数组如下所示:
(0, 1, 2, 3, 3 , 4 , 4, 5, 6, 7, 7 , 8 , 8, 9, 10, 11)
结果是这样的:
不管我要渲染多少个顶点,或者我在索引列表中放了多少个索引,它仍然会用三角形连接开始和结束。我正在使用 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);
我可能会做什么愚蠢的事情来导致这种行为?