【问题标题】:Three.js - Find the current LookAt of a camera?Three.js - 查找相机的当前 LookAt?
【发布时间】:2015-03-13 12:06:37
【问题描述】:

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

three.js set and read camera look vector

感谢您的帮助。

【问题讨论】:

    标签: javascript camera three.js


    【解决方案1】:

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

    但除非相机位于原点 (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 );

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

    【讨论】:

      【解决方案2】:

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

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

      在本地空间中,相机正在向下看 z 轴。如果将相机旋转应用于该矢量,则结果是lookAt 或相机的方向。

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

      也可以查看this answer 来回答类似的问题。

      【讨论】:

      • 感谢您的帮助。我添加了上述代码并在控制台中接收到向量的值:{x: 0, y: 0, z: -1, constructor: function, set: function…}。然后我尝试了 vector.applyEuler(camera.rotation, camera.eulerOrder);并收到:{x:-0.5773502588272095,y:-0.5773502743708339,z:-0.5773502743708337,构造函数:函数,集合:函数......}。这些值可能显示了相机的当前旋转。如果我错了,请纠正我。然后我需要找到相机正在看的地方?不知道怎么做!
      • 如果您希望在太空中获得一分,我不得不让您失望。相机不会看一个点,而是从相机原点(位置)看向您计算的方向。
      猜你喜欢
      • 2014-07-01
      • 2012-12-25
      • 2013-03-17
      • 2013-03-21
      • 1970-01-01
      • 2014-06-28
      • 1970-01-01
      • 2016-05-13
      • 2020-12-26
      相关资源
      最近更新 更多