Salut à tous,
J'ai un soucis actuellement avec mon petit projet.
Grosso modo, j'affiche ce que je veux sans probleme, tout fonctionne tranquillou et tout le tintouin sauf un truc : la rotation de la camera.
Pour ce faire j'ai créé une classe camera comme j'ai pu le voir dans divers tutos.
Voici le code :
Classe camera :
Pour m'en servir, je fais comme suis :
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 #include "camera.h" camera::camera(float iposx,float iposy,float iposz,float iviewx,float iviewy,float iviewz) { posx = iposx; posy = iposy; posz = iposz; viewx = iviewx; viewy = iviewy; viewz = iviewz; } void camera::init(void) { gluLookAt( posx, posy, posz, viewx, viewy, viewz, 0.0, 1.0, 0.0); } void camera::rotateX(int angle2) { float angle = angle2/180.f*(float)PI; float viewy2=viewy; viewy = cosf(angle)*(viewy-posx)+sinf(angle)*(posy-viewz)+posx; viewz = cosf(angle)*(viewz-posy)+sinf(angle)*(viewy2-posx)+posy; } void camera::rotateY(int angle2) { float angle = angle2/180.f*(float)PI; float viewx2=viewx; viewx = cosf(angle)*(viewx-posx)+sinf(angle)*(posy-viewz)+posx; viewz = cosf(angle)*(viewz-posy)+sinf(angle)*(viewx2-posx)+posy; }
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
21
22
23
24
25
26
27
28
29
30
31
32
33
34 void mouse(int button, int state,int x,int y) { if (button == GLUT_LEFT_BUTTON && state == GLUT_DOWN) { presse = 1; xold = x; yold = y; } if (button == GLUT_LEFT_BUTTON && state == GLUT_UP) presse=0; } void mousemotion(int x,int y) { if (presse) { int r,r2; r=x-xold; if (r>=360) r-=360; cam.rotateY(r); r2=y-yold; if (r2>=360) r2-=360; cam.rotateX(r2); glutPostRedisplay(); } xold = x; yold = y; }
Mousemotion et mouse sont les fonctions de glut qui gerent la souris.
Mon probleme est le suivant :
Lorsque je fais soit l'une ou l'autre des rotations (selon X ou selon Y) j'ai une sorte de truc bizarre qui se passe.
Par exemple, si je fais une rotation selon X, il ne devrait y avoir de mouvement que sur les coordonnées z et y. Eh bien là, il y a aussi x qui bouge car au lieu de monter ou descendre elle fait bien ce que je veux mais avec un léger mouvement circulaire en fait...enfin comment expliquer...
au lieu que le mouvement decrive une droite il decrit une sort de rond. et ça se produit surtout vers certaines zones de l'ecran.... bizarre bizarre... vu que la gestion au niveau souris renvoie des rotations d'angles tres faibles (1°)....
Voilou grosso modo mon soucis. Alors je ne suis pas vraiment certain de la formule de rotation et je voulais savoir si quelqu'un pouvait y jetter un oeil svp ? merci d'avance
@+
Partager