【问题标题】:Three.js Setting camera (or Object3D) roatation angle along its own particular axisThree.js 沿自己的特定轴设置相机(或 Object3D)旋转角度
【发布时间】:2015-10-09 20:39:20
【问题描述】:

我正在使用 Three.js。 我有一个可以通过以下方式移动和旋转的相机:

  • camera.translateX():左/右移动
  • camera.translateZ():前进/后退
  • camera.rotateY(): 左右旋转
  • camera.rotateX(): 上下旋转

经过一些移动和旋转后,我想重置相机的上/下旋转(即它既不会看天空也不会看地板)使其水平观看,同时保持当前的左/右旋转和位置

我的问题是如何获得 camera.rotateX() 的正确值? 或者有什么方法可以指定它应该旋转到的确切角度?

我尝试过camera.quaternion.setFromAxisAngle(),但这似乎不是我想要的,因为它还会更改/设置相机的左/右旋转。

【问题讨论】:

    标签: 3d camera rotation three.js


    【解决方案1】:

    您的相机旋转发生在它自己的坐标系中,而不是在世界坐标系中。这就是为什么使用 camera.rotateY() 您可以相对于您的位置向左和向右旋转,无论它是什么。您当前的方向由Euler angles 表示,这是三个连续旋转。在您的每个旋转轴都与您一起旋转之后。

    您可以尝试通过设置 camera.rotation.order = "YXZ"; 来更改旋转顺序,然后设置 camera.rotation.y = 0

    还知道向量 a = camera.positionb = camera.getWorldDirection() 您可以使用 camera.lookAt(b.x, a.y, b.z)。

    希望这会有所帮助。 还有一些工作示例可以提供帮助:FirstPersonControlsPointerLockControls

    【讨论】:

    • 对不起,两种方法我都试过了,结果不是我想要的。结果视图只是跳到了一个意想不到的位置。
    • 这个答案不是关于提供用于复制粘贴的代码,而是关于一旦理解的一般想法让你不会为你的问题而苦恼。查看您的欧拉旋转顺序。当然直接设置相机角度会导致“跳跃”。
    猜你喜欢
    • 2015-06-15
    • 2013-03-19
    • 1970-01-01
    • 2015-08-07
    • 1970-01-01
    • 2012-07-23
    • 1970-01-01
    • 1970-01-01
    • 2013-07-28
    相关资源
    最近更新 更多