8

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

我的问题是,是否可以轻松获得三个相机的矢量方向?

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

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

还是有更简单的方法?

非常感谢您的宝贵时间!

4

3 回答 3

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 设置和读取相机外观矢量

于 2012-12-24T18:50:16.723 回答
2

在修订版 69 中(不确定它是在哪个修订版中引入的),您可以调用

camera.getWorldDirection()

获取相机方向向量。

于 2014-12-04T04:16:15.303 回答
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;

}

于 2015-02-10T10:28:39.950 回答