Pokúšam sa vypočítať jednotkový vektor, ktorý ukazuje na moju kameru s otvoreným okom. Ako by som vzhľadom na rotačný kvartér (w, x, y, z) vypočítal rotáciu jednotkového vektora okolo tohto kvartéru?
V tomto prípade môže byť jednotkový vektor obmedzený na (0,0, -1).
EDIT: Konečné riešenie
Pre rotáciu (0,0,1):
vec.x=2*x*z - 2*y*w;
vec.y=2*y*z + 2*x*w;
vec.z=1 - 2*x*x - 2*y*y;
Všimnite si, že matica musí byť transponovaná pre použitie s OpenGL.
odpovede:
3 pre odpoveď č. 1Skonvertujte kvartér na rotačnú maticu 3x3 a použite túto rotáciu na váš vektor.
Pre jednotku (w, x, y, z)
quaternion, táto matica je:
( 1 - 2 * ( y * y + z * z ) 2 * ( x * y - z * w ) 2 * (x * z + y * w ) )
R = ( 2 * ( x * y + z * w ) 1 - 2 * ( x * x + z * z ) 2 * (y * z - x * w ) )
( 2 * ( x * z - y * w ) 2 * ( y * z + x * w ) 1 - 2 * (x * x + y * y ) )
Ak má váš vektor takú jednoduchú formu, ako je (0, 0, -1)
, nebudete musieť počítať všetkých 9 koeficientov rotačnej matice, pretože výsledok násobenia maticových vektorov používa iba niektoré z koeficientov (posledný stĺpec R
).