J'ai essentiellement un jeu 2D sur l'iPhone et j'essaie de configurer plusieurs arrière-plans qui défilent à différentes vitesses (connus sous le nom de milieux de parallaxe). Donc, ma pensée était de coller les arrière-plans DERRIÈRE l'avant-plan en utilisant différents plans de coordonnées z, et juste les faire plus grand que l'avant-plan (en taille) pour accueillir, de sorte que le tout peut être défilé (juste à vitesse différente).Arrière-plans Parallax dans OpenGL ES sur l'iPhone
Et (pour autant que je sache) j'ai fondamentalement implémenté cela. Le seul problème est qu'il semble complètement ignorer la valeur z que je lui donne, ou plutôt il ne fait que les mettre tous en zéros. Je vois l'arrière-plan (je n'ai testé qu'un seul fond jusqu'ici, pour le garder simple ... donc pour l'instant j'ai juste un premier plan et je veux un fond défilant à une vitesse différente), mais il défile 1: 1 avec mon à l'avant-plan, il ne semble donc pas correct, et la plus grande partie est coupée (parce que c'est plus gros). Et j'ai essayé différentes valeurs z pour l'arrière-plan et divers plans de clipping proches/lointains ... c'est toujours pareil. Je fais probablement juste une chose simple fausse, mais je ne peux pas comprendre dehors. Je me demande si cela a à voir avec moi en utilisant seulement 2 coordonnées dans glVertexPointer pour le premier plan? (Bien sûr, pour le fond je passe en 3)
Je vais poster un code:
Ceci est une configuration initiale:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrthof(-1.0f, 1.0f, -1.5f, 1.5f, -10.0f, 10.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
glEnableClientState(GL_VERTEX_ARRAY);
//glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
//transparency
glEnable (GL_BLEND);
glBlendFunc (GL_ONE, GL_ONE_MINUS_SRC_ALPHA);
Un peu plus sur le réseau de flotteurs de mon premier plan .. ..il est entrelacé. Pour mon premier plan, il va au sommet x, au sommet y, à la texture x, à la texture y, à la répétition. Tout cela fonctionne très bien.
Ceci est mon rendu FOREGROUND:
glVertexPointer(2, GL_FLOAT, 4*sizeof(GLfloat), texes); <br>
glTexCoordPointer(2, GL_FLOAT, 4*sizeof(GLfloat), (GLvoid*)texes + 2*sizeof(GLfloat)); <br>
glDrawArrays(GL_TRIANGLES, 0, indexCount/4);
CONTEXTE rendu:
exercice Même ici sauf que cette fois il va sommet x, sommet y, sommet z, texture x, texture y, répétition. Notez la valeur z cette fois. Je me suis assuré que les données de ce tableau étaient correctes pendant le débogage (obtenir les bonnes valeurs z). Et encore une fois, ça se voit ... ça ne va pas loin dans le lointain comme il se doit.
glVertexPointer(3, GL_FLOAT, 5*sizeof(GLfloat), b1Texes);
glTexCoordPointer(2, GL_FLOAT, 5*sizeof(GLfloat), (GLvoid*)b1Texes + 3*sizeof(GLfloat));
glDrawArrays(GL_TRIANGLES, 0, b1IndexCount/5);
Et pour déplacer mon appareil photo, je fais juste un simple glTranslatef (x, y, 0.0f); Je ne comprends pas ce que je fais mal parce que cela semble être la fonction 3D la plus basique imaginable ... les choses plus éloignées sont plus petites et ne bougent pas aussi vite quand la caméra bouge. Pas le cas pour moi. On dirait que ça devrait être assez basique et même pas vraiment être affecté par ma projection et tout ça (même si j'ai même essayé de faire glFrustum juste pour m'amuser, pas de succès). S'il vous plaît, aidez, j'ai l'impression que c'est juste une chose stupide. Je posterai plus de code si nécessaire.
Avez-vous activé depthBuffering? – Till
Pour ajouter un depthbuffer voir ici http://www.memention.com/blog/2009/10/08/Think-deep.html – epatel