android-OpenGL ES 2.0 —简单粒子系统的最佳方法

android-OpenGL ES 2.0 —简单粒子系统的最佳方法,第1张

概述我正在尝试使用OpenGLES2.0为Android应用程序创建一个非常简单的粒子系统.基本上,它仅用于背景中的线性移动云.开始此 *** 作之前,我的第一个想法是使用点精灵,这就是我一直在尝试的方法.我很难做到这一点,但是除了那些问题之外,指向精灵真的是解决这个问题的方法吗?在解决错误时,我

我正在尝试使用OpenGL ES 2.0为Android应用程序创建一个非常简单的粒子系统.基本上,它仅用于背景中的线性移动云.开始此 *** 作之前,我的第一个想法是使用点精灵,这就是我一直在尝试的方法.我很难做到这一点,但是除了那些问题之外,指向精灵真的是解决这个问题的方法吗?

在解决错误时,我已经阅读了很多关于它们的矛盾文章,如果这不是我应该寻求的解决方案,我不想花费大量时间使它们一切正常第一名.与使用三角形相比,人们会遇到各种麻烦,例如裁剪,甚至性能下降.我想让经验丰富的用户洞悉点子精灵的适合位置和使用时间,包括像我这样的情况,在这些情况下,它们最多在屏幕上不会出现几十个“粒子”.

解决方法:

请记住,点精灵有严格的大小限制,大小越大,性能越慢.如果您的目标是只有12个“粒子”,我认为您应该将它们渲染为四边形.另一方面,如果您的目标是要有12个由许多云组成的云,每个云都会赋予它们动画效果,那么是的,您应该使用点精灵.

瓶颈将是填充率,尤其是因为您可能会使用混合.

如果您有100个云,则是否使用点精灵的问题变得更加重要.要为它们设置动画,您必须发送一个新的缓冲区以对每个帧进行opengl(方法1),或者在单独的调用中使用不同的转换矩阵渲染每个云(方法2).后者很可能是最慢的,但是前者要求您每个云发送4个新顶点(假定索引渲染),而如果使用点精灵,则每个云仅发送1个新顶点(方法3).

在这一点上,很容易大致计算出最快的速度.方法2表示每帧将16 * 4 * num_clouds字节的数据传输到gpu,方法1是d * 4 * num_clouds,而方法3 d * num_clouds,其中d是2还是3,取决于您是否需要z.

还要注意的是方法1和3批量发送数据,而方法2一次发送16 * 4字节.

由于您使用的是GL ES 2,因此您可以跳过方法2中的矩阵,而只将转换作为矢量发送,但是您仍将遭受非分批数据传输和为每个实例设置统一的开销.

编辑:
实际上,在许多粒子的情况下,您将要设置一个均匀的时间,并将云的速度作为静态属性,然后通过将速度与时间相乘,并确保它们在着色器中进行动画处理必要时环绕边缘.因此,对于一个完全动画的云场景,您只需要每帧传输4个字节.

总结

以上是内存溢出为你收集整理的android-OpenGL ES 2.0 —简单粒子系统的最佳方法全部内容,希望文章能够帮你解决android-OpenGL ES 2.0 —简单粒子系统的最佳方法所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1083723.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存