Snažím sa vypočítať delta kvartér startOrientation
a endOrientation
, toto husle ukazuje môj problém.
Najprv vypočítam delta kvartér a potom ho vynásobím endOrientation
získať startOrientation
ale nefunguje to. Rotácia kocky je vždy nesprávna.
Uvoľnite čiaru 37, aby ste videli správnu rotáciu kocky. Nejaké nápady, ako vypočítať deltu?
odpovede:
2 pre odpoveď č. 1Pozrime sa, čo počúvate (zdanlivo). Začnete s
gyro = start^(-1)*end
a potom nastavte otočenie scény na
scene = end*gyro = end*start^(-1)*end
Ako vidíte, tento produkt ani zďaleka nie je požadovaný start
štvorica. Z očakávania, že
start == scene = end*gyro
budete musieť počítať
gyro = end^(-1)*start
to znamená výmena end
a start
vo vašom aktuálnom výpočte gyro
.
Preskúmajte tiež, ktoré z metód kvaternionu sa upravujú samy (všetky sú, ak je výsledkom kvaternión, s výnimkou .clone()
prirodzene).
The ´.verver ()method equal to
.conjugate (). normalize () `spadá do tejto triedy, takže
var gyroTrackingDelta=endOrientation.inverse();
prvé inverzie endOrientation
a potom zdieľa odkaz s gyroTrackingDelta
zavedenie ďalších vedľajších účinkov do ďalšieho výpočtu. Pracovný variant, ktorý by sa mal vyhnúť nežiadúcej samo-úprave, je
var gyroTrackingDelta=endOrientation.clone().inverse();
gyroTrackingDelta.multiply(startOrientation);
scene.quaternion.copy(endOrientation).multiply(gyroTrackingDelta);
-1 pre odpoveď č. 2
Potrebujete použiť THREE.Quaternion.slerp?