ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

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

2019-11-02 07:26:23  阅读:323  来源: 互联网

标签:point opengl-es sprite particles 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个字节.

标签:point,opengl-es,sprite,particles,android
来源: https://codeday.me/bug/20191102/1989839.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有