ramar, matriser, kvaternioner perspektiv...x y z Rotation i 3D Man kan visa att vilken orientering (3D-rotation) som helst kan beskrivas som en (1 st) rotation kring en vektor. Rotationsmatriserna
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Kursboken (Angel), kap.5 Ingrid Carlbom & Joseph Paciorek: Planar Geometric Projections and Viewing Transformations, Computing Surveys 10(4), Dec 1978, pp.465-492 (hela -502) (i kursbunten)
Matematiska byggstenar
• Skalär (storhet) u • Punkt (position) P • Vektor (längd och riktning) v • Transformationsmatris (4x4) M • Kvaternion (3D-rotation) q
Skalär- och kryssprodukt
u
v
|v|
u ⋅ v θ u ⋅ v = (uxvx+ uyvy,+uzvz) = |u||v| cos θ Skalärprodukten är 0 omm faktorerna är ortogonala (vinkelräta)
u × v = (uyvz – uzvy, uzvx – uxvz, uxvy – uyvx) Kryssprodukten (en vektor) är ortogonal mot bägge faktorerna
u
v
u × v
Två av de vanligaste vektoroperationerna i datorgrafik
Basvektorer
Givet 3 st 3-dimensionella basvektorer v1, v2, v3 som alla är vinkelräta mot varandra kan vi skriva vektorn w som
v1
v2
v3
w α1v1
α3v3
α2v2
α1v1 + α2v2 w = + α3v3 = aT v1 v2 v3
där
aT = α1 α2 α3
Ramar (frames) Vi definierar en ram som (v1, v2, v3, P0 )
där P0 kallas ramens origo. För punkter i denna ram gäller:
v1
v2
v3
P η1v1
η3v3
η2v2
P0
+ η1v1 P = P0 + η2v2 + η3v3 = pT
där
pT = η1 η2 η3 1
v1 v2 v3 P0
(4D homogena koordinater, jfr 3D homogena för punkter i planet)
Ramar (frames) En riktningsvektor w i denna ram skrivs
v1 v2 v3 P0
w = aT
där
aT = α1 α2 α3 0
Riktningsvektorer definieras alltså oberoende av origo.
Exemplet Tag nu punkten a = (1 1 0 1)T i den första ramen (”världen”). Vilken är dess motsvarighet i den andra ramen (lokal)?
b = 1.4 0.2 -0.5 1 T
b = (MT)-1a
ger oss
= a
0.6 0.8 0 0 0.8 -0.6 0 0 0 0 1 -0.5 0 0 0 1 P0
v3
v1
v2
Q0
u3
u1
u2
• 1.4
0.2 1
1
0 rel P0, -0.5 rel Q0
Åt andra hållet: p = (1.4 0.2 -0.5 1)T i ram 2. I ram 1 blir den pvärlden = MTp = (1 1 0 1 )T
Fixram och transformationsram Ofta jobbar man med en "fixram" (t.ex. kameran/utsiktspunkten)
och en "transformationsram". Fixramen är fast och transformationsramen tillåts variera.
Exempel:
1 0 0 0 0 1 0 0 0 0 1 -d 0 0 0 1
α1 α2 α3 1
=
α1 α2 α3 - d 1
Punkt i transf.- ramen
Motsv. punkt i
fixramen
Fixram
Transforma- tionsram
Våra koordinater
MT
d
3D-transformationsmatriser(jfr 2D)
=
=
=
=
=
11000000000000
11'''
11000100010001
111'''
zyx
ss
s
zyx
zyx
zyx
ttt
zyx
zyx
zyx
z
y
x
z
y
x
T
S
TMTranslation
Skalning
3D-rotationsmatriser (tre, en i 2D)
€
x 'y 'z'1
=Rz (θ)
xyz1
=
cosθ −sinθ 0 0sinθ cosθ 0 00 0 1 00 0 0 1
xyz1
x 'y 'z'1
=Rx (θ)
xyz1
=
1 0 0 00 cosθ −sinθ 00 sinθ cosθ 00 0 0 1
xyz1
x 'y 'z'1
=Ry (θ)
xyz1
=
cosθ 0 sinθ 00 1 0 0
−sinθ 0 cosθ 00 0 0 1
xyz1
Rotation kring z-axeln
Rotation kring x-axeln
Rotation kring y-axeln
Multipla transformationer (som 2D) Vi kan sätta samman transformationer genom att
multiplicera matriserna:
1 0 0 0 0 s 0 0 0 0 1 -d 0 0 0 1
α1 α2 α3 1
=
α1 sα2 α3 - d 1
TS
1 0 0 0 0 1 0 0 0 0 1 -d 0 0 0 1
1 0 0 0 0 s 0 0 0 0 1 0 0 0 0 1
1 0 0 0 0 s 0 0 0 0 1 -d 0 0 0 1
=
T S TS
Multipla transformationer
1 0 0 0 0 1 0 0 0 0 1 -d 0 0 0 1
1 0 0 0 0 1 0 0 0 0 s 0 0 0 0 1
1 0 0 0 0 1 0 0 0 0 s -d 0 0 0 1
=
T S TS
Observera att ordningen på multiplikationen kan spela roll!
1 0 0 0 0 1 0 0 0 0 1 -d 0 0 0 1
1 0 0 0 0 1 0 0 0 0 s 0 0 0 0 1
1 0 0 0 0 1 0 0 0 0 s -sd 0 0 0 1
=
T S ST
Att specificera orientering (rotationer)
• Vi börjar med att pröva yaw-pitch-roll (gir-stig-roll).
• Antag att flygplanet är modellerat så det initialt "pekar" längs z-axeln.
• Vi roterar först kring z-axeln (roll), sedan kring y-axeln (yaw), sist kring x-axeln (pitch).
• Kallas för att arbeta med Euler angles eller Eulermatriser.
x y
z
Rotation i 3D
Man kan visa att vilken orientering (3D-rotation) som helst kan beskrivas som
en (1 st) rotation kring en vektor.
Rotationsmatriserna (kring x-, y- och z-axlarna) kan sättas ihop till en transformation utgående från rotationsvektorn
och rotationsvinkeln
v
Allmän 3D-rotation - Angel 4.9.4 Om rotationsenhetsvektorn är a = (ax, ay, az) och rotationsvinkeln runt denna vektor är θ roterar man först kring x-axeln till y-planet (x=0) med vinkeln θx= arctan(ay/az); d=√ay2+az2, cos(θx)=az/d, sin(θx)=ay/d, sedan kring y-axeln till z-planet med vinkeln θy= -arcsin(ax); cos(θy)=d, sin(θy)=-ax, sedan kring z-axeln med vinkeln θz= θ sedan tillbaka kring y-axeln med vinkeln -θy sedan tillbaka kring x-axeln med vinkeln -θx Alltså blir totala transformationsmatrisen: Rx(-θx) Ry(-θy) Rz(θ) Ry(θy) Rx(θx)
Kvaternioner, Angel 4.12 En matematisk struktur som kan beskriva 3D-rotation kring en godtycklig vektor är kvaternioner (quaternions), uppfunna 1843 av irländske matematikern W.R. Hamilton.
Detta motsvarar komplexa talens (Euler mfl, 1700-talet), i2=-1, användning för att beskriva 2D-rotationer i planet: z = x + iy = r (cos µ + isin µ) Rotation vinkeln θ genom multiplikation med p = cos θ + isin θ p*z = r (cos(µ + θ) + i sin(µ + θ))
Kvaternioner - algebra Lite kvaternionalgebra: tag två kvaternioner a och b:
a = (q0, q1, q2, q3) = (q0, q) b = (p0, p1, p2, p3) = (p0, p)
Norm och invers:
|a|2 = q02 + q ⋅ q = q0
2 +q12 +q2
2 +q32
a-1 = (1 / |a|2)(q0, -q)
Addition och multiplikation:
a + b = (p0 + q0, p + q) ab = (p0q0 – p ⋅ q, q0p + p0q + q × p)
Kvaternioner - för 3D-rotation
Tag en punkt P i 3D. Skapa kvaternionen
p = (0, P) = xi + yj + zk
Välj rotationsaxeln v normerad (enhetsvektor) Låt rotationsvinkeln vara θ.
v
θ
Skapa nu kvaternionen r enligt r = (cos(θ/2), sin(θ/2)v)
|r|2 = 1 r-1 = (cos(θ/2), -sin(θ/2)v)
P
Genom lite råräknande visar man att p' = rpr-1
ger samma resultat som sammansatta rotationsmatriserna för att rotera punkten P θ radianer kring vektorn v.
Om a och b är kvaternioner som representerar rotation enl. ovan gäller också (analogt med komplexa talen för 2D-
rotationer) att q = ab
är resultatet av att kombinera rotationerna(först a, sedan b).
Kvaternioner - för 3D-rotation
OBS! Angel (både fjärde och femte upplagan) har ett fel i formeln för p' = r p r-1, ska vara sin2 i sista termenp' =cos2(θ/2)p + sin2(θ/2)(p•v)v + 2 sin(θ/2) cos(θ/2)(v x p) - sin2(θ/2) (v x p) x v
Rotationsexempel, matriser Rotation 120 grader runt vektorn (1 1 1)/√3 d = √(2/3) cos θx = az / d = 1/√2, sin θx = 1/ √2 cos θy = d = √(2/3), sin θy = -az = - 1/√3 θz = θ = π/3 Rx = ((1 0 0 0)(0 1/√2 -1/√2 0)(0 1/√2 1/√2 0)(0 0 0 1)) Ry = ((√(2/3) 0 -1/√3 0)(0 1 0 0)(1/√3 0 √(2/3) 0)(0 0 0 1)) Rz = ((-1/2 -√3/2 0 0)(√3/2 -1/2 0 0)(0 0 1 0)(0 0 0 1)) M = Rx(-) Ry(-) Rz() Ry(+) Rx(+) = ((0 1 0 0 )(0 0 1 0)(1 0 0 0)(0 0 0 1)) M (x y z 1) = (y z x 1)
Rotationsexemplet, kvaternioner
Kvaternioner r = cos(θ /2) + (i sin(θ /2) + j sin(θ /2) + k sin(θ /2))/√3 =
1/2 (1 + i + j + k) p = i x + j y + k z r-1= 1/2 (1 - i - j - k) p r-1 = 1/2 (x + y + z) + 1/2 i (x - y + z) + 1/2 j (x + y - z) +
1/2 k (-x + y + z) r p r-1= 0 + i y + j z + k x = (y, z, x) Stämmer! Övning: Använd formeln för att räkna ut samma sak.
Kvaternioner
• Det går alltså att konvertera en kvaternion till en rotationsmatris (och tvärtom)
• Det kan löna sig att lagra orienteringar som kvaternioner: 4 flyttal istället för 3x3 = 9 (för en rotationsmatris)
• Kvaternioner gör det enkelt att interpolera mellan orienteringar (för animering)!
Projektioner - historia
Giotto (1276-1336) Rafael (1483-1520)
Projektioner - historia
Projektioner - historia
Brook Taylor, New Principles of Linear Perspective, 1719.
Projektioner Planar Geometric Projections
Parallell Perspective
1-pt 2-pt 3-pt Orthographic Oblique
Cavalier Cabinet Multiview Axonometric
Isometric Dimetric Trimetric
Alla projektionerna finns beskrivna med illustrativa figurer i Carlbom-Pacioreks artikel och i Angel 5.1.
Perspektivprojektion Projektor på ändligt avstånd. Storlek minskar med avstånd från projektionsytan. Avstånd och vinklar bevaras inte i projektionen. Parallella linjer konvergerar i ”fjärrpunkt” (vanishing point)
Här enpunkts (ett projektionsplan), finns också två- och tre-, se Carlbom-Paciorek
Perspektivprojektion, Angel 5.4
x
y
z
d
y
d z
P Pp
Antag att vi projicerar punkten P på ett bildplan som ligger d enheter från origo och är parallellt med x-y-planet:
Bildplan
Perspektivprojektion
y
d z
P Pp
P = x y z 1 T
z
yp d =
y z
yp = yd z =
y (z / d)
⇔
Likformiga trianglar:
Pp = x/(z/d) y/(z/d) d 1 T
Analogt för xp. Så den projicerade punkten blir:
Pp = xp yp d 1 T
y yp
Perspektivprojektion
Vi vill kunna skriva perspektivprojektionen som en matris M. För att kunna göra det måste vi införa en ”normeringsoperation”
P = x y z w T
med w skilt från 1 ser vi till att alltid dividera med w innan vi fortsätter, d.v.s.
P = x/w y/w z/w 1 T
Om resultatet av en transformation blir en punkt
Perspektiv-projektionsmatris
1 0 0 0 0 1 0 0 0 0 1 0 0 0 1/d 0
x y z 1
= x y z z/d
Eftersom z/d ≠ 1 dividerar vi alla komponenterna
med z/d innan vi använder punkten så att
vi får
x/(z/d) y/(z/d) d 1
Detta kallas perspektivdivision
i OpenGL.
MPp =
z
x
z
x
Ortografisk projektion Projektorerna är vinkelräta mot projektionsytan (på ”oändligt avstånd”).
I enklaste formen är det en eller flera vyer (multiview) med projektionsplan parallella till objektets huvudytor. Avstånd och vinklar bevaras i projektionerna. Typiskt exempel: maskinritningar
Axonometrisk ortografisk: Fortfarande vinkelräta projektorer men objektet vridet så att man ser flera ytor. projektionsplan symmetriskt till alla tre huvudytorna:isometrisk projektionsplan symmetriskt till två av huvudytorna: dimetrisk projektionsplan utan sådan symmetri: trimetrisk Parallellitet bevaras, inte vinklar & avstånd (samma förkortning)
Ortografisk-projektionsmatris
1 0 0 0 0 1 0 0 0 0 0 -d 0 0 0 1
x y z 1
= x y -d 1
MOp = Här är yp=y och xp=x och zp=-d så vi får
(i boken är d satt till 0)
Parametrisk form
Kurvor och ytor
Kubiska (grad 3)
Interpolerande Hermite Bezier B-Spline
Generell B-Spline
Polynom
Generella (grad d)
Uniform NURBS
Explicit form
Implicit form
Uppdelnings- procedur
Catmull-Clark Loop
Angel, kap.11
Representation av kurvor
x
y
1 0
1
0 x = u y = u
0 ≤ u ≤ 1
x = fx(u) y = fy(u)
umin ≤ u ≤ umax
y = f(x) y = x
f(x, y) = 0 x - y = 0
Explicit
Implicit
Para- metrisk
Generellt Exempel
I 3D, med z, lägg till: explicit: z = g(x); implicit: f(x, y,z) =0 & g(x, y,z) = 0; parameter z = fz(u)
Parametriska kurvor
Om vi deriverar uttrycket för kurvan
p(u) = fx(u) fy(u)
dp(u) du =
dfx(u) du
dfy(u) du
får vi en vektor som definierar kurvans tangent:
Exempel p(u) =
u u2
0 ≤ u ≤ 1
dp(u) du =
1 2u
I u = 0.5 får vi tangenten 1 1
Exempel
Parametriska polynomkurvor
p(u) =
cx0 + ucx1 + u2cx2 + ... + uncxn
0 ≤ u ≤ 1
fx(u) fy(u) fz(u)
=
Då p(u) är ett polynom i u kallas kurvan polynomkurva.
Polynomkurvor, visar det sig, har egenskaper som är intressanta för datorgrafik och CAD/CAM. Främst används tredjegrads- (kubiska) polynom.
Kubiska B-splinekurvor En nackdel med Hermitekurvor är att
C1-kontinuitet inte alltid räcker.
C2-kontinuitet (mellan kan åstadkommas genom att man släpper kravet att kurvan ska interpolera slutpunkterna på kurvan och ser till att andraderivatan blir lika för den spline som når en punkt från
ena hållet som för den spline som utgår åt andra hållet. pi-1 pi