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

时间:2017-11-13 20:31:24

标签: c++ opengl freeglut

我是一名学生,几周前我们被要求使用openGL命令(例如GL_DRAW_QUADS)编写3D形状,我已经使用四边形基本上所有事情直到那时(因为它确实更容易)

我遇到了障碍。我有多个可以使用四边形渲染的形状,例如球体和圆环,当使用GL_QUADS直接渲染时,这些形状当前可以正常工作

但是,当通过顶点缓冲区存储要稍后渲染的形状时,这是更好的处理方式,我的模型渲染器将仅适用于由三角形组成的形状。虽然quad在技术上是两个三角形,但只是改变我的方法以使用GL_TRIANGLES,或GL_TRIANGLE_FAN或GL_TRIANGLE_STRIP并不能解决我的问题。

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

1 个答案:

答案 0 :(得分:1)

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

你之前已经通过了{i1,i2,i3,i4},你现在可以通过{i1,i2,i4,i4,i2,i3}来获得覆盖同一个四边形的两个三角形。如果你想要粉丝,它会变得更复杂。您每四个索引执行相同的过程。

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