Je suis assez nouveau sur C ++ et DirectX9 et je veux implémenter une caméra à la troisième personne. Après quelques lectures sur les caméras basées sur Quaternion, j'ai décidé d'essayer de l'implémenter. Mais cela me fait vraiment peur, alors je demande ici quelle est la façon la plus simple de mettre en œuvre une caméra TP?
Voici ce que la caméra doit faire:
Suivez les coordonnées stockées dans un 3DVector (x, y, z)
Faire pivoter autour de l'objet (lisse)
Peut-être un certain type de «ressort» = revenir lentement à la position normale derrière l'objet après avoir pivoté
Excusez-moi pour mon mauvais anglais: je suis allemand et toujours à l'école!
Merci d'avance!
ÉDITER:
Après quelques essais, je l'ai.
Le plus gros problème que j'ai considéré était l'extraction correcte du vecteur "direction" de la World-Matrix.
Au cours de mes recherches, j'ai trouvé principalement quelque chose comme ça:
D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
direction.y = worldMatrix->_23;
direction.z = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);
Cela ne fonctionne PAS pour moi! Au lieu de cela, j'ai fait ceci:
D3DXVECTOR3 direction;
direction.x = worldMatrix->_13;
// Consider the .y after the .z!
direction.z = worldMatrix->_23;
direction.y = worldMatrix->_33;
D3DXVec3Normalize(&direction, &direction);
Pour la mise à l'échelle:
// The tenfold of the average distance
D3DXVec3Scale(&direction, &direction, 10.0f);
Fixer les positions:
cameraPos = targetPos - direction;
// For a top-view
cameraPos.y = targetPos.y + 5;
Pour les rotations, vous devez créer une matrice mondiale temporaire (à partir de la position de la cible) et la faire pivoter comme vous le souhaitez et extraire la direction.
Le lissage de la rotation dépend vraiment de VOTRE jeu!
Ce type de caméra à la troisième personne est vraiment facile à faire et il fait son travail!
VRAIMENT GRAND merci à "jheriko" qui m'a donné la bonne réponse!