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
|
void TrackBallCamera::OnMouseMotion(const SDL_MouseMotionEvent & event)
{
if (_hold) //si nous maintenons le bouton gauche enfoncé
{
_angleZ += event.xrel*_motionSensivity; //mouvement sur X de la souris -> changement de la rotation horizontale
_angleY += event.yrel*_motionSensivity; //mouvement sur Y de la souris -> changement de la rotation verticale
//pour éviter certains problèmes, on limite la rotation verticale à des angles entre -90° et 90°
if (_angleY > 90)
_angleY = 90;
else if (_angleY < -90)
_angleY = -90;
}
if (_rightButtonHold) //si nous maintenons le bouton droit enfoncé
{
_panX += event.xrel - oldX;
_panY += event.yrel - oldY;
}
oldX = event.xrel;
oldY = event.yrel;
}
void TrackBallCamera::look()
{
gluLookAt(_distance,0,0,
0,0,0,
0,0,1); // la caméra regarde le centre (0,0,0) et est sur l'axe X à une certaine distance du centre donc (_distance,0,0)
glRotated(_angleY,0,1,0); //la scène est tournée autour de l'axe Y
glRotated(_angleZ,0,0,1); //la scène est tournée autour de l'axe Z
glTranslate(_panX, _panY, 0.0f);
} |
Partager