在this document (苹果在OpenGL上的iOS文档)中,苹果建议在iOS上的OpenGL ES中对三角形使用三角形条带(索引):
为获得最佳性能,您的模型应使用具有尽可能少重复顶点的glDrawArrays以单个无索引三角形条带的形式提交。
然而,想象力技术( iOS设备中使用的图形芯片的创建者)在this document (PowerVR3D应用程序开发建议)中提出了相反的建议。他们特别在第11页写道:
使用索引三角形列表的
可能比使用条带的效率高得多。
我的问题是:谁是对的?或者我误解了这两个文档?
发布于 2010-12-15 18:32:24
我会相信powerVR的。PowerVR支持转换后缓存。这种缓存意味着,在最后一次调用位置附近重复的索引可以完全避免重新转换(它只是将已经转换的值从缓存中拉出)。因此,在条带为0,1,2,3,4,5,6,7的情况下,它没有提供额外的好处,但在现实中,条带通常没有那么简单。在那里会有一些顶点索引的重用。这种重用可以完全避免转换。如果对条带进行了优化,请牢记这一点(参见NVTriStrip library!)然后,您可以获得极大的性能改进,因为许多转换都不会执行。
此外,这样做的一个额外好处是三角形列表不再是性能障碍,因为您要转换的顶点中有2个在缓存中,因此没有性能影响(除了上传每个三角形6个字节,而不是2个(ish),这在大方案中并不多见)。此外,由于您不需要执行条带“重新启动”(重新启动),因此重新启动是通过重复最后一个三角形的最后一个索引和下一个三角形的第一个索引来执行的。例如0,1,2,2,3,3,4,5,6)一些复杂的网格可以比使用条带更快。此外,在未索引的条带中,每个重复的顶点必须完整地向下发送,需要发送的数据量可能比索引列表中需要发送的数据量高得多(因为每个顶点只发送一次,而重复是在更紧凑的索引中完成的)。
当然,MBX (iPhone 3G)并不支持转换后缓存,这很可能是苹果的建议所在。不过,SGX (iPhone 3GS及更高版本)会这样做,因此这实际上取决于您希望针对的硬件。如果你的目标是3GS或更高版本,那么就使用索引,否则就不要这样做。当然,开箱即用支持这两种方法会在两个平台上都能获得最佳性能。
当然,最好的方法是同时尝试这两种方法(这样做并不需要很长时间),看看哪种方法在硬件上表现更好!!
https://stackoverflow.com/questions/4447749
复制相似问题