2012-12-24 6 views
8

Je crée un jeu 3D en utilisant THREE.JS et l'API Web Audio. L'un des problèmes que je rencontre est que je veux utiliser l'écoute web écoute Listener, et définir l'auditeur à la caméra, dont la position et la direction sont constamment mis à jourComment obtenir Orientation de la caméra dans THREE.js

Ma question, est-il là pour obtenir facilement la direction du vecteur d'un appareil photo TROIS?

je tentais de le calculer en utilisant l'ancienne position de la caméra, et en utilisant les vecteurs de vitesse pour calculer quelle manière il est confronté, mais cela ne fonctionne pas lorsque l'appareil photo est toujours debout ...

Would il est possible de créer un vecteur unitaire en utilisant camera.rotation.x, camera.rotation.y, camera.rotation.z?

ou y a-t-il un moyen encore plus facile?

Merci beaucoup pour votre temps!

Répondre

15

Vous voulez connaître la direction dans l'espace du monde dans lequel la caméra regarde.

Dans espace caméra, la caméra se trouve à l'origine et regarde vers le bas, il est axe z négatif.

Choisissez un point devant la caméra dans l'espace de la caméra:

var pLocal = new THREE.Vector3(0, 0, -1); 

maintenant transformer ce point dans l'espace mondial:

var pWorld = pLocal.applyMatrix4(camera.matrixWorld); 

Vous pouvez maintenant construire le vecteur de direction souhaitée:

var dir = pWorld.sub(camera.position).normalize(); 

EDIT: Mise à jour pour trois.js r.57

EDIT: Voir aussi: three.js set and read camera look vector

+0

PARFAIT! Merci beaucoup! – Cabbibo

2

Dans la révision 69 (pas sûr de quelle révision il a été introduit), vous pouvez appeler

camera.getWorldDirection() 

pour obtenir le vecteur d'orientation de la caméra.

+0

[Il a été ajouté en r.69] (https://github.com/mrdoob/three.js/releases/tag/r69) –

2

si votre appareil photo est un enfant de l'objet de lecteur, par exemple. dans le jeu FPS. Faites le même calcul sur le lecteur (parent de la caméra), et utiliser ce (Bullit obtient la bonne direction, dans ce cas de obj)

Bullit.prototype.getDirection=function(obj){ 
this.position.add(obj.position); 
var pLocal = new THREE.Vector3(0, 0, -1); 
var pWorld = pLocal.applyMatrix4(obj.matrixWorld); 
var dir = pWorld.sub(obj.position).normalize(); 
this.direction=dir; 

}

+0

Que fait 'applyMatrix4'? –

+0

Son pour les mathématiques matrices: http://threejs.org/docs/#Manual/Introduction/Matrix_transformations – Joris

Questions connexes