TBSK03 Teknik för avancerade Datorspel - computer

TBSK03
Teknik för avancerade
Datorspel
Representation av rotation

Eulervinklar

Rotation kring axlarna (t.ex. Zyx)
A' = Ryaw Rpitch Rroll A
1/17
Representation av rotation

Eulervinklar

Rotation kring axlarna (t.ex. Zyx)
A' = Ryaw Rpitch Rroll A

Intuitivt, fast svårt att göra
1/17
Representation av rotation

Eulervinklar

Rotation kring axlarna (t.ex. Zyx)
A' = Ryaw Rpitch Rroll A

Intuitivt, fast svårt att göra

Interpolation av rotation nontrivialt, problem med nonlinearbeteende
1/17
Representation av rotation

Eulervinklar

Rotation kring axlarna (t.ex. Zyx)
A' = Ryaw Rpitch Rroll A

Intuitivt, fast svårt att göra

Interpolation av rotation nontrivialt, problem med nonlinearbeteende

Problem med gimbal lock kan förekomma
1/17
Representation av rotation

Gimbal lock
2/17
Representation av rotation

Gimbal lock
2/17
Representation av rotation

Gimbal lock
2/17
Representation av rotation

Andra möjligheter



Orthonormal matris
enkelt att kombinerar olika operationer (rotation, translation
mm)
Separat rotationsaxel och vinkel
3-komponent vektor (nästan som quaternion)
längd=vinkel
3/17
Representation av rotation

Andra möjligheter




Orthonormal matris
enkelt att kombinerar olika operationer (rotation, translation
mm)
Separat rotationsaxel och vinkel
3-komponent vektor (nästan som quaternion)
längd=vinkel
Men hur gör man interpolation?
3/17
Kvarternioner

Upphittat av Sir William Rowan Hamilton

Letade efter tredimensionella komplexa tal
4/17
Kvarternioner

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
4/17
Kvarternioner

5/17
Definition: Kvaternion q = w + xi + yj + zk, med w,x,y,z
reela tal
Kvarternioner
5/17

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)
Kvarternioner
5/17

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)
q reprensenterat som rotation med vinkel v om axel n
Rotation med kvarternioner

Vektor r:


Skapa Kvaternion p = (0,r)
Kan nu roteras meddels:
p' = q · p · q*
6/17
Rotation med kvarternioner

Vektor r:



Skapa Kvaternion p = (0,r)
Kan nu roteras meddels:
p' = q · p · q*
Kan enkelt kombinera rotationer
6/17
Räkna med kvarternioner

Flerdimensionell generalisering av komplexa tal

i² = j² = k² = ijk = -1
7/17
Räkna med kvarternioner

Flerdimensionell generalisering av komplexa tal


i² = j² = k² = ijk = -1
Flesta operationer funker som vanligt, fast ingen
kommunitativitet på multiplikation
qp pq
7/17
Räkna med kvarternioner

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/17
Räkna med kvarternioner

Multiplikation av två kvanterjoner:
(w1 + x1i + y1j + z1k)(w2 + x2i + y2j + z2k) =
w1w2 − x1x2 − y1y2 − z1z2
+ (w1x2 + x1w2 + y1z2 − z1y2)i
+ (w1y2 − x1z2 + y1w2 + z1x2)j
+ (w1z2 + x1y2 − y1x2 + z1w2)k
9/17
Räkna med kvarternioner

Konjugat q*:
q=(w,n), q*=(w,-n) = (w, - xi, - yj, - zk)
10/17
Räkna med kvarternioner

Konjugat q*:
q=(w,n), q*=(w,-n) = (w, - xi, - yj, - zk)

Magnitude:
|q|² = qq* = q*q = w² + |n|² = w² + x² + y² + z²
10/17
Räkna med kvarternioner

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
10/17
Räkna med kvarternioner

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

Enhetskvaternjon: kvaternion med norm=1

Erhålles genom att dela kvaternion med norm
10/17
Räkna med kvarternioner

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

Enhetskvaternjon: kvaternion med norm=1


Erhålles genom att dela kvaternion med norm
Inverse:
10/17
Räkna med kvarternioner

Som matris:

Kvaternioner kan konverteras till matris genom:
alt.:
11/17
Räkna med kvarternioner

12/17
Men hur kommer vi från rotationsrepresentation till matris?
Om T
w=
0:
=
Räkna med kvarternioner

Men hur kommer vi från rotationsrepresentation till matris?
Om T
w=

12/17
0:
=
Men: problem om T är nästan noll (t.ex. rotationer om
1800)
Räkna med kvarternioner

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
13/17
Räkna med kvarternioner

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)
13/17
Räkna med kvarternioner

Exponentialfunktioner:
Vi definerar för q = (cos(v/2), sin(v/2)n):
qt = (cos(tv/2),sin(tv/2)n)
14/17
Räkna med kvarternioner

Exponentialfunktioner:
Vi definerar för q = (cos(v/2), sin(v/2)n):
qt = (cos(tv/2),sin(tv/2)n)
Dessutom för q= (w,tn):
exp(q) = ew(cos(t), sin(t)n)
<=> q = R exp((0,n)t), med |n| = 1, R=1 för enhetskvarternion
14/17
Räkna med kvarternioner

Exponentialfunktioner:
Vi definerar för q = (cos(v/2), sin(v/2)n):
qt = (cos(tv/2),sin(tv/2)n)
Dessutom för q= (w,tn):
exp(q) = ew(cos(t), sin(t)n)
<=> q = R exp((0,n)t), med |n| = 1, R=1 för enhetskvarternion
log(q) = (log(R), nt)
<=> qt = exp(t log(q))
14/17
Interpolation m. kvarternioner: Slerp

Spherical linear interpolation

slerp(t, q1, q2) = (q2 q1-1)t q1
15/17
(med q1,q2 valfri kvarternioner, t interpolationssteg som är en reel
tal mellan 0 t.o.m. 1)
Interpolation m. kvarternioner: Slerp

Spherical linear interpolation

slerp(t, q1, q2) = (q2 q1-1)t q1
15/17
(med q1,q2 valfri kvarternioner, t interpolationssteg som är en reel
tal mellan 0 t.o.m. 1)

q = (q2q1-1)t q1 = q1(q1-1q2)t = q2(q2-1q1)1-t = (q1q2-1)1-t q2
Interpolation m. kvarternioner: Slerp

Spherical linear interpolation

slerp(t, q1, q2) = (q2 q1-1)t q1
15/17
(med q1,q2 valfri kvarternioner, t interpolationssteg som är en reel
tal mellan 0 t.o.m. 1)

q = (q2q1-1)t q1 = q1(q1-1q2)t = q2(q2-1q1)1-t = (q1q2-1)1-t q2

Interpolera med konstant hastighet
Interpolation m. kvarternioner: 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
16/17
Interpolation m. kvarternioner: 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
16/17
Interpolation m. kvarternioner: 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 kvarternioner, t interpolationssteg
17/17
Interpolation m. kvarternioner: 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 kvarternioner, t interpolationssteg
för att få kontinuitet vid interpolation:
qi = aiexp(-(log(ai+1ai-1) + log(ai-1ai-1))/4)
och interpolera med
squad(t, ai, qi, qi+1, ai+1)
17/17
Frågor?
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=PA86&ots=FpUpf6p_hw&dq=quat
ernions%20in%20computer
%20graphics&pg=PA88#v=onepage&q=quaternions%20in
%20computer%20graphics&f=false
Slerp paper:
http://dl.acm.org/citation.cfm?doid=325334.325242