2017-09-27 1 views
0

私はデバイスの向き制御を使用していますが、私は難しかったいくつかの追加機能が必要です。Three.js:異なるベース方向のDeviceOrientationControlsを使用する

ユーザーがカメラを「ロック」できるようにして、カメラの向きが変わらないようにしたい。ロックを解除すると、ビューをロックした場所からカメラを回転させるようにします。ビューがロックされている間に電話機の向きが変わっても、カメラが別の向きに「ジャンプ」しないようにしたい。

ここDeviceOrientaionControls.jsの修正版のためのコードです:https://gist.github.com/BruOp/a3fb2f0854357eb1182671cafd3fae89

重要な部分はupdatedisconnectreconnectです。

私は、ユーザが「ロック」したときに見える方向(「lockedRot」と呼ぶ)を取ってから、「ロックされていない」(unlockedRot)デバイスの向きをとっています。

deviceToPercieved * unlockedRot = lockedRot

しかし、それは本当に働いていない:私はその後deviceToPercievedような四元数を見つけます。場合によっては、カメラがロックされていないときに少しだけジャンプすることもありますが、ロック解除時には完全にロックされた向きを維持できない場合もあります。

私はここで間違ったアプローチをとっているのですか、もっと基本的なものを見逃していますか?

答えて

0

問題が見つかりました。これは、deviceToPerceived四元数を計算するときの乗算の順序に過ぎません。

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

しかし、それは実際にする必要があります:それはだった

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

は、乗算の順序とnormalized()コールの落下の変化に注目してください。

今すぐ正しく動作します!

関連する問題