Javascript Three.js-找到相机的当前外观?

Javascript Three.js-找到相机的当前外观?,javascript,camera,three.js,Javascript,Camera,Three.js,我需要读取(提取)场景中相机的当前外观。我看到了下面的帖子,但我无法从摄像机上看到 谢谢您的帮助。lookAt不是矢量,正如您所看到的,它实际上是THREE.Object3D中的一个方法。该方法用于创建应用于对象的旋转矩阵,以更改对象的旋转(方向) 因此,如果您想知道对象的当前方向(注视),您必须从对象的旋转中提取此信息 在局部空间中,摄影机向下看z轴。如果将摄影机旋转应用于该向量,则结果为摄影机的方向 var vector = new THREE.Vector3( 0, 0, -1 ); v

我需要读取(提取)场景中相机的当前外观。我看到了下面的帖子,但我无法从摄像机上看到


谢谢您的帮助。

lookAt
不是矢量,正如您所看到的,它实际上是
THREE.Object3D
中的一个方法。该方法用于创建应用于对象的旋转矩阵,以更改对象的旋转(方向)

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

在局部空间中,摄影机向下看z轴。如果将摄影机旋转应用于该向量,则结果为摄影机的方向

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

另请检查一个类似的问题。

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

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

在局部空间中,摄影机向下看z轴。如果将摄影机旋转应用于该向量,则结果为摄影机的方向

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

还可以查看一个类似的问题。

威尔特的回答很有见地,但并不完全正确。该代码返回一个向量,该向量指向摄影机所指向的同一方向。这是一个很好的开始

但是,除非相机位于原点(0,0,0)(或者正好位于将原点连接到旋转矢量点的线段上,而不经过该点,因此该点位于相机后面),否则相机将不会注视该点。显然——这只是常识——摄像机的位置也会影响被观察的点。想想看。摄影机方法
lookAt()
查看三维空间中的一个点,而不管摄影机位于何处。因此,要获取相机正在查看的点,您需要通过调用以下命令来调整相机位置:

vec.add(摄像机位置)

还值得一提的是,相机不是在看一个点,而是在看一行无限多的点,每个点与相机的距离不同。上述来自Wilt的代码返回一个长度正好为一个单位的向量,因为对标准化z轴向量(0,0,-1)应用四元数会返回另一个标准化向量(在不同方向)。要计算距离相机任意距离
x
的注视点,请使用:

(新的3.Vector3(0,0,-x)).applyQuaternion(camera.quaternion)。add(camera.position)


这将沿z轴在距离原点
x
的距离处获取一个点,将其旋转到摄影机的方向,然后通过添加摄影机的位置创建一个“世界点”。我们需要一个“世界点”(而不是“相对于摄影机点”),因为
camera.lookAt()
也将“世界点”作为参数

威尔特的这个回答很有见地,但并不完全正确。该代码返回一个向量,该向量指向摄影机所指向的同一方向。这是一个很好的开始

但是,除非相机位于原点(0,0,0)(或者正好位于将原点连接到旋转矢量点的线段上,而不经过该点,因此该点位于相机后面),否则相机将不会注视该点。显然——这只是常识——摄像机的位置也会影响被观察的点。想想看。摄影机方法
lookAt()
查看三维空间中的一个点,而不管摄影机位于何处。因此,要获取相机正在查看的点,您需要通过调用以下命令来调整相机位置:

vec.add(摄像机位置)

还值得一提的是,相机不是在看一个点,而是在看一行无限多的点,每个点与相机的距离不同。上述来自Wilt的代码返回一个长度正好为一个单位的向量,因为对标准化z轴向量(0,0,-1)应用四元数会返回另一个标准化向量(在不同方向)。要计算距离相机任意距离
x
的注视点,请使用:

(新的3.Vector3(0,0,-x)).applyQuaternion(camera.quaternion)。add(camera.position)


这将沿z轴在距离原点
x
的距离处获取一个点,将其旋转到摄影机的方向,然后通过添加摄影机的位置创建一个“世界点”。我们需要一个“世界点”(而不是“相对于摄影机点”),因为
camera.lookAt()
也将“世界点”作为参数

谢谢你的帮助。我添加了上面的代码,并在控制台中接收向量值:{x:0,y:0,z:-1,构造函数:函数,集合:函数…}。然后我尝试了vector.applyEuler(camera.rotation,camera.eulerOrder);并收到:{x:-0.5773502588272095,y:-0.5773502743708339,z:-0.5773502743708337,构造函数:函数,集合:函数…}。这些值可能显示相机的当前旋转。如果我错了,请纠正我。那我需要找到摄像机在看什么?不知道怎么做!如果你想在太空中得分,我就得让你失望。相机不看一个点,但它从相机原点(位置)看向您计算的方向。谢谢您的帮助。我添加了上面的代码,并在控制台中接收向量值:{x:0,y:0,z:-1,构造函数:函数,集合:函数…}。然后我尝试了vector.applyEuler(camera.rotation,camera.eulerOrd