如何在THREE.js中获取相机的方向

9
我正在使用THREE.JS和Web Audio API创建一个3D游戏。我遇到的一个问题是,我想使用Web音频监听器方向,并将监听器定义为相机,其位置和方向不断更新。
我的问题是,有没有办法轻松地获取THREE相机的向量方向?
我尝试通过使用旧的相机位置,并使用速度向量计算它面对的方向来计算它,但当相机静止时,这种方法行不通...
是否可以通过使用camera.rotation.x,camera.rotation.y,camera.rotation.z来创建一个单位向量呢?
或者有更简单的方法吗?
非常感谢您的时间!
3个回答

18

您想知道相机朝向世界空间中的方向。

相机空间中,相机位于原点,并朝下看其负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设置和读取相机看向向量


3
在第69个修订版本中(不确定在哪个版本引入),你可以调用:
camera.getWorldDirection()

获取相机方向向量。


至少在r147版本中,你需要传递一个向量:camera.getWorldDirection(new THREE.Vector3()) - alexia

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;

}


applyMatrix4 是做什么用的? - Agent Zebra
这是关于矩阵数学的:http://threejs.org/docs/#Manual/Introduction/Matrix_transformations - Joris

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接