TriangleList与TriangleStrip

时间:2012-08-23 14:59:46

标签: opengl

在TriangleStrip和TriangleList之间,哪一个表现得更快?

我刚读过的有趣的事情说:“我使用三角形列表的方法大约有780fps,而带有三角形条带的方法只有70fps”。我没有详细说明他到底在做什么,但根据这一点,他使用TriangleList获得了大约10倍的帧速率。我觉得这个反直觉,因为列表包含更多的顶点数据。

有没有人知道为什么TriangleList可能比Strip快得多的技术原因?

3 个答案:

答案 0 :(得分:9)

三角形条带是内存优化,速度优化。在过去的某个时刻,当系统内存和视频内存之间的总线带宽是数据密集型应用程序的主要瓶颈时,那么它也可以节省时间,但这种情况很少发生。此外,旧硬件中的转换缓存非常小,因此普通条带的缓存效果优于错误优化的索引列表。

三角形列表可以比三角形条带等效或更高效的原因是索引。如果您正确地优化几何和三角形顺序,则指数允许硬件以非常可见的方式转换和缓存顶点。此外,在需要大量退化三角形的非常复杂的网格中,条带将比索引列表更慢并占用更多内存。

我必须说我有点惊讶你的例子显示了一个数量级的差异。

答案 1 :(得分:6)

三角形列表可以比条带快得多,因为它可以通过轻松地将顶点数据批处理来节省绘图调用。绘制调用很昂贵,因此使用条带节省的内存有时不值得降低性能。

答案 2 :(得分:1)

索引三角形列表通常会获胜..

这是一个简单的规则。计算要上传到图形卡的顶点数。如果三角形列表(准确的索引三角形列表)的顶点比三角形条带的数据少,那么它可能会运行得更快。

如果在两种情况下顶点的数量非常接近,那么条带可能会运行得更快,因为它没有indice列表的开销,但我希望它也是特定于驱动程序的。

非索引三角形列表几乎总是最坏的情况(每个三角形有3个顶点,没有共享),除非您只是处理不相交的四边形,使用退化剥离也会使每个四边形花费6个顶点。在这种情况下,您可以获得带有索引三角形列表的4个顶点的每个四边形,因此它可能会再次获胜,但您希望在我认为的目标硬件上进行测试。