Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opengl TriangleList与TriangleStrip_Opengl - Fatal编程技术网

Opengl TriangleList与TriangleStrip

Opengl TriangleList与TriangleStrip,opengl,Opengl,在TriangleStrip和TriangleList之间,哪一个执行得更快 我刚刚读到一篇有趣的文章:“我使用三角形列表的方法得到了780fps,而使用三角形条带的方法只得到了70fps。”。我不知道他到底在做什么,但根据这个,他用三角形列表得到的帧速率大约是10倍。我发现这与直觉相反,因为列表包含更多的顶点数据 有人知道为什么三角形列表可能比条带快很多的技术原因吗?三角形条带是内存优化,而不是速度优化。在过去的某个时候,当系统内存和视频内存之间的总线带宽是数据密集型应用程序中的主要瓶颈时,是

在TriangleStrip和TriangleList之间,哪一个执行得更快

我刚刚读到一篇有趣的文章:“我使用三角形列表的方法得到了780fps,而使用三角形条带的方法只得到了70fps。”。我不知道他到底在做什么,但根据这个,他用三角形列表得到的帧速率大约是10倍。我发现这与直觉相反,因为列表包含更多的顶点数据


有人知道为什么三角形列表可能比条带快很多的技术原因吗?

三角形条带是内存优化,而不是速度优化。在过去的某个时候,当系统内存和视频内存之间的总线带宽是数据密集型应用程序中的主要瓶颈时,是的,这也会节省时间,但这种情况已经很少出现了。此外,在旧硬件中,转换缓存非常小,因此普通条带的缓存效果比优化不好的索引列表要好

三角形列表比三角形条具有同等或更高效率的原因是索引。如果您正确优化了几何体和三角形顺序,索引可以让硬件以非常可预见的方式变换和缓存顶点。此外,在需要大量退化三角形的非常复杂的网格中,条带将比索引列表更慢,占用更多内存


我必须说,我有点惊讶,您的示例显示了数量级的差异。

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

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

这里有一条简单的规则。计算要上载到图形卡的顶点数。如果三角形列表(精确地说是索引三角形列表)的顶点数少于与三角形条相同的数据,那么它可能会运行得更快

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


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

谢谢您的回答。在他的测试中,我也很惊讶地看到两者在帧速率上有如此巨大的差异。没有理由它会快10倍。“我认为他做错了什么事。”约瑟夫:我同意罗宾逊的看法。这里有点不对劲。也许您应该仔细检查测试,并确保两个测试使用相同的流方法(glVertex、缓冲区对象等)