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" 作为参数。
我需要读取(提取)场景中相机的当前 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" 作为参数。