【发布时间】:2013-11-29 02:41:50
【问题描述】:
我正在学习 openGL,并且我遇到了使用顶点缓冲区对象的三角形风扇。如果给定一个要渲染的顶点数组,openGL 如何决定必须使用这些顶点中的多少来构造三角形扇形。似乎可以使用任意数量的顶点。
【问题讨论】:
我正在学习 openGL,并且我遇到了使用顶点缓冲区对象的三角形风扇。如果给定一个要渲染的顶点数组,openGL 如何决定必须使用这些顶点中的多少来构造三角形扇形。似乎可以使用任意数量的顶点。
【问题讨论】:
这可以通过比较三角带和三角扇来轻松解释。
您可能知道,Triangle Strip 是一组连接的三角形,它们共享顶点,这样可以更有效地使用内存。 (我们节省内存是因为我们不存储所有重复的顶点)
另一方面,我们有一个三角形扇,这也是一组相连的三角形。尽管所有这些三角形都有一个共同的顶点,即中心顶点。 (第一个顶点总是中心)
话虽如此,我们可以使用上面相同的图像并更改顶点的顺序。完成后,三角形风扇将看起来像这样。 (其中 A, 是第一个和中心顶点)
在上图中,三角扇只能在彩色区域起作用,因为顶点需要按照三角扇排列。
【讨论】:
strip总是使用一个三角形的最后2个顶点作为下一个三角形的前2个顶点。所以在条形图中,想象做前 3 个三角形,然后想要添加一个三角形 C-E-G 而不是 D-E-G。不能这样做,因为 D-E 自动是三角形 4 的开始。结果可以用fan 完成,因为有一个公共顶点。结果图:Wiki- Triangle fan
每个三角形共享中心顶点A,并重复使用最后寻址的顶点。因此在定义ABC 之后,每个下面的三角形只需要1 个点(例如D、E、F)。
Indices: A,B,C,D,E,F [Count: 6]
Triangles: (A,B,C)
(A) (C,D)
(A) (D,E)
(A) (E,F) [N=4] --> 4+2 = 6
另一种思考方式是,每个三角形与前一个三角形共享一条从中心顶点辐射的边;就像折纸扇一样。
【讨论】:
看这里:GL_TRIANGLE FAN Explanation
你给 openGL 的顶点越多,你得到的三角形就越多。第一个顶点对所有三角形都是通用的。第一个三角形由顶点 1、2 和 3 组成。第二个三角形由 1、3 和 4 组成。依此类推。 对于 n 个顶点,您会得到 n - 2 个三角形。
【讨论】:
这是由您用来进行渲染的命令指定的。例如drawArrays() 和drawElements() 都有一个count 参数,用于指定要使用的顶点数。
【讨论】: