2012-12-24 18 views
8

Sto creando un gioco 3D utilizzando THREE.JS e l'API Web Audio. Uno dei problemi che sto avendo è che voglio usare l'orientamento del listener audio web e definire l'ascoltatore come la telecamera, la cui posizione e direzione sono costantemente aggiornateCome ottenere l'orientamento della videocamera in THREE.js

La mia domanda, è comunque lì per ottenere facilmente il direzione vettoriale di una telecamera TRE?

stavo cercando di calcolarlo usando la vecchia posizione della telecamera, e utilizzando i vettori di velocità per calcolare in che modo essa si trova ad affrontare, ma questo non funziona quando la fotocamera è in piedi ancora ...

Would è possibile creare un vettore unitario usando sempre camera.rotation.x, camera.rotation.y, camera.rotation.z?

o c'è un modo ancora più semplice?

Grazie mille per il vostro tempo!

risposta

15

Si desidera conoscere la direzione nello spazio mondiale in cui la fotocamera sta guardando.

In spazio telecamera, la telecamera si trova al origine e sta guardando è negativo asse z.

Selezionare un punto davanti alla macchina fotografica nello spazio fotocamera:

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

Ora trasformare quel punto nello spazio mondo:

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

È ora possibile costruire il vettore di direzione desiderata:

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

MODIFICA: aggiornato per three.js r.57

EDIT: Vedi anche: three.js set and read camera look vector

+0

PERFETTO! Grazie mille! – Cabbibo

2

In revisione 69 (non so in quale versione è stato introdotto), è possibile chiamare

camera.getWorldDirection() 

per ottenere il vettore di orientamento della fotocamera.

+0

[È stato aggiunto in r.69] (https://github.com/mrdoob/three.js/releases/tag/r69) –

2

se la videocamera è figlia dell'oggetto giocatore .e.g. nel gioco FPS. Fate lo stesso calcolo sul lettore (madre di fotocamera), e utilizzare questo (la Bullit ottiene la giusta direzione, in questo caso da 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

Cosa fa 'applyMatrix4'? –

+0

È per Matrix Matematica: http://threejs.org/docs/#Manual/Introduction/Matrix_transformations – Joris

Problemi correlati