GL_TRIANGLE_STRIP与GL_TRIANGLE_FAN的区别

38
我需要一个只能使用GL_TRIANGLE_STRIP完成的多边形的示例,以及另一个只能使用GL_TRIANGLE_FAN完成的多边形的示例。
2个回答

72

了解三角带三角扇的区别后,制作一个形状将变得很容易。

三角带

例如,三角带是一组共享顶点的连接三角形。

三角带示例

使用三角带,我们将能够获得以下输出,使用给定的顶点。

enter image description here

三角扇

三角扇也是一组连接的三角形,但这些三角形都有一个共同的顶点,即中心顶点。

在OpenGL中,三角扇的中心顶点是第一个给定的顶点。

三角扇示例

使用三角扇和相同的顶点作为其他示例,我们只能得到彩色区域作为输出。这是由于在三角扇中顶点的排列顺序的重要性。基本上,所有顶点都需要绕中心顶点。

enter image description here

结论

正如您在我们的两个示例顶点集上看到的,这些“输出形状”对于三角带三角扇都是独特的。

注意:图像示例使用顺时针绕序,而在OpenGL中正面使用逆时针绕序,即这些示例实际上是背对着相机的。如果启用面剔除,则这是一个重要的细节。

额外信息

我在这里回答了一个类似的问题,如果你想的话可以阅读一下,因为这些问题是相关的,我实际上使用了相同的图片。


风扇绘制得比带状绘制快吗? - Ray
3
更好的解释是,strip 总是使用一个三角形的最后2个顶点作为下一个三角形的前2个顶点。因此,在条带图中,想象一下做前3个三角形,然后想要添加一个三角形C-E-G而不是D-E-G。无法这样做,因为D-E自动成为第4个三角形的起点。可以使用 fan 来实现结果,因为有一个共同的顶点。结果的图表:维基-三角形扇形 - ToolmakerSteve
1
你的图形第一个三角形的顺序是顺时针的,这可能会对初学者OpenGL用户造成问题。默认OpenGL设置不会绘制顺时针定向的三角形。 - Paul Jurczak
1
@PaulJurczak 哇,7年了我居然没注意到。我已经更新了答案并添加了评论,谢谢 :) - vallentin

9

在纯文本中很难回答。对于Fan来说,S形是不可能的(一般而言,记住Fan的局限性在于每个三角形都有一个共同点)。

至于反过来 - 这是一个诡计问题。triangle_strip可以完成每个triangle_fan多边形,尽管需要一些诡计。 考虑以下多边形(排序显示为triangle_fan)

3--4--5
|\ | /|
2--1--6
   | \|
   8--7

这可以按照以下方式完成:
2-----4
| \  /|
1--3/7| 
   | \|
   6--5

请注意重叠的多边形。如果您不允许双面多边形或重叠,则这将成为一个仅风扇形多边形的示例,我想是吧。

谢谢!这是一个完美的例子。我没有考虑到重叠的多边形,所以这是一个有效的例子。 - tiggares
1
正如你所说,没有所谓的仅风扇多边形,因为你可以通过在每个其他顶点重复公共顶点来模拟三角形风扇。如果顶点1是公共顶点,则执行(1,)2,1,3,1,4,1,5,1,6等操作。每隔一个三角形是退化的。(不需要指定第一个“1”,因为第一个三角形是退化的。) - lmat - Reinstate Monica

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接