android - Android 上使用 OpenGL ES 1.0 的简单粒子系统

标签 android optimization opengl-es particles

我正在尝试使用 OpenGL 在 Android 中整合一个粒子系统。我想要几千个粒子,其中大部分可能在任何给定时间都在屏幕外。它们在视觉上是相当简单的粒子,我的世界是二维的,但它们会移动、改变颜色(不是大小 - 它们是 2x2),然后我需要能够添加和删除。

我目前有一个数组,我迭代它,处理速度变化,管理生命周期(杀死旧的,添加新的),并使用 glDrawArrays 绘制它们。但是,对于此调用,OpenGl 指向的是单个顶点;我将它 glTranslatex 到我想要绘制的每个粒子的相关坐标,一次一个,用 glColor4x 设置颜色,然后用 glDrawArrays 设置它。它有效,但它有点慢并且只适用于几百个粒子。我自己处理剪辑。

我已经编写了一个系统来支持静态粒子,我已将其加载到顶点/颜色数组中并使用 glDrawArrays 进行绘图,但这种方法似乎只适用于永远不会改变相对位置的粒子(即我使用 glTranslate 移动所有粒子) )、颜色以及我不需要添加/删除粒子的地方。在我的手机 (HTC Desire) 上进行的一些测试表明,尝试更改这些数组的内容(它们是 ByteBuffers,由 OpenGL 指向)非常慢。

也许有一些方法可以自己用 CPU 手动编写屏幕。如果我只是在屏幕上绘制 1x1/2x2 点,并且我纯粹对写作感兴趣而不做任何混合/抗锯齿,这是一个选项吗?它会比 OpenGl 做的任何事都快吗?

(在 1ghz 机器上有 200 个左右的粒子,内存为 megs。这比我 20 年前在一台内存小于 500k 的 7mhz 机器上得到的要慢得多!我很感激我在这里使用 Java,但肯定在那里一定是更好的解决方案。我是否必须使用 NDK 才能获得 C++ 的强大功能,或者这是我所追求的可能)

最佳答案

我一直希望有人能明确地回答这个问题,因为我自己也需要 Android 上的粒子。 (虽然我正在使用 C++,但目前正在使用 glDrawArrays(),但还没有将粒子推到极限。)

我找到了 this thread on gamedev.stackexchange.com (不是特定于 Android 的),没有人能就最佳方法达成一致,但您可能想尝试一些事情并亲自看看。

我打算建议 glDrawArrays(GL_POINTS, ...) 和 glPointSize(),但是问这个问题的人似乎对此不满意。

如果您找到好的解决方案,请告诉我们!

关于android - Android 上使用 OpenGL ES 1.0 的简单粒子系统,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5052680/

相关文章:

c - 优化 C for 循环

opengl-es - OpenGL ES 2.0 中的剪裁平面

opengl-es - 如何使用 glsl 绘制一个移动的球并留下轨迹?

android - 我们是否需要有 ADSL 连接才能通过 Android 模拟器访问互联网(网络)?

android - Libgdx 项目编译失败 'Cannot change strategy of configuration ' :android:natives''

android - 在 LDPI 设备上播放 ffmpeg 转换的视频 (Samsung S5300 240 x 320)

android - 使用 Matrix 的 rotateM() 从 SurfaceTexture 旋转矩阵但损坏视频输出

Selenium-Java 库中缺少 AndroidWebDriver 类

Python:在列表中拆分字符串的优雅且节省代码的方法

java - 何时以及如何正确使用循环优化和转换技术