我正在尝试使用 OpenGL 在 Android 中将粒子系统放在一起。我想要几千个粒子,其中大部分可能在任何给定时间都在屏幕外。它们在视觉上是相当简单的粒子,我的世界是 2D 的,但它们会移动,改变颜色(不是大小 - 它们是 2x2),然后我需要能够添加和删除。
我目前有一个数组,我遍历它,处理速度变化,管理生命周期(杀死旧的,添加新的),并使用 glDrawArrays 绘制它们。然而,对于这个调用,OpenGL 指向的是单个顶点。我将它glTranslatex到我想要绘制的每个粒子的相关坐标,一次一个,用glColor4x设置颜色,然后用glDrawArrays它。它可以工作,但它有点慢,只适用于几百个粒子。我自己处理剪辑。
我编写了一个系统来支持我已加载到顶点/颜色数组并使用 glDrawArrays 绘制的静态粒子,但这种方法似乎只适用于永远不会改变相对位置的粒子(即我使用 glTranslate 移动所有粒子),颜色以及我不需要添加/删除粒子的地方。在我的手机 (HTC Desire) 上进行的一些测试表明,尝试更改这些数组(由 OpenGL 指向的 ByteBuffers)的内容非常缓慢。
也许有一些方法可以自己用 CPU 手动编写屏幕。如果我只是在屏幕上绘制 1x1/2x2 点,而我只是对写作感兴趣而不做任何混合/抗锯齿,这是一个选择吗?它会比 OpenGL 正在做的任何事情都快吗?
(在 1ghz 机器上使用 200 个左右的粒子,内存为兆。这比我 20 年前在 7mhz 机器上使用 <500k 内存的速度要慢得多!我很感激我在这里使用 Java,但肯定有一个更好的解决方案。我是否必须使用 NDK 来获得 C++ 的强大功能,或者是我所追求的)