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