请记住,点精灵有严格的尺寸限制,尺寸越大,性能越慢。如果您的目标是只有 12 个“粒子”,我认为您应该将它们渲染为四边形。另一方面,如果你的目标是让 12 朵云由很多很多“云粒子”组成,每个都给它们一个动画效果,那么是的,你应该使用点精灵。
瓶颈将是填充率,特别是因为您可能会使用混合。
如果你有 100 多个云,是否使用点精灵的问题就变得更加相关。要为它们设置动画,您要么必须向 opengl 每帧发送一个新缓冲区(方法 1),要么使用不同的转换矩阵在单独的调用中渲染每个云(方法 2)。后者很可能是最慢的,但前者要求您为每个云发送 4 个新顶点(假设索引渲染),而如果您使用点精灵(方法 3),则每个云只需发送 1 个新顶点。
在这一点上,很容易粗略地计算出最快的速度。方法 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 个字节。