Bonjour,
Voici ce que j'ai : http://zenux.free.fr/camera.jpg
Donc j'ai mon nain qui est positionné en 0.0, -1.0, -5.0.
Et le sol qui est en y=-1.0
J'aimerai pouvoir déplacer le nain avec les flèches directionnelles. Donc quand j'appuie sur la touche directionnelle de gauche le nain tourne à gauche. Ensuite quand j'appuie sur la flèche pour avancer, le nain devrait avancer face à lui. (En fait le nain ne doit pas bouger mais c'est le sol qui bouge pour faire croire que le nain se déplace).
Je ne sais pas dutout comment faire, si l'utilisateur fait une rotation et puis avance, c'est tout à fait différent d'avancer et puis de faire une rotation...et ça m'ennuie bien
Voici ma fonction draw:
Et voici ce qui se trouve dans la fonction membre placeCamera de la classe camera:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 void draw() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); //Faut-il le mettre ou pas (tout dépend de l'algo se trouvant dans la class camera) ? cam->placeCamera(); //Affichage du sol ici. glPushMatrix(); glLoadIdentity(); //Affichage du nain ici en 0.0, -1.0, -5.0 glPopMatrix(); }
Le 2 translates entre le rotate c'est pour que la rotation s'effectue sous les pied du nain et non en z=0.0
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 void camera::placeCamera(void) { if(bTurnLeft==true || bTurnRight==true) { rotY+=degreeRotY; } if(bMoveFront==true || bMoveBack==true) { frontBack+=distFrontBack; } //TRANSLATION : render::translate(0.0, 0.0, frontBack); //ROTATION Y : render::translate(0.0, 0.0, -5.0); render::rotateY(rotY); render::translate(0.0, 0.0, 5.0); }
Ce code fait en peu n'importe quoi...
-Si je fait une rotation avec une des flèches directionnelles : ça fonctionne.
-Si j'avance : ça fonctionne.
-Si je refait une rotation après m'être avancé : la rotation ne s'effectue pas en dessous des pied du nain mais tout à fait autre part.
Description des variables:
bTurnLeft : est à true quand la flèche directionnelle est appuyé (pareil pour les autres variables commençant par "b")
degreeRotY : contient le nombre de degrée de rotation à effectuer.
distFrontBack : contient la distance à avancer quand on appuie sur les flèches directionnelles haut-bas.
Merci d'avance...
Partager