2012-12-24 72 views
8

我正在使用THREE.JS和Web音頻API創建3D遊戲。我遇到的一個問題是我想使用網絡音頻監聽器方向,並將監聽器定義爲攝像機,其位置和方向不斷更新。如何在THREE.JS中獲取相機的方向

我的問題,有無論如何輕鬆獲得一個三相機的矢量方向?

我試圖用舊的攝像機位置,並利用速度矢量來計算它正面臨何種方式來計算的話,但是當相機靜止不動這是不行的......

會通過使用camera.rotation.x,camera.rotation.y,camera.rotation.z創建單位矢量是可行的?

還是有更簡單的方法嗎?

非常感謝您的時間!

回答

15

你想知道相機正在尋找的世界空間的方向。

攝像機空間,相機位於起源和向下看它的z軸負。

接在照相機前面的點在攝像機空間:

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

現在變換點到世界空間:

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

現在可以構造所希望的方向矢量:

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

編輯:更新爲three.js r.57

編輯:另請參見:three.js set and read camera look vector

+0

完美!非常感謝! – Cabbibo

2

在修訂69(它被引入哪些修訂不知道),你可以調用

camera.getWorldDirection() 

讓相機定向矢量。

+0

[它是在r.69中添加的](https://github.com/mrdoob/three.js/releases/tag/r69) –

2

如果您的相機是播放器對象的孩子,在FPS遊戲中。照此計算的播放器(相機的母公司),並使用這個(在Bullit得到正確的方向,在這種情況下,從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

'applyMatrix4'做了什麼? –

+0

它適用於矩陣數學:http://threejs.org/docs/#Manual/Introduction/Matrix_transformations – Joris