我正在编写一个 iOS/Android 游戏,并寻找使用 OpenGL ES 2.0 呈现我的顶点数据的最高效方式。我有两种不同的数据:每帧都会改变其属性的动态数据,例如玩家或动画背景对象,以及静态数据,例如静态背景或地形。从昨天开始,我在谷歌上搜索了很多,但对于渲染此类数据最好的问题,我找不到一个明确而独特的答案。
渲染此类数据基本上有三个选项(如果我没有错过任何一个。如果是这样,请随时纠正我。):
仅限顶点数组: 只需在 CPU 上的每一帧填充顶点(包括动态数据)。
仅限顶点缓冲区对象: 使用 GL_DYNAMIC_DRAW 在 GPU 上分配 VBO,其中存储了动态和静态数据。然后通过 glBufferSubData 每帧更新动态数据。
两者都使用: 静态数据使用 VBO 存储和渲染,动态数据使用顶点数组渲染。使用此选项,我们需要两个渲染通道,一个用于渲染 VBO,一个用于渲染顶点数组。
由于第一个选项没有利用静态数据的不变性,并且第三个选项需要两次渲染通道,我的猜测是我应该使用第二个选项。但是,我对此完全不确定,希望您能澄清我的困惑。