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 :
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 :
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 !

