2012-12-24 15 views
8

Ich erstelle ein 3D-Spiel mit THREE.JS und der Web Audio API. Eines der Probleme, die ich habe ist, dass ich die Web-Audio-Listener Orientierung verwendet werden soll, und den Hörer definieren die Kamera zu sein, die Position und die Richtung dessen sindWie bekomme ich die Orientierung der Kamera in THREE.js

Meine Frage ständig aktualisiert, ist es trotzdem leicht das bekommen Vektorrichtung einer DREI Kamera?

Ich habe versucht, es zu berechnen, indem die alte Kameraposition verwendet wird, und unter Verwendung der Geschwindigkeitsvektoren zu berechnen, welche Art und Weise es konfrontiert ist, aber das wird nicht funktionieren, wenn die Kamera noch steht ...

Would ist es möglich, einen Einheitsvektor zu erstellen, indem man camera.rotation.x, camera.rotation.y, camera.rotation.z verwendet?

oder gibt es einen noch einfacheren Weg?

Vielen Dank für Ihre Zeit!

Antwort

15

Sie möchten die Richtung im Weltbereich, in dem die Kamera sucht, kennen.

In Kameraraum wird die Kamera am Ursprung und ist nach unten ist es negative z-Achse.

Wählen Sie einen Punkt vor der Kamera in der Kamera Raum:

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

nun diesen Punkt in die Weltraumtransformation:

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

Sie können nun die gewünschte Richtungsvektor konstruieren:

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

BEARBEITEN: Aktualisiert für three.js r.57

Siehe auch:

EDIT three.js set and read camera look vector

+0

perfekt! Ich danke dir sehr! – Cabbibo

2

In Revision 69 (nicht sicher, in welcher Revision es eingeführt wurde), Sie

camera.getWorldDirection() 

nennen können die Kamera Orientierungsvektor zu erhalten.

+0

[Es wurde in R.69 hinzugefügt] (https://github.com/mrdoob/three.js/releases/tag/r69) –

2

Wenn Ihre Kamera ein untergeordnetes Objekt ist, z. im FPS-Spiel. Haben die gleiche Berechnung auf dem Player (Elternteil Kamera), und verwenden Sie diese (die Bullit die richtige Richtung kommt, in diesem Fall von 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

Was macht 'applyMatrix4'? –

+0

Es ist für Matrix-Mathematik: http://threejs.org/docs/#Manual/Introduction/Matrix_transformations – Joris

Verwandte Themen