如何在THREE.js中获得相机的定位

时间:2012-12-24 16:40:42

标签: javascript html5 three.js web-audio

我正在使用THREE.JS和Web Audio API创建一个3D游戏。我遇到的一个问题是我想使用网络音频监听器方向,并将监听器定义为摄像头,其位置和方向不断更新

我的问题是,无论如何都可以轻松获得三个相机的矢量方向吗?

我试图通过使用旧的相机位置来计算它,并使用速度矢量来计算它面向的方向,但是当相机静止不动时这不会起作用......

通过使用camera.rotation.x,camera.rotation.y,camera.rotation.z来创建单位矢量是否可行?

还是有更简单的方法吗?

非常感谢您的时间!

3 个答案:

答案 0 :(得分:16)

您想知道相机正在观看的世界空间的方向。

相机空间中,相机位于原点,向下看它的负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

答案 1 :(得分:2)

在修订版69中(不确定引入的修订版本),您可以致电

camera.getWorldDirection()

获取相机方向矢量。

答案 2 :(得分: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;

}