Intro :
Pour se déplacer dans la scène 3D il faut mouvoir une caméra.
Dans cet article nous allons implémenter une caméra qui tourne autour d’un joueur (ou autour d’une position)
Prérequis :
– Comprendre un minimum de notions trigonométriques
Explications :
Déclarer ces trois variables dans un fichier quelconque :
|
1 2 3 |
float m_fCameraSpeed; float m_fDistance; D3DXVECTOR2 m_v2CameraAngle; |
Voilà les fonctions d’initialisation et de mise à jour de la caméra à la 3ème personne :
|
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 37 38 39 40 41 42 43 44 45 |
void CameraManager::Initialize() { m_v2CameraAngle = D3DXVECTOR2(0.0f, 0.0f); } void CameraManager::UpdateThirdPersonCamera() { // C'est deux fonctions retournent simplement la quantité de mouvement // du pointeur de la souris // Voir l'article sur le InputManager float fX = InputManager::getSingletonPtr()->getMouseRelativePos().x; float fY = InputManager::getSingletonPtr()->getMouseRelativePos().y; #define CAMERA_SPEED_ROTATE_AROUND 0.0037f // Normalement il faut utiliser le temps passé depuis le dernier affichage // (voir l'article sur la variable fTimeSinceLastFrame "Performance Timer") m_v2CameraAngle.x += fX * CAMERA_SPEED_ROTATE_AROUND; m_v2CameraAngle.y -= fY * CAMERA_SPEED_ROTATE_AROUND; // Clamp : une fonction qui permet de garder le résultat // passé entre un intervalle donné m_v2CameraAngle.y = Clamp(camAngle.y, 0.003f, Ogre::Math::PI - 0.003f); // Usage de la trigonométrie pour faire en sorte que la caméra // fasse une rotation autour d'un point float cosX = cos(m_v2CameraAngle.x); float cosY = cos(m_v2CameraAngle.y); float sinY = sin(m_v2CameraAngle.y); float sinX = sin(m_v2CameraAngle.x); float xf = cosX * sinY; float yf = cosY; float zf = sinX * sinY; D3DXVECTOR3 finalPos(xf, yf, zf); /* Position du joueur (où de l'objet auquel vous voulez tourner autour !*/ D3DXVECTOR3 playerPos = GAME->getPlayer()->getSceneNode()->getPosition(); // Votre objet caméra utilisé m_pCamera->setPosition(finalPos * m_fDistance + playerPos); m_pCamera->lookAt(GAME->getPlayer()->getSceneNode()->getPosition()); /** Pour centrer le curseur de ma souris */ centerCursorPos(); } |
Résumé :
Nous avons présenté un moyen d’implémenter une caméra trigonométrique qui opère une révolution autour de la position du joueur !


