OpenGL ES 2.0 – 如何批量绘制具有独特的平移,旋转,缩放和alpha的粒子?

我已经将所有的顶点数据组合成了一个单一的数组。 我将如何批量绘制所有这些粒子的方式,保留其独特的翻译?

任何代码示例将不胜感激。

我已经将所有的顶点数据组合成了一个单一的数组。

你是怎么做到的? 细节?

您可以在4个纹理坐标中“秘密地包含”每个粒子顶点的变换matrix。

所以,你会有一个像这样的顶点格式:

vec4 position vec4 color vec4 matTexcoord0 vec4 matTexcoord1 vec4 matTexcoord2 vec4 matTexcoord3 vec4 texturingTexcoord 

着色器知道matTexcoord0-matTexcoord3实际上不是纹理坐标。 不,他们是变相的变相matrix

达达达啊!

有效地使用4 vec4mat4x4传递。 因此,您将着色器中matTexcoord0-3中包含的变换matrix应用为一种world变换。 如果你使用点精灵,这可以是非常有效的。

在顶点着色器中执行翻译。 您必须拥有一个包含每个顶点的平移的并行数组,或者将翻译存储在您使用每个粒子的某个属性查找的纹理中。

(注:如同WebGL一样回答;我没有实际的GL ES经验。)

每个粒子都需要它自己的变换matrix,所以需要一个并行数组或第三个元素到唯一变换matrix的数组。 然后在绘制粒子之前,将当前的模型视图matrix乘以粒子的变换matrix。