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

Three.js - Find the current LookAt of a camera?

我需要读取(提取)场景中相机的当前 lookAt。我看过以下内容 post 但我无法从相机中获取 lookAt。

three.js set and read camera look vector

感谢您的帮助。

lookAt 不能用作向量,它实际上是 THREE.Object3D 中的一种方法,如您所见 here。该方法用于创建一个应用于对象的旋转矩阵,以改变对象的旋转(方向)。

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

在局部 space 中,相机正俯视 z 轴。如果将相机旋转应用到该矢量,结果是相机的 lookAt 或方向。

var vector = new THREE.Vector3( 0, 0, -1 );
vector.applyQuaternion( camera.quaternion );

也检查 this answer 类似的问题。

威尔特的这个回答很有见地,但并不完全正确。代码 returns 指向与相机指向相同方向的矢量。这是一个很好的开始!

但除非相机位于原点(0, 0, 0)(或恰好位于连接原点和旋转矢量点的线段上且不超过该点,因此该点在相机后面) 相机不会看那个点。显然——只是常识——相机的位置也会影响正在观察的点。考虑一下。相机方法 lookAt() 在 3D space 中查看一个点,而不管相机在哪里。因此,要获得相机正在注视的点,您需要通过调用调整相机位置:

vec.add( camera.position );

还值得一提的是,相机不是在看一个点,而是在看一条由无数点组成的线,每个点与相机的距离不同。上面的代码来自 Wilt returns 一个长度恰好是一个单位的向量,因为将四元数应用于归一化的 z 轴向量 (0, 0, -1) returns 另一个归一化的向量(在不同的方向)。要计算距相机任意距离 x 处的观察点,请使用:

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

这会沿 z 轴在距离原点 x 处取一个点,将其旋转到相机的方向,然后通过添加相机的位置创建一个 "world point"。我们想要一个 "world point"(而不是 "relative to the camera point"),因为 camera.lookAt() 也需要一个 "world point" 作为参数。