在OpenGL ES中,绘制一个大对象或许多小对象是否更快?

时间:2011-05-27 11:33:46

标签: iphone ios performance opengl-es

对于iPhone上的OpenGL ES 3-D游戏,以下哪一项渲染速度更快:

  • 具有100个三角形的10个对象
  • 一个具有1000个三角形的对象

4 个答案:

答案 0 :(得分:4)

您发出的每个OpenGL ES绘制调用都有一些开销,因此如果您使用glDrawArrays()glDrawElements()单独呈现10个对象,那么通常会比一个大对象慢。但是,我认为你会发现这些绘制调用的开销只是你在iOS设备上遇到的任何渲染速度减慢的一个小因素。

如果这十个对象是静态的,那么使用索引三角形将它们全部组合成一个调用中绘制的一个数组非常容易。正如Waldheinz指出的那样,article I wrote three years ago提倡使用顶点缓冲对象(VBO)来帮助在GPU上存储几何图形,并避免在每一帧上进行昂贵的上传。在我写这篇文章时,这一点不像现在那么重要,新的iOS GPU为VBO提供硬件支持。

其他事情更有可能影响性能,例如这些对象是否使用透明度,照明的复杂程度等等。如有疑问,请按照其OpenGL ES编程中包含的Apple的“Best Practices for Working with Vertex Data”进行操作适用于iOS的指南,并使用OpenGL ES Driver和OpenGL ES Analyzer仪器对您的应用程序进行概要分析。

答案 1 :(得分:1)

除非您使用VBO,否则无关紧要。但是绘制1个对象比绘制10个对象更快。有人详细阐述了这一点here

答案 2 :(得分:0)

当三角形计数固定时,绘制单个对象应始终比绘制多个对象更快。

答案 3 :(得分:0)

两种情况下的三角形数量相同,因此它们是等价的,其他条件相同。 GL对你的“对象”一无所知 - 它只是呈现三角形。

也就是说,如果在对象内的三角形之间共享顶点并使用三角形条或扇形或索引顶点,则可以节省一些数据。请参阅Brad的答案,了解更全面的土地信息。