我正在使用THREE.JS和Web Audio API创建一个3D游戏。我遇到的一个问题是我想使用网络音频监听器方向,并将监听器定义为摄像头,其位置和方向不断更新
我的问题是,无论如何都可以轻松获得三个相机的矢量方向吗?
我试图通过使用旧的相机位置来计算它,并使用速度矢量来计算它面向的方向,但是当相机静止不动时这不会起作用......
通过使用camera.rotation.x,camera.rotation.y,camera.rotation.z来创建单位矢量是否可行?
还是有更简单的方法吗?
非常感谢您的时间!
答案 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
答案 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;
}