2012-12-24 5 views
8

Tworzę grę 3D za pomocą THREE.JS i Web Audio API. Jednym z problemów, który mam, jest to, że chcę korzystać z internetowej orientacji słuchacza i zdefiniować słuchacza jako kamerę, której pozycja i kierunek są ciągle aktualizowane.Jak uzyskać orientację kamery w THREE.js

Moje pytanie, czy mimo to można łatwo uzyskać kierunek wektora TRZY kamery?

starałem się go obliczyć za pomocą starego położenia kamery i przy użyciu wektorów prędkości obliczyć, w jaki sposób jest ona skierowana, ale to nie będzie działać, gdy aparat stoi nadal ...

Would można uzyskać wektor jednostkowy za pomocą metody camera.rotation.x, camera.rotation.y, camera.rotation.z?

czy jest jeszcze łatwiejszy sposób?

Dziękuję bardzo za poświęcony czas!

Odpowiedz

15

Chcesz poznać kierunek w przestrzeni świata, w której patrzy kamera.

W przestrzeni aparatu, aparat znajduje się w pochodzenia i patrzy w dół to negatywny oś.

Wybierz punkt przed kamerą w przestrzeni kamery:

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

teraz przekształcić ten punkt w przestrzeni światowej:

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

Teraz można skonstruować pożądany kierunek wektora:

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

EDYCJA: Zaktualizowana dla three.js r.57

EDIT: Zobacz też: three.js set and read camera look vector

+0

doskonały! Dziękuję bardzo! – Cabbibo

2

W przeglądzie 69 (nie wiem w co wersja została wprowadzona), można nazwać

camera.getWorldDirection() 

dostać wektora orientacji aparatu.

+0

[Został dodany w r.69] (https://github.com/mrdoob/three.js/releases/tag/r69) –

2

jeśli twoja kamera jest dzieckiem obiektu gracza .e.g. w grze FPS. Czy te same obliczenia na odtwarzaczu (macierzystego kamery) i wykorzystują to (the Bullit otrzymuje właściwym kierunku, w tym przypadku z 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

Co robi 'applyMatrix4'? –

+0

Jest to macierzowa matematyka: http://threejs.org/docs/#Manual/Introduction/Matrix_transformations – Joris