/ / calcolo delta Quaternion con threejs: javascript, matematica, three.js, quaternioni

calcolo delta Quaternion con threejs - javascript, math, three.js, quaternions

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 № 1

Esaminiamo 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?