Alors,voila, j'ai Créer une fonction qui en fonction de la position relative de la souris, va faire une mise a jour du point de vue de la caméra, je commence par inverser le vecteur entre le point de vue de la caméra et sa position, ensuite je met a jour les angles, et je calcule les nouvelles coordonnées sphérique, le problème c'est que je pense que sa marche, mais la caméra fais des rotation beaucoup plus grande que prévu mais dès que la sensibilité est réduite, plus rien ne bouge.
Donc voyez vous un problème dans la gestion concernant la rotation x ou y, je suis en galère depuis quelques jours la
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 void Window::Rotate(int angleX, int angleY, int sensibility) { double x = _cam->GetLook_x() - _cam->GetPos_x(); double y = _cam->GetLook_y() - _cam->GetPos_y(); double z = _cam->GetLook_z() - _cam->GetPos_z(); double module = sqrt(pow(x,2)+pow(y,2)+pow(z,2)); double teta = acos(z/module); double beta = acos(x/sqrt(pow(x,2)+pow(y,2))); if(y < 0) beta = 2*M_PI-beta; teta += angleY/6; beta += angleX/6; x = module*sin(teta)*cos(beta); y = module*sin(teta)*sin(beta); z = module*cos(teta); _cam->SetLook_x(x + _cam->GetPos_x()); _cam->SetLook_y(y + _cam->GetPos_y()); _cam->SetLook_z(z + _cam->GetPos_z()); // le commentaire est une gestion de la caméra tournant sur x, qui lui marche très bien /* double cam_to_look_x = _cam->GetLook_x() - _cam->GetPos_x(); double cam_to_look_y = _cam->GetLook_y() - _cam->GetPos_y(); double mod = sqrt(pow(cam_to_look_x,2)+pow(cam_to_look_y,2)); double _teta = acos(cam_to_look_x/mod)*180/M_PI; double sin_y = asin(cam_to_look_y/mod)*180/M_PI; if(sin_y < 0) _teta *= -1;; _teta += teta*sensibility; _teta2 = _teta; cam_to_look_x = cos(_teta*M_PI/180)*mod; cam_to_look_y = sin(_teta*M_PI/180)*mod; _cam->SetLook_x(cam_to_look_x + _cam->GetPos_x()); _cam->SetLook_y(cam_to_look_y + _cam->GetPos_y());*/ }![]()
Partager