Sto provando a calcolare il delta quaternion di startOrientation
e il endOrientation
. Questo violino dimostra il mio problema.
Per prima cosa, calcolo il delta quaternion e poi viene moltiplicato per il endOrientation
prendere il startOrientation
ma non funziona. La rotazione del cubo è sempre errata.
Scollegare la linea 37 per vedere la corretta rotazione del cubo. Qualche idea su come calcolare il delta?
risposte:
2 per risposta № 1Esaminiamo ciò che (apparentemente vuoi) calcolare. Inizia con
gyro = start^(-1)*end
e quindi impostare la rotazione della scena su
scene = end*gyro = end*start^(-1)*end
Come puoi vedere, questo prodotto è lungi dall'essere il desiderato start
quaternione. Dall'aspettativa che
start == scene = end*gyro
dovresti calcolare
gyro = end^(-1)*start
cioè scambio end
e start
nel tuo calcolo attuale di gyro
.
Esplora anche quali dei metodi di quaternione si modificano da soli (lo sono tutti se il risultato è un quaternione, ad eccezione di .clone()
naturalmente).
The ´.inverse ()method equal to
.conjugate (). normalize () `rientra in quella classe in modo che
var gyroTrackingDelta=endOrientation.inverse();
i primi inverte endOrientation
e quindi condivide il riferimento con gyroTrackingDelta
introducendo strani effetti collaterali nell'ulteriore calcolo. Una variante funzionante che dovrebbe evitare automodifiche indesiderate è
var gyroTrackingDelta=endOrientation.clone().inverse();
gyroTrackingDelta.multiply(startOrientation);
scene.quaternion.copy(endOrientation).multiply(gyroTrackingDelta);
-1 per risposta № 2
Devi usare THREE.Quaternion.slerp?