T BSK03 Teknik för avancerade Datorspel Jens Ogniewski Information Coding Group Linköpings universitet
Representation av rotation Eulervinklar Rotation kring axlarna (t.ex. Zyx) A' = R yaw R pitch R roll A Intuitivt, fast svårt att göra Interpolation av rotation nontrivialt, problem med nonlinearbeteende Problem med gimbal lock kan förekomma 1/18
Representation av rotation Gimbal lock 2/18
Representation av rotation Andra möjligheter Orthonormal matris enkelt att kombinerar olika operationer (rotation, translation mm) Separat rotationsmatris och vinkel 3-komponent vektor (nästan som kvaternion) längd=vinkel Men hur gör man interpolation? 28/33 3/18
Kvaternioner Upphittat av Sir William Rowan Hamilton Letade efter tredimensionella komplexa tal Bortglömt, men comeback på senare 1900-tal Används för rotationen inom (rymd)flyget, robotik mm 28/33 4/18
Kvaternioner Definition: Kvaternion q = w + xi + yj + zk, med w,x,y,z reela tal Alternativ: q = (w,n) med n tredimensionell vektor (w reel, n imaginär delen) Kan ochså betraktas som en rotation med vinkel v om en valfri axel n q=(cos(v/2),sin(v/2)n) 5/18
Rotation med kvaternioner q = (cos(v/2),sin(v/2)n): q reprensenterat som rotation med vinkel v om axel n Vektor r: Skapa Kvaternion p = (0,r) Kan nu roteras meddels: p' = q p q* Kan enkelt kombinera rotationer 6/18
Räkna med kvaternioner Flerdimensionell generalisering av komplexa tal i² = j² = k² = ijk = -1 Flesta operationer funker som vanligt, fast ingen kommunitativitet på multiplikation qp pq 7/18
Räkna med kvaternioner Multiplikation med imaginärdelen 1 i j k 1 1 i j k i i -1 k -j j j -k -1 i k k j -i -1 8/18
Räkna med kvaternioner Multiplikation av två kvanterjoner: (w 1 + x 1 i + y 1 j + z 1 k)(w 2 + x 2 i + y 2 j + z 2 k) = w 1 w 2 1 x 2 1 y 2 1 z 2 + (w 1 x 2 + x 1 w 2 + y 1 z 2 1 y 2 )i + (w 1 y 2 1 z 2 + y 1 w 2 + z 1 x 2 )j + (w 1 z 2 + x 1 y 2 1 x 2 + z 1 w 2 )k 9/18
Räkna med kvaternioner Konjugat q*: q=(w,n), q*=(w,-n) = (w, - xi, - yj, - zk) Magnitude: q ² = qq* = q*q = w² + n ² = w² + x² + y² + z² Kvadratrot från magnitude = norm Enhetskvaternion: kvaternion med norm=1 Inverse: Erhålles genom att dela kvaternion med norm 10/18
Räkna med kvaternioner Som matris: Kvaternioner kan konverteras till matris genom: alt.: 11/18
Räkna med kvaternioner Men hur kommer vi från rotationsmatris till kvaternion? Tredimensionell matris: Matrisspår: T = a + e + m + 1 12/18
Räkna med kvaternioner Men hur kommer vi från rotationsmatris till kvaternion? Om T 0: w = = Men: problem om T är nästan noll (t.ex. rotationer om 180 0 ) 13/18
Räkna med kvaternioner Möjlig lösning: w = sqrt( max( 0, 1 + a + e + m) ) / 2 x = sqrt( max( 0, 1 + a - e - m) ) / 2 y = sqrt( max( 0, 1 - a + e - m) ) / 2 z = sqrt( max( 0, 1 - a - e + m) ) / 2 Teckenkorrektur x = copysign( x, h - f ) y = copysign( y, c - g ) z = copysign( z, d - b ) med copysign(a, b) = a sign(a) sign(b) 14/18
Räkna med kvaternioner Exponentialfunktioner: Vi definerar för q = (cos(v/2), sin(v/2)n): q t = (cos(tv/2),sin(tv/2)n) Dessutom för q= (w,tn): exp(q) = e w (cos(t), sin(t)n) <=> q = R exp((0,n)t), med n = 1, R=1 för enhetskvaternion log(q) = (log(r), nt) <=> q t = exp(t log(q)) 15/18
Interpolation med kvaternioner: Slerp Spherical linear interpolation q = (q 2 q 1-1 ) t q 1 = q 1 (q 1-1 q 2 ) t = q 2 (q 2-1 q 1 ) 1-t = (q 1 q 2-1 ) 1-t q 2 slerp(t, q 1, q 2 ) = (q 2 q 1-1 ) t q 1 (med q1,q2 valfri kvaternioner, t interpolationssteg som är en reel tal mellan 0 t.o.m. 1) Interpolera med konstant hastighet 16/18
Interpolation med kvaternioner: Slerp Problem: Vid interpolation mellan flera kvaternioner med slerp blir det diskontinuitet i hastigheten när vi byter från ett kvaternionpar till nästa Samma problem om interpolation mellan punktpar 17/18
Interpolation med kvaternioner: Squad Lösning (liknar Bézier el. Hermite splines): Definerar: squad(t,a,p,q,b) = slerp(2t(1-t), slerp(t,a,b), slerp(t,p,q)), med a,b,q,b kvaternioner, t interpolationssteg för att få kontinuitet vid interpolation: q i = a i exp(-(log(a i+1 a i -1 ) + log(a i-1 a i -1 ))/4) och interpolera med squad(t, a i, q i, q i+1, a i+1 ) 18/18
Questions?
Länkar Wikipedia: http://en.wikipedia.org/wiki/quaternions_and_spatial_rotation Bok om matematik inom datorgrafik: http://books.google.com/books?id=bfcleqrusm8c&lpg=pa8 6&ots=FpUpf6p_hw&dq=quaternions%20in%20computer%20 graphics&pg=pa88#v=onepage&q=quaternions%20in%20co mputer%20graphics&f=false Slerp paper: http://portal.acm.org/citation.cfm?doid=325334.325242
Tack så mycket! www.icg.isy.liu.se