Mon post portant sur l'implémentation de mathématiques dans un programme, j'espère être dans la bonne section
Voici mon soucis:
Je suis en train de modifier un outil mis à disposition par un ami basé sur le Source SDK, qui permet de rajouter des fonctions utiles au routing et au TAS dans le jeu Portal 2.
La fonction que je suis en train de rajouter est un basique LookAt, qui permet de tourner le personnage contrôlé vers un point {x, y, z} comme ici : https://youtu.be/V960cNdnh9I?t=344
Pour cela, je dispose des coordonnées de position et de rotation x, y, z du personnage, et des coordonnées position x, y, z de la cible. Pour la rotation du personnage, x est le pitch, y est le yaw, z est le roll et est tout le temps à 0.
Ce problème est très simple à résoudre, il te suffit de récupérer les positions cartésiennes de ton objet par rapport à ton observateur. Donc en soustrayant les positions (X;Y) de ton objet par celles de ton observateur. Ensuite le calcul est le suivant : centre + distance * position. Le centre correspond à la position de ton observateur. La distance indique l'écart entre le centre de ton observateur et la position des yeux (typiquement les yeux sont à [distance] du centre de la tête). La position est une des coordonnées cartésiennes récupérés plus tôt. Il faut garder en tête qu'il s'agit d'un calcul sur un plan complexe, donc on doit effectuer le calcul pour X et Y séparément.
Après si tu souhaites obtenir un LookAt sur une sphère complète, le calcul est différent mais tu ne sembles pas en avoir besoin. Les positions cartésiennes sont quant à elles locales, il est nécessaire de prendre en compte la rotation de ton objet de référence pour réaligner l'ensemble par rapport au plan de la scène (et ainsi écarter la position Z du calcul).
- Edité par yarflam 5 décembre 2018 à 1:25:56
Implémenter LookAt sur Vecteur 3D
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.