我已经为 iPad 游戏实现了粒子引擎。在 iPad Simulator 上,我获得了非常好的帧速率,粒子 > 500 个(远远超过我的需要)。然而,在 iPad 本身上,我得到了完全不同的结果。只有 10 个粒子(我需要更多的粒子)我只能得到一个非常差的帧速率......
作为基础,我采用本教程来实现我的粒子发射器类:http ://www.71squared.com/en/article/806/iphone-game-programming-tutorial-8-particle-emitter (使用 OpenGL ES 1 )
因为我使用的是OpenGL ES 2.0,所以我写了自己的渲染方法:
- (void) renderParticles:(RenderMode)renderMode ofParticleEmitter:(ParticleEmitter*)particleEmitter xOffset:(int)xoffset yOffset:(int)yoffset
{
PointSprite *vertices = [particleEmitter getVertices];
for (int p = 0; p < particleEmitter.particleCount; p++) {
CC3GLMatrix *modelView = [CC3GLMatrix matrix];
// Translate the Modelviewmatrix
[modelView populateFromTranslation:CC3VectorMake(_cameraX, _cameraY, -5.0)];
[modelView translateByX:vertices[p].x + xoffset];
[modelView translateByY:vertices[p].y + yoffset];
[modelView translateByZ:101.0];
[modelView scaleByX:2.0];
[modelView scaleByY:2.0];
glUniformMatrix4fv(_modelViewUniformT, 1, 0, modelView.glMatrix);
glBindTexture(GL_TEXTURE_2D, [particleEmitter getTexture]);
// Create and Bind a rectangular VBO
[self calcCharacterVBOwithCols:1 rows:1 currentCol:1 currentRow:1];
glVertexAttribPointer(_positionSlotT, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*) 0);
glEnableVertexAttribArray(_positionSlotT);
// Fragment Shader value
float opacity = 1.0;
glUniform1f(_opacity, opacity);
// Normal render, add Texture coordinates
// Activate Texturing Pipeline and Bind Texture
glVertexAttribPointer(_texCoordSlot, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (GLvoid*) (sizeof(float) * 3));
glEnableVertexAttribArray(_texCoordSlot);
glDrawElements(GL_TRIANGLES, sizeof(IndicesLayer)/sizeof(IndicesLayer[0]), GL_UNSIGNED_BYTE, 0);
glDisableVertexAttribArray(_texCoordSlot);
glDisableVertexAttribArray(_positionSlotT);
[self destroyCharacterVBO];
}
}
我错过了关于粒子的一些要点吗?我怎样才能更好地在设备上获得更好的帧速率?