iphone - iOS 上的 GL_TRIANGLES 或 GL_TRIANGLE_STRIP?

标签 iphone ios ipad opengl-es

this document (Apple 关于 OpenGL 的 iOS 文档),Apple 建议在 iOS 上的 OpenGL ES 中对(索引)三角形使用三角形带:

For best performance, your models should be submitted as a single unindexed triangle strip using glDrawArrays with as few duplicated vertices as possible.

但是,Imagination Technologies(iOS 设备中使用的图形芯片的创造者)在 this document 中提出了相反的建议(POWERVR 3D 应用程序开发建议)。他们在第 11 页上特别写道:

Using an indexed triangle list can be much more efficient than using strips.

我的问题:谁是对的?还是我误解了这两个文件?

最佳答案

TBH 我相信 powerVR。 PowerVR 支持转换后缓存。这个缓存意味着在相对接近它们上次调用的位置重复的索引可以完全避免重新转换(它只是将已经转换的值从缓存中拉出)。因此,对于 0、1、2、3、4、5、6、7 的 strip ,它不会提供任何奖励,但实际上, strip 通常并不那么简单。那里会有一些顶点索引重用。这种重用可以完全避免转换。如果 strip 经过优化以牢记这一点(请参阅 NVTriStrip library !),那么您可以获得显着提高的性能,因为许多转换将不会执行。

此外,这样做的另一个好处是三角形列表不再是性能障碍,因为您要转换的顶点中有 2 个在缓存中,因此没有性能影响(除了每个三角形上传 6 个字节之外)而不是 2(ish),这在宏伟的计划中并不多)。此外,因为您不需要执行 strip “重新启动”(通过重复最后一个三角形的最后一个索引和下一个三角形的第一个索引来执行重新启动。即 0,1,2,2,3,3, 4,5,6) 一些复杂的网格可能比 strip 更快。除此之外,在未索引的 strip 中,每个重复的顶点都必须完整地向下发送,需要发送的数据量可能比索引列表中需要发送的数据量高很多(因为每个顶点只发送一次,重复在更紧凑的索引中完成)。

当然,MBX (iPhone 3G) 不支持转换后缓存,这很可能是苹果建议的来源。然而,SGX(iPhone 3GS 及更高版本)确实如此,这实际上取决于您希望定位的硬件。如果您可以定位 3GS 及更高版本,则使用索引,否则不要。当然,开箱即用地支持这两种方法将在两个平台上提供最佳性能。

当然,最好的方法是尝试两种方法(这样做真的不会花很长时间),看看哪种方法在硬件上表现更好!!

关于iphone - iOS 上的 GL_TRIANGLES 或 GL_TRIANGLE_STRIP?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4447749/

相关文章:

iphone - MKMapView : setRegion doesn't work !

html - Google/iPhone 输出不同,iphone 有很多空白

iphone - 如何以编程方式锁定 iPhone 屏幕?

iphone - iOS : How to allign UITableView to bottom?

iphone - iPhone 词典应用程序上的模型- View - Controller 实践

ios - 将数据从我的 viewcontroller 类传递到放置在同一场景中的自定义类 UIView 时,“包装可选值时出现意外的 nil”

ios - 快速在 UITABLEVIEW 上向右滑动时添加操作

ios - 苹果手机 : is there any secure way to establish 2-way SSL from an application

iphone - XCode 4 - 通用应用程序 - 使用选项卡栏 Controller 时 View 不会改变

cocoa-touch - 让 Objective-C 通过 UIWebView 与 JavaScript 对话