Three.js - 查找相机的当前LookAt?

mbe*_*aam 1 javascript camera three.js

我需要读取(提取)场景中摄像机的当前lookAt.我看过以下帖子,但是我无法从相机中看到它.

three.js设置和读取相机外观矢量

谢谢您的帮助.

小智 6

Wilt的答案非常有见地,但并不完全正确.代码返回一个矢量,该矢量指向摄像机指向的相同方向.这是一个很好的开始!

但是,除非摄像机位于原点(0,0,0)(或者恰好位于将原点连接到旋转矢量点而不超过该点的线段上,因此该点位于摄像机后面)摄像机赢了看着那一点.显然 - 只是常识 - 相机的位置也会影响正在观察的点.考虑一下.lookAt()无论相机在何处,相机方法都会查看3D空间中的某个点.因此,要获得相机正在观察的点,您需要通过调用以下内容来调整相机位置:

vec.add( camera.position );

值得一提的是,相机看起来并不是单点,而是俯视无限数量的点,每个点与相机的距离不同.来自Wilt的上述代码返回一个长度恰好为一个单位的向量,因为四元数应用于规范化的z轴向量(0,0,-1)会返回另一个标准化向量(在不同的方向上).要计算距x摄像机任意距离的点的外观:

(new THREE.Vector3( 0, 0, -x )).applyQuaternion( camera.quaternion ).add( camera.position );

这将沿着z轴x与原点相距一段距离,将其旋转到相机的方向,然后通过添加相机的位置来创建"世界点".我们想要一个"世界点"(而不是"相对于相机点"),因为它camera.lookAt()也将"世界点"作为参数.


Wil*_*ilt 5

lookAt不能作为向量使用,它实际上是一种方法,正如您在此处THREE.Object3D看到的那样。该方法用于创建应用于对象的旋转矩阵,以更改对象的旋转(方向)。

因此,如果您想知道对象的当前方向(lookAt)是什么,您必须从对象的旋转中提取此信息。

在局部空间中,摄像机沿着 z 轴向下看。如果将相机旋转应用于该矢量,则结果就是lookAt相机的方向。

var vector = new THREE.Vector3( 0, 0, -1 );
vector.applyQuaternion( camera.quaternion );
Run Code Online (Sandbox Code Playgroud)

另请检查类似问题的答案。