Answers:
只需使用索引缓冲区和GL_TRIANGLES。在这种情况下,每个四极需要4个顶点+ 6个索引(6个额外的索引可能听起来开销很大,但实际上并非如此-一旦构建了索引缓冲区,就不必再次触摸它)。有关更多信息,请参见此页面(搜索glDrawElements)。
简单的示例代码:
GLfloat vertices[] = {-1, -1, 0, // bottom left corner
-1, 1, 0, // top left corner
1, 1, 0, // top right corner
1, -1, 0}; // bottom right corner
GLubyte indices[] = {0,1,2, // first triangle (bottom left - top left - top right)
0,2,3}; // second triangle (bottom left - top right - bottom right)
glVertexPointer(3, GL_FLOAT, 0, vertices);
glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_BYTE, indices);
另外,如果只绘制一个四边形,则只需要4个顶点即可用三角形条纹进行绘制(如Wikipedia所示),但我想您已经知道这一点。
{0,1,2, 0,2,3, 4,5,6, 4,6,7}
或相等的is是{0,1,2, 2,3,0, 4,5,6, 6,7,4}
。善类,以帮助这是glText-的Android / SpriteBatch
如Apple文档中所述,使用索引缓冲区并不一定会更快,“为了获得最佳性能,应使用glDrawArrays将模型作为单个未索引的三角条提交”。
因此,尽管a GL_TRIANGLE_STRIP
不需要索引缓冲区即可在4个顶点中完成此操作,并且您可以使用索引缓冲区,但是尝试“保存”重复的2个顶点非常la 脚。因此,建议您分别绘制GL_TRIANGLES
2个并在对角线上重复2个顶点。
使用GL_TRIANGLE_FAN
了四利用4个顶点,而不是6。
GL_TRIANGLE_STRIP
正如其他答案已指出的那样。
3, 4,
}。退化的三角形是3,3,4
和3,4,4
。值得这样做吗?不,除非您的四边形倾向于与公共边成对(或更多)。如果第二四边形为{3,2,4,5},则条带为{0,1,3,2,5,4}
。