Three.js: Obtenez la direction dans laquelle la caméra est à la recherche
Je suis sûr que cette question a été dupliqué plusieurs fois, cependant je ne trouve pas de réponse pour mon problème!!!!
Je suis en création de jeu en utilisant html5 et THREE.js et j'ai une caméra qui tourne avec la droite d'euler d'ordre de "YXZ'.
C'est donc la rotation de la caméra en haut, en bas, à gauche et à droite comme un chef. Comme dans la vue à la première personne.
Avec cette euler d'ordre, la propriété z de l'appareil photo.la rotation est non utilisés (toujours à 0). x est utilisé pour spécifier la hauteur ou la latitude en radians, et y représentent les coordonnées de longitude.
J'ai un certain nombre de cibles en mouvement autour de l'utilisateur dans une forme sphérique, avec la caméra en permanence au centre de cette sphère. Permet de dire que la sphère a un rayon de 1000.
Mon but est de calculer l'angle entre l'endroit où l'appareil photo est à la RECHERCHE, et où la cible est.
J'ai écrit ce code qui calcule l'angle entre 2 vecteurs:
var A = new THREE.Vector3(1,0,0);
var B = new THREE.Vector3(0,1,0);
var theta = Math.acos( A.dot(B) / A.length() / B.length() );
//theta = PI/2;
J'ai le vecteur de la cible (cibles[0].position).
Le truc c'est que je ne peut pas trouver un moyen d'obtenir le vecteur de l'endroit où l'appareil photo est à la recherche.
J'ai regardé Vector3.applyProjection et applyEuler méthodes, et joué un peu, mais encore ne peuvent pas obtenir de bons résultats.
Je crois que la droite d'euler d'ordre doit d'abord être modifié pour revenir à 'XYZ' avant tout des projections sont faites? J'ai essayé, et je ne suis pas sûr de la façon de le faire, la documentation est assez difficile à comprendre.
Dire si la caméra est à la recherche directement à droite, puis j'ai besoin d'obtenir un vecteur qui est le RAYON de distance du centre dans le sens de la rotation actuelle.
Je vais donc finir avec 2 vecteurs, qui je peut faire des calculs sur!
Je vous remercie à l'avancée de!
source d'informationauteur AlexMorley-Finch
Vous devez vous connecter pour publier un commentaire.
La caméra est à la recherche interne négative de l'axe z de. Afin de créer un vecteur pointant vers le négatif de l'axe z:
Maintenant, appliquez la même rotation du vecteur qui est appliqué à la caméra:
Vous pouvez obtenir l'angle en radians à la cible comme suit:
EDIT: Vous pouvez maintenant obtenir la direction dans laquelle la caméra est à la recherche comme suit:
Remarque: en passant dans le
vector
dans lequel stocker le résultat, la méthode n'aura pas d'instancier un nouvelTHREE.Vector3
chaque fois que la méthode est appelée.Mis à jour three.js r.79
J'ai passé un long moment à essayer de comprendre capitaine évidente de la question.
C'est comment il a finalement fonctionné pour moi:
theta est en radians.
C'est de cette façon que je orienter mon jeu de caractère pour faire face à la même manière dont l'appareil est en face. Le getWorldDirection() est une assez nouvelle option sur l'appareil photo.
Je ne peux pas commenter, mais fluffybunny réponse fonctionne parfaitement.
getWorldDirection()
puis, changeant de ce vecteur en radians est le chemin à parcourir.fluffybunny cloué.
Avec un petit changement pour son idée géniale, vous pouvez obtenir la rotation en degrés: