我正在开发一款iOS游戏,将需要一次呈现500-800颗粒。 据我了解,这是一个好主意,批次渲染OpenGL ES的许多精灵而不是调用glDrawArrays(..)
在游戏中每一个角色,为了能够使更多的精灵瓦特/帧速率急剧减少。
我的问题是 :我怎么批渲染500+颗粒都有着不同的阿尔法,旋转和尺度,但共享相同的纹理图集? 这个问题的重点是在不同的 阿尔法 , 旋转 ,和比例为每个粒子。
我意识到这个问题是非常相似, 我怎么画1000+颗粒(W /独特的旋转,缩放和alpha)的iPhone OpenGL ES的粒子系统,不会拖慢游戏? 然而,问题并没有解决批渲染。 之前我把顶点缓冲对象的优势,我想了解在OpenGL ES批渲染瓦特/独特的阿尔法,旋转和尺度(但具有相同的纹理)。 因此,当我打算使用维也纳各组织的最后,我想先采取这种做法。
代码示例将大大可以理解的,如果你使用一个索引数组作为一些例子做,请说明指数阵列的结构和用途。
编辑我使用的OpenGL ES 1.1。
编辑下面是我如何渲染场景中的每个粒子的代码示例。 假设它们共享相同的纹理和纹理中的OpenGL ES 1.1已经绑定代码执行之前。
- (void) render {
glPushMatrix();
glTranslatef(translation.x, translation.y, translation.z);
glRotatef(rotation.x, 1, 0, 0);
glRotatef(rotation.y, 0, 1, 0);
glRotatef(rotation.z, 0, 0, 1);
glScalef(scale.x, scale.y, scale.z);
// change alpha
glColor4f(1.0, 1.0, 1.0, alpha);
// glBindTexture(GL_TEXTURE_2D, texture[0]);
glVertexPointer(2, GL_FLOAT, 0, texturedQuad.vertices);
glEnableClientState(GL_VERTEX_ARRAY);
glTexCoordPointer(2, GL_FLOAT, 0, texturedQuad.textureCoords);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glPopMatrix();
}
A码替代这种方法,将不胜感激!