Partage
  • Partager sur Facebook
  • Partager sur Twitter

Implémenter LookAt sur Vecteur 3D

    1 novembre 2018 à 17:28:41

    Bonjour,

    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.

    J'ai fait pas mal de recherches, et je suis tombé sur pas mal de solutions utilisant des fonctions pré-faites de Unity. J'ai bien trouvé ceci : https://stackoverflow.com/questions/8208789/3d-vector-x-y-z-look-at-vector qui porte en plus sur le moteur que j'utilise, mais le code ne fonctionne pas. J'ai également trouvé ce lien http://www.euclideanspace.com/maths/algebra/vectors/lookat/index.htm mais je n'ai pas réussi à tout comprendre.

    J'ai également vu qu'il était souvent question des quaternions. Est-il vraiment nécessaire de passer par ceux-ci ?

    Y aurait t'il une âme charitable qui saurait m'expliquer comment faire ou bien me lancer des pistes ?

    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
    Quand le sage désigne la lune, l'idiot regarde le doigt.
      5 décembre 2018 à 1:22:51

      Bonjour blenderiste09,

      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.

      Voici un petit exemple en 2D pour te montrer : https://codepen.io/Yarflam/pen/jQoLrY (lignes 43 - 44).

      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

      • Partager sur Facebook
      • Partager sur Twitter

      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.
      • Editeur
      • Markdown