【发布时间】:2013-09-15 00:52:24
【问题描述】:
我正在编写一个 iOS/Android 游戏,并正在寻找使用 OpenGL ES 2.0 呈现我的顶点数据的最高效方式。我有两种不同的数据:每帧都会改变其属性的动态数据,例如玩家或动画背景对象,以及静态数据,例如静态背景或地形。从昨天开始,我在谷歌上搜索了很多,但对于渲染此类数据最好的问题,我找不到一个明确而独特的答案。
渲染此类数据基本上有三种选择(如果我不错过任何一种。如果有,请随时纠正我。):
仅限顶点数组: 只需在 CPU 上的每一帧(包括动态数据)填充您的顶点。
仅限顶点缓冲区对象: 使用 GL_DYNAMIC_DRAW 在 GPU 上分配一个 VBO,其中存储了动态和静态数据。然后通过 glBufferSubData 每帧更新动态数据。
同时使用: 静态数据使用 VBO 存储和渲染,动态数据使用 Vertex Array 渲染。使用此选项,我们需要两个渲染通道,一个用于渲染 VBO,一个用于渲染顶点数组。
由于第一个选项没有利用静态数据的不变性,并且第三个选项需要两次渲染,我猜我应该使用第二个选项。但是,我对此完全不确定,希望您能澄清我的困惑。
【问题讨论】:
-
AFAIK 手机中的主内存和视频内存在物理上是相同的。我以前只使用过android,但我发现顶点数组(动态)和VBO(缓冲/更多静态)速度没有区别。图形可能非常繁琐,而且在许多情况下不直观,因此花额外的时间编写一些简单的测试可以得到回报。如果可以的话,让 GPU 来做动画和改变你的数据:)
标签: graphics opengl-es vbo vertex-array