从用四边形绘制的形状转换为用三角形绘制的形状

Conversion from a shape drawn with quads, to a shape drawn with triangles

我是一名学生,几周前的遗留 openGL 作业要求我们使用 GL_DRAW_QUADS 等 openGL 命令编写 3D 形状,直到那时我基本上一直在使用四边形(因为它确实更容易)

我 运行 遇到障碍了。我有多个可以用四边形渲染的形状,例如球体和环面,当直接用 GL_QUADS

渲染时,这些形状目前可以正常工作

但是,当通过顶点缓冲区存储稍后要渲染的形状时,这是更好的做事方式,我的模型渲染器将只处理由三角形组成的形状。尽管从技术上讲,四边形是两个三角形,但仅更改我的方法以使用 GL_TRIANGLES、GL_TRIANGLE_FAN 或 GL_TRIANGLE_STRIP 并不能解决我的问题。

我想知道将以四边形绘制的形状转换为三角形的最佳方法是什么,而无需完全重写渲染这些形状的方法。

假设您有一组顶点 {v1,v2,v3,v4,v5,...} 并假设您传递的是索引列表 {i1,i2,i3,i4,i5,... } 绘制命令,你只需要传递一个不同的索引列表。

以前您会传递 {i1,i2,i3,i4} 的地方,现在您可以传递 {i1,i2,i4,i4,i2,i3} 以获得覆盖同一四边形的两个三角形。如果你想要粉丝,事情会变得更复杂。您每四个索引执行相同的过程。

1 -- 2           1 -- 2 
|    |  becomes  |  / |
|    |           | /  |
4 -- 3           4 -- 3