Bonjour;
Je souhaiterai faire en sorte de placer ma caméra en vue FPS par rapport à la position d'un vaisseau.
Considérons le vaisseau comme un simple cône.
On connait sa position (x, y, z); et son angle de direction (teta, phi).
Pour placer ma caméra, voici comment je procède;
Je calcule tout d'abord le vecteur de direction:
y étant mon axe vertical.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 vx = cos(teta)*cos(phi); vz = sin(teta)*cos(phi); vy = sin(phi);
Ainsi, je positionne ma caméra:
[code]
gluLookAt(x, y, z, x+vx, y+vy, z+vz);
Ok, je teste; à premier coup d'oeil ça fonctionne;
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 Là, ça fonctionne; je me retrouve avec une vue au centre du vaisseau. Bref, c'est moche. J'aimerai maintenant avoir la vue non pas au centre, mais surélevé au dessus du vaisseau. Pour cela, je me dis qu'il faut simplement calculer le vecteur orthogonale au vecteur de direction, et d'ajouter cette translation. Je me casse pas la tête, je procède donc ainsi:gluLookAt(x+vox, y+voy, z+voz, x+vx, y+vy, z+vz);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
123 vox = cos(teta)*cos(phi+90°); voz = sin(teta)*cos(phi+90°); voy = sin(phi+90°);
Cependant, si je commence à bouger le vaisseau et modifier en conséquence l'angle Phi; voilà que par moment, la position de vue switches et je me retrouve avec une vue non plus au dessus du vaisseau, mais par dessous; et si je continue à tourner, la vue repasse au dessus.
Et je n'arrive pas à trouver pourquoi. J'ai regardé à quelles angles ce phénomènes se passaient, et cela se passe à 135° et 315°... Pourquoi?
Je pense donc à la façon de calculer le vecteur normal qui n'est pas forcément la mieux adaptée. Quelqu'un aurait il une meilleure solution?
Partager