问题描述
|
对于iPhone上的OpenGL ES 3-D游戏,以下哪个渲染速度更快:
10个具有100个三角形的对象
一个物体有1000个三角形
解决方法
发出的每个OpenGL ES绘制调用都有一些开销,因此,如果使用
glDrawArrays()
或glDrawElements()
分别显示10个对象,则通常比一个大对象要慢。但是,我认为您会发现这些绘图调用的开销只是您在iOS设备上可能遇到的任何渲染速度下降的一小部分。
如果这十个对象是静态的,则使用索引的三角形将它们全部组合成一个可在一次调用中绘制的数组非常容易。正如Waldheinz指出的那样,我三年前写的文章主张使用顶点缓冲对象(VBO)来帮助将几何存储在GPU上,并避免在每一帧上进行昂贵的上载。在我撰写本文时,这并不重要,因为更新的iOS GPU为VBO提供了硬件支持。
其他因素更有可能影响性能,例如这些对象是否使用透明性,其上的照明的复杂性等。如果有疑问,请遵循Apple的“使用Vertex数据的最佳实践”。他们的iOS版OpenGL ES编程指南,并使用OpenGL ES驱动程序和OpenGL ES Analyzer工具对您的应用程序进行配置。
, 除非您使用VBO,否则并不重要。但是,绘制1个对象比绘制10个对象快。有人在这里详细说明了这一点。
, 固定三角形数量后,绘制单个对象应该总是比绘制多个对象快。
, 在这两种情况下,三角形的数量是相同的,因此它们相等,其他所有条件都相同。 GL对您的“对象”一无所知,它只是渲染三角形。
就是说,如果您在对象内的三角形之间共享顶点并使用三角形带或扇形或索引顶点,则可以节省一些数据大小。请参阅Brad \'s答案,以获取有关土地信息的更全面信息。