Dans mon temps libre, j'aime jouer avec le développement de jeux sur l'iPhone avec OpenGL ES. Je jette une petite démonstration de Side-Schroller 2D pour le plaisir, et je suis relativement nouveau à OpenGL, et je voulais obtenir une participation de développeurs plus expérimentée à ce sujet.
Voici ma question: ça fait sens de spécifier les sommets de chaque élément 2D dans l'espace modèle, puis traduisez chaque élément à son espace de vue final Par exemple, disons que j'ai un Ensemble de blocs (carrés) qui constituent le sol dans mon défileur latéral. Chaque carré est défini comme suit: P> glPushMatrix();
{
glTranslatef(currentSquareX, currentSquareY, 0.0);
glVertexPointer(3, GL_FLOAT, 0, squareVertices);
glEnableClientState(GL_VERTEX_ARRAY);
// Do the drawing
}
glPopMatrix();
3 Réponses :
Vous êtes préoccupé par les frais généraux qu'il faut pour transformer un modèle (dans ce cas un carré) des coordonnées de modèle aux coordonnées mondiales lorsque vous avez beaucoup de modèles. Cela semble être une optimisation évidente pour les modèles statiques. P>
Si vous construisez les sommets de votre carré dans les coordonnées du monde, alors il va être plus rapide car chaque carré évitera le coût supplémentaire de ces trois fonctions (GLPUSHMATRIX, GLPOPMATRIX et GLTANSLATEF), car il n'est pas nécessaire de se traduire de modèle aux coordonnées mondiales au moment du rendu. Je ne sais pas à quel point cela sera plus rapide, je soupçonne que ce ne sera pas une optimisation humanisante et que vous perdez la modularité de garder les carrés dans les coordonnées de modèle: Et si vous décidez que vous voulez que ces carrés soient mobiles ? Ce sera beaucoup plus difficile si vous gardez leurs sommets dans les coordonnées du monde. p>
En bref, c'est un compromis: p>
Je suppose que le seul moyen de savoir quelle est la bonne décision consiste à faire et à profiler. Je sais que vous avez dit que vous n'avez pas encore écrit cela, mais je soupçonne que vos carrés sont dans le modèle ou le monde des coordonnées, cela ne fera pas une grande différence - et si cela le fait, je ne peux pas imaginer une architecture que vous pouviez créer où il serait difficile de changer vos carrés du modèle aux coordonnées mondiales ou inversement. P>
bonne chance à vous et à vos aventures dans iPhone Game Development! P>
Merci, c'est une bonne réponse. Je soupçonnai qu'il y aurait un compromis comme vous l'avez décrit. Je pense que je vais d'abord donner des coordonnées de modèle, en attendant des tests.
Vous pouvez également envisager d'utiliser une image statique et simplement le défilement qu'au lieu de dessiner chaque bloc de plancher et de la traduction de sa position, etc. p>
Si vous utilisez uniquement des quads alignés sur l'écran, il pourrait être plus facile d'utiliser le OES Draw Texture extension. Ensuite, vous pouvez utiliser une seule texture pour contenir tout votre jeu "Sprites". Premièrement, spécifiez le rectangle de culture en réglant le gl_texture_crop_rect_oes code> texparameter. C'est la limite du sprite dans la texture plus grande. Pour rendre, appelez
GLDRAWTEXIOES code> en passant dans la position souhaitée et la taille des coordonnées ci-jointes.
int rect[4] = {0, 0, 16, 16};
glBindTexture(GL_TEXTURE_2D, sprites);
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, rect);
glDrawTexiOES(x, y, z, width, height);
Très cool! Je vais devoir essayer cela, je travaille sur l'iPhone - cela semble très intéressant.