2012-12-24 536 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