2015-10-09 44 views
0

我正在使用Three.js。 我有移動和轉動通過以下方式相機:Three.js沿着其自己的軸設置相機(或Object3D)旋轉角度

  • camera.translateX():左/右移動
  • camera.translateZ():前進/後退
  • camera.rotateY():左/右旋轉
  • camera.rotateX():旋轉up/down

經過一些移動和旋轉後,我想重置相機的上/下旋轉(即它會將呃看着天空或地板),以便它水平觀看,而保持當前的左/右旋轉和位置

我的問題是我怎麼能得到camera.rotateX()適當的價值? 或者有什麼方法可以指定它應該旋轉的精確角度?

我試過camera.quaternion.setFromAxisAngle()但它似乎不是我想要的,因爲它也改變/設置相機的左/右旋轉。

回答

0

您的相機旋轉發生在它自己的座標系中,而不是世界座標系中。這就是爲什麼與camera.rotateY()你相對於你的位置左右旋轉,無論它是什麼。您的當前方向由Euler angles表示,它們是三個順序旋轉。每個旋轉軸與您一起旋轉後。

您可以嘗試通過設置camera.rotation.order =「YXZ」;更改您的旋轉順序。然後設置camera.rotation.y = 0

而且知道矢量一個= camera.positionB = camera.getWorldDirection()可以使用camera.lookAt(b.x,a.y,b.z)

希望這會有所幫助。 也有工作的例子可以幫助:FirstPersonControls,PointerLockControls

+0

對不起,我試過這兩種方法,結果不是我想要的。由此產生的視圖只是跳到一個意想不到的位置 –

+0

這個答案不是提供複製粘貼的代碼,而是關於一旦理解的一般想法,讓你不會爲你的問題而掙扎。查看你的歐拉旋轉訂單。當然,直接設置攝像機角度會導致「跳躍」。 – mlkn