我正在使用 Three.js。我有一个相机,可以通过以下方式移动和旋转:
-
camera.translateX()
:移动 left/right -
camera.translateZ()
:移动 forward/backward -
camera.rotateY()
:旋转 left/right -
camera.rotateX()
:旋转 up/down
在一些运动和旋转之后,我想重置相机的 up/down 旋转(i.e.它既不会看天空也不会看地板)以便水平观看,而则保持当前的 left/right 旋转和位置。
我的问题是如何才能获得camera.rotateX()
的正确值?或者有没有办法指定它应该旋转的确切角度?
我试过了camera.quaternion.setFromAxisAngle()
,但它似乎不是我想要的,因为它也是 change/set 相机的 left/right 旋转。
1 回答
您的相机旋转发生在其自己的坐标系中,而不是在世界坐标系中。这就是为什么****_ _ **你相对于你的位置左右旋转,无论它是什么。您的当前方向由欧拉角表示,这是三个顺序旋转。在您的每个旋转轴旋转后。
您可以尝试通过设置camera.rotation.order =“YXZ”来更改旋转顺序;然后设置camera.rotation.y = 0。
也知道向量a = camera.position和b = camera.getWorldDirection()你可以使用camera.lookAt(b.x,a.y,b.z)。
希望这可以帮助。还有一些可以提供帮助的工作示例:FirstPersonControls,PointerLockControls。