【发布时间】:2015-04-30 19:28:19
【问题描述】:
我正在制作一个 Android 应用程序,我需要使用 OpenGL ES 绘制一些形状。我能够渲染它们,但我对性能感到失望。我更新了代码以使用 VBO 但我没有注意到任何改进。我想以每秒 60 帧(每帧 16 毫秒)进行渲染。
我有一个测试项目,我在屏幕上渲染了几个三角形。当我渲染 1000 个三角形时,每帧大约需要 20 毫秒(取决于设备)。
我想让渲染保持在 10 毫秒,因为我需要剩下的(6 毫秒)来执行其他计算(例如更新位置、检测碰撞等) .
这是我渲染三角形的代码:
https://github.com/mauriciotogneri/test/blob/master/src/com/testopengl/Polygon.java#L51-66
这是迭代三角形的代码:
https://github.com/mauriciotogneri/test/blob/master/src/com/testopengl/MapRenderer.java#L117-139
(更改 NUMBER_OF_TRIANGLES 的值以显示更多三角形)
据我了解,如果我需要每帧调用 1000 次(每个三角形一个)。
有没有其他方法可以渲染几个多边形而不需要太多?
注意事项:
- 在示例中,所有三角形在屏幕上都有固定位置,但在实际场景中它们会四处移动
- 在示例中,我为每个三角形分配了一个随机颜色,但在实际场景中,每个三角形都有一个固定颜色
【问题讨论】:
-
尽量减少您的 OpenGLES 调用 - 即对包含多个多边形的 10000 个三角形调用一次 glDrawArrays。
-
如果所有多边形都具有不同的形状并在不同的位置和不同的颜色呈现,我如何才能最大限度地减少对 glDrawArrays 的调用量?谢谢
标签: android performance opengl-es vbo