OpenGL:Camera à la troisième personne
Un article de Games Creators Network.
La classe de caméra utilisée dans cet article est celle de "Développer un RPG en C++ avec OpenGL". Vous pourrez aussi trouver ces sources dans l'article connexe intitulé "Caméra à la première personne".
Sommaire |
[modifier] Concept
Pour réaliser notre caméra à la troisième personne, nous allons donc réutiliser une classe de caméra existante.
[modifier] Mise en Oeuvre
[modifier] Création de notre caméra
Pour créer notre caméra, nous avons seulement à déclarer et instancier notre objet, en passant comme paramètre au constructeur les coordonnées de la caméra.
TCamera* Camera = new TCamera(150, 75, 150);
[modifier] Récupérer les mouvement du curseur
Commençons par déclarer
POINT Curseur;
Qui nous servira à stoquer les coordonnées de notre souris. Ajoutons l'événement win32 suivant, afin de stoquer la position de notre souris à chaque fois qu'elle bouge.
case WM_MOUSEMOVE: { Curseur.x = LOWORD(lParam); Curseur.y = HIWORD(lParam); return 0; }
[modifier] Utiliser les coordonnées de la souris
Nous allons maintenant traiter les coordonnées de la souris que nous avons récupérés, puis nous apellerons des méthodes de la caméra adéquates :
float x,y; y = -(Curseur.y-((float)APP_RESOY/2.f))/8.f; x = (Curseur.x-((float)APP_RESOX/2.f))/3.f; Camera->RotationZX(y); Camera->RotationY(x); SetCursorPos((int)(APP_RESOX/2),(int)(APP_RESOY/2));
La formule "-(Curseur.y-((float)APP_RESOY/2.f))" représente en fait la distance parcourue en y par rapport à la moitié de l'écran. La formule "(Curseur.x-((float)APP_RESOX/2.f))" représente elle la distance en x parcourue par la souris par rapport au centre de l'écran. Les divisions qu'on applique ensuite à ces formules permettent de ralentir la vitesse de défilement. La fonction RotationZX() de notre classe de caméra sert à effectuer une rotation "verticale" autour de notre objet, alors que la fonction RotationY() sert à faire une rotation "horizontale". Notez que l'on replace le curseur au centre de l'écran après nos traitements. (Ne le faites pas dans la routine de récupération des coordonnées du curseur dans le WM_MOUSEMOVE, vous feriez un cycle infini de messages).
[modifier] Initialisation
Nous créons un espace mémoire pour la focalisation de notre caméra.
Point3D* Focal = new Point3D; Focal->x = 0; Focal->y = 0; Focal->z = 0; Camera->SetFocalisation(Focal);
[modifier] Pour terminer
Il ne reste plus qu'à appeler
Camera->Focalise();
A chaque loop afin de positionner notre caméra.
[modifier] Téléchargements
- Sources et exécutables : http://www.rootage.org/GCNwiki/CAMERA_3RD_PERSON.rar
--NewbiZ 11 sep 2005 à 00:38 (CEST)

