我正在尝试使用OpenGL在Android中渲染一些粒子效果。每个粒子将是带有广告牌的纹理四边形,并且每个粒子都以旋转(即围绕z轴)渲染。我只能使用OpenGL ES 1.1,因此点精灵和像素着色器不是一个选项。什么是渲染和更新许多粒子(例如100到5000)的位置的快速方法?
我知道对每个粒子使用OpenGL绘图调用会非常缓慢,但是当我需要每帧更新粒子位置时,我对如何使用像VBO这样的东西感到困惑。
答案 0 :(得分:1)
随机的想法。可能或可能不会很好。使用一个绘制调用,或至少将批处理粒子组合成组(例如,每组32个)。您可以在CPU上构建每个帧的每个组,然后将其发送下来。只需用GL_TRIANGLE_FAN构建一个大数组(IIRC你通过两次添加相同的顶点来“终止”扇形)。
我认为,其中一个挑战是创建此缓冲区。这是Java还是JNI?你在使用java.nio缓冲区吗?从我在论坛中读到的内容来看,用Java修改这些缓冲区的速度非常慢。 (顺便说一下 - 我不熟悉Android上的内部缓冲区处理,你可能需要也可能不需要对它们进行双重缓冲。)