2017-09-27 70 views
0

我正在使用設備方向控件,但需要一些額外的功能,我很難。Three.js:使用不同基本方向的DeviceOrientationControls

我希望用戶能夠「鎖定」相機,防止相機方向發生變化。當解鎖它時,我想讓視圖從鎖定它的位置旋轉攝像頭,即。我不希望相機「跳」到另一個方向,儘管手機的方向在視圖被鎖定時發生了變化。

下面是對DeviceOrientaionControls.js的修改版本的代碼:https://gist.github.com/BruOp/a3fb2f0854357eb1182671cafd3fae89

的關鍵部分是在updatedisconnectreconnect

我基本上採取了用戶在「鎖定」時看到的方向(稱爲lockedRot),然後在「解鎖」(unlockedRot)時獲取設備的方向。然後我找到四元數deviceToPercieved這樣的:

deviceToPercieved * unlockedRot = lockedRot

但它不是真正的工作。有時候,相機在解鎖時只會稍微跳一點點,但有時候卻無法完全解鎖時保持「鎖定」方向。

我在這裏採取了錯誤的做法還是我錯過了更基本的東西?

回答

0

我發現問題了!計算四元數時只是乘法的順序。它是:

this.deviceToPercieved.multiplyQuaternions(
    this.unlockedRot.clone().conjugate(), 
    this.lockedRot 
).normalize(); 

但它實際上應該是:

this.deviceToPercieved.multiplyQuaternions(
    this.lockedRot, 
    this.unlockedRot.clone().conjugate() 
); 

通知乘法的順序變化和normalized()呼叫的下降。

它現在正常工作!

相關問題