我正在使用 html5 和 THREE.js 创建游戏,并且我有一个以“YXZ”的欧拉顺序旋转的相机。
这样相机就可以像头部一样上下左右旋转。就像第一人称视角一样。
使用此欧拉顺序,不使用 camera.rotation 中的 z 属性(始终为 0)。x 用于以弧度指定间距或纬度,y 用于描述经度。
我有许多目标以球形方式围绕用户移动,相机始终位于该球体的中心。假设球体的半径为 1000。
我的目标是计算相机正在看的位置和目标位置之间的角度。
我写了这段代码来计算两个向量之间的角度:
var A = new THREE.Vector3(1,0,0);
var B = new THREE.Vector3(0,1,0);
var theta = Math.acos( A.dot(B) / A.length() / B.length() );
// theta = PI/2;
我有目标的向量(targets[0].position)。
问题是我无法找到一种方法来获取相机正在寻找的矢量。
我查看了 Vector3.applyProjection 和 applyEuler 方法,并玩过但仍然无法获得任何好的结果。
我相信在进行任何预测之前,必须首先将欧拉顺序改回“XYZ”?我已经尝试过了,但我不知道该怎么做,文档很难理解。
假设如果相机直接向右看,那么我需要得到一个向量,该向量在当前旋转方向上距中心的 RADIUS 距离。
所以我最终会得到 2 个向量,我可以对它们进行计算!