2017-02-26 4 views
1

startOrientationendOrientationのデルタ四元数を計算しようとしています。このfiddleは私の問題を示しています。デルタクォータニオンを3jで計算する

まず、デルタクォータニオンを計算してからと乗算してstartOrientationを得るが、それは機能しない。キューブの回転は常に間違っています。

行37のコメントを外して、キューブの正しい回転を確認します。どのようにデルタを計算するための任意のアイデア?

+0

です。 –

+0

試して解決します。 –

答えて

1

あなたが(見たいと思っている)ものを調べてみましょう。あなたは

gyro = start^(-1)*end 

で始まり、その後、あなたが見ることができるように、この製品は、これまで希望start四元ているからである

scene = end*gyro = end*start^(-1)*end 

にシーンの回転を設定します。あなたは、gyroのあなたの現在の計算における為替endstartある

gyro = end^(-1)*start 

を計算する必要があるだろう

start == scene = end*gyro 

という期待から。


また(結果は当然.clone()を除いて、四元数である場合、それらすべてである)、自己修正する四元法のどの探ります。

'.inverse()method equal to .conjugate()さらににおいてgyroTrackingDelta導入奇妙な副作用と基準を共有次いでendOrientation

var gyroTrackingDelta=endOrientation.inverse(); 

第反転ように。)(正規化 `そのクラスに該当計算。望ましくない自己改変を避けるべきであるワーキングバリアントは、

var gyroTrackingDelta=endOrientation.clone().inverse(); 
gyroTrackingDelta.multiply(startOrientation); 

scene.quaternion.copy(endOrientation).multiply(gyroTrackingDelta); 
+0

ありがとう!それは魅力のように機能します! – Nikolaus

-1

THREE.Quaternion.slerpを使用する必要がありますか?

+0

これはコメントです –

関連する問題