3D-transformationer & Perspektiv · med 3D-grafik är att tänka s ig a tm nh revul kamera som...
Transcript of 3D-transformationer & Perspektiv · med 3D-grafik är att tänka s ig a tm nh revul kamera som...
1
3D-transformationer3D-transformationer& Perspektiv& Perspektiv
Lars Kjelldahl
Vissa bilder lånade avYngve Sundblad, Gustav Taxén
BakgrundBakgrund
•• Ett smidigt sätt att arbetaEtt smidigt sätt att arbetamed 3D-grafik med 3D-grafik är att tänkaär att tänkasig att sig att man man har har en en virtuellvirtuellkamera som kamera som ’’’’betraktarbetraktar’’’’ dedeföremål föremål man man vill ritavill rita..
•• Om vi Om vi simulerar hur ljussimulerar hur ljusfrån ljuskällor reflekterasfrån ljuskällor reflekterasav ytor och når kameranav ytor och når kamerankan kan vi vi få få en en bild som bild som iibästa bästa fall fall liknar ettliknar ettfotografifotografi..
BakgrundBakgrund
•• Vi Vi börjar börjar med med att ta reda på hur att ta reda på hur vi vi kankantransformera transformera 3D-föremål 3D-föremål och gå och gå ((projiceraprojicera))från tre dimensioner från tre dimensioner till till tvåtvå..
•• Vi tar hand Vi tar hand om ljusreflektion och skuggningom ljusreflektion och skuggningsenare senare i i kursenkursen!!
KursmaterialKursmaterial
•• 3D-transformationer:3D-transformationer:Kursboken Kursboken (Angel) (Angel) kapkap.4.4
•• ProjektionerProjektioner::Kursboken Kursboken (Angel), (Angel), kapkap.5.5En En kul och informativ artikelkul och informativ artikel: Ingrid : Ingrid Carlbom Carlbom & Joseph& JosephPaciorekPaciorek: P: Pllanar anar Geometric Projections Geometric Projections and and ViewingViewingTransformations, Transformations, Computing Surveys Computing Surveys 1010(4), Dec 1978,(4), Dec 1978,pppp.465-492 (hela -502).465-492 (hela -502)
Transformationer Transformationer i 3Di 3D
Transformation
Transformation
Projektion
Viewport-transformation
Matematiska byggstenarMatematiska byggstenar
•• Skalär Skalär ((storhetstorhet)) uu•• Punkt Punkt (position)(position) PP•• Vektor Vektor ((längd och riktninglängd och riktning)) vv
•• Kvaternion Kvaternion (3D-rotation)(3D-rotation)-orientering-orientering qq(vi (vi går går dock dock inte igenom kvarternioner härinte igenom kvarternioner här))
2
Skalär- och kryssproduktSkalär- och kryssprodukt
u
v
|v|
u ⋅ v θu ⋅ v = (uxvx+ uyvy,+uzvz) = |u||v| cos θSkalärprodukten är 0 omm faktorerna ärortogonala (vinkelräta)
u × v = (uyvz – uzvy, uzvx – uxvz, uxvy – uyvx)Kryssprodukten (en vektor) är ortogonal motbägge faktorerna
u
v
u × v
Två av de vanligaste vektoroperationerna i datorgrafik
Höger- och vänsterhänt koordinat-Höger- och vänsterhänt koordinat-systemsystem
x
y
z
OpenGL använder ett högerhänt koordinatsystem med
x-axeln till höger, y-axeln uppåt.z-axeln pekar utåt ur skärmen.
x
y
Direct 3D använder ett vänsterhänt koordinatsystem med
x-axeln till höger, y-axeln uppåt.z-axeln pekar in i skärmen.
I fortsättningen arbetar vi i högerhänta koordinatsystem.
z
BasvektorerBasvektorer
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 + α2v2w = + α3v3
BasvektorerBasvektorerVi inför ’’vektorer i vektorer’’ för att kunna skriva
w = α1v1 + α2v2 + α3v3
lite kortare som:
v1v2v3
w = aT
där
a = α1α2α3
aT = α1 α2 α3
3D-transformationsmatriser(3D-transformationsmatriser(jfr jfr 2D)2D)
!!!!
"
#
$$$$
%
&
!!!!
"
#
$$$$
%
&
=
!!!!
"
#
$$$$
%
&
=
!!!!
"
#
$$$$
%
&
!!!!
"
#
$$$$
%
&
!!!!
"
#
$$$$
%
&
=
!!!!
"
#
$$$$
%
&
=
!!!!
"
#
$$$$
%
&
=
!!!!
"
#
$$$$
%
&
11000
000
000
000
11
'
'
'
11000
100
010
001
111
'
'
'
z
y
x
s
s
s
z
y
x
z
y
x
z
y
x
t
t
t
z
y
x
z
y
x
z
y
x
z
y
x
z
y
x
T
S
TMTranslation
Skalning
3D-rotationsmatriser (3D-rotationsmatriser (tretre, en i 2D), en i 2D)
!
x '
y '
z'
1
"
#
$ $ $ $
%
&
' ' ' '
=Rz (()
x
y
z
1
"
#
$ $ $ $
%
&
' ' ' '
=
cos( )sin( 0 0
sin( cos( 0 0
0 0 1 0
0 0 0 1
"
#
$ $ $ $
%
&
' ' ' '
x
y
z
1
"
#
$ $ $ $
%
&
' ' ' '
x '
y '
z'
1
"
#
$ $ $ $
%
&
' ' ' '
=Rx (()
x
y
z
1
"
#
$ $ $ $
%
&
' ' ' '
=
1 0 0 0
0 cos( )sin( 0
0 sin( cos( 0
0 0 0 1
"
#
$ $ $ $
%
&
' ' ' '
x
y
z
1
"
#
$ $ $ $
%
&
' ' ' '
x '
y '
z'
1
"
#
$ $ $ $
%
&
' ' ' '
=Ry (()
x
y
z
1
"
#
$ $ $ $
%
&
' ' ' '
=
cos( 0 sin( 0
0 1 0 0
)sin( 0 cos( 0
0 0 0 1
"
#
$ $ $ $
%
&
' ' ' '
x
y
z
1
"
#
$ $ $ $
%
&
' ' ' '
Rotation kring z-axeln
Rotation kring x-axeln
Rotation kring y-axeln
3
Multipla transformationer Multipla transformationer ((som som 2D)2D)Vi kan sätta samman transformationer genom att
multiplicera matriserna:
1 0 0 00 s 0 00 0 1 -d0 0 0 1
α1α2α31
=
α1 sα2α3 - d 1
TS
1 0 0 00 1 0 00 0 1 -d0 0 0 1
1 0 0 00 s 0 00 0 1 00 0 0 1
1 0 0 00 s 0 00 0 1 -d0 0 0 1
=
T S TS
Multipla transformationerMultipla transformationer
1 0 0 00 1 0 00 0 1 -d0 0 0 1
1 0 0 00 1 0 00 0 s 00 0 0 1
1 0 0 00 1 0 00 0 s -d0 0 0 1
=
T S TS
Observera att ordningen på multiplikationen kan spela roll!
1 0 0 00 1 0 00 0 1 -d0 0 0 1
1 0 0 00 1 0 00 0 s 00 0 0 1
1 0 0 00 1 0 00 0 s -sd0 0 0 1
=
TS ST
Att specificera orienteringAtt specificera orientering((rotationerrotationer))•• Vi Vi börjar börjar med med att prövaatt pröva
yaw-pitch-roll (yaw-pitch-roll (gir-stig-rollgir-stig-roll).).•• Antag att flygplanet ärAntag att flygplanet är
modellerat så det initialtmodellerat så det initialt"pekar" längs "pekar" längs zz-axeln-axeln..
•• Vi Vi roterar först kringroterar först kringzz-axeln -axeln (roll), sedan (roll), sedan kringkringyy-axeln -axeln (yaw), (yaw), sist kringsist kringxx-axeln -axeln (pitch).(pitch).
•• Kallas för att arbeta Kallas för att arbeta med med EulerEulerangles angles eller eller EulermatriserEulermatriser..
xy
z
Gimbal Gimbal locklock
•• Om vi Om vi roterar roterar en en av axlarna så av axlarna så dendensammanfaller sammanfaller med en med en av av de de andra kan andra kan vivihamna hamna i i ett läge där ett läge där vi vi tappar tappar information!information!
•• Situationen kallas för Situationen kallas för Gimbal Gimbal locklock..•• Beror på att rotationerna alltid görs Beror på att rotationerna alltid görs i i sammasamma
ordningordning..
Rotation i 3DRotation 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 Allmän 3D-rotation - Angel 4.9.43D-rotation - Angel 4.9.4Om 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 -θysedan tillbaka kring x-axeln med vinkeln -θxAlltså blir totala transformationsmatrisen:Rx(-θx) Ry(-θy) Rz(θ) Ry(θy) Rx(θx)
4
KvaternionerKvaternioner, Angel 4.12, Angel 4.12En matematisk struktur som kan beskriva 3D-rotation kringen 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 medp = cos θ + isin θp*z = r (cos(µ + θ) + i sin(µ + θ))
Kvaternioner Kvaternioner ((quaternionsquaternions))
q = (q0, q1, q2, q3) = (q0, q)q = q1i + q2j + q3k,
där (jfr komplexa tal)i2 = j2 = k2 = -1ij=k, jk=i, ki=j
ji=-k, kj=-i, ik=-j
En kvaternion q definieras så här:
Projektioner Projektioner - - historiahistoriaProjektionsritningarProjektionsritningar::Arkitekten Vitruvius Arkitekten Vitruvius i Rom, i Rom, år år 14 14 fKrfKrPerspektivPerspektiv::känt av grekerkänt av greker, , formaliserat först (centralperspektiv)formaliserat först (centralperspektiv)under under renässansenrenässansen, , av arkitekter och målareav arkitekter och målare::
Giotto Giotto (1276-1336) Rafael (1483-1520)(1276-1336) Rafael (1483-1520)
Projektioner Projektioner - - historiahistoriaBrunelleschi (1377-1446): Duomo di Firenze mm,Brunelleschi (1377-1446): Duomo di Firenze mm,Leonardo da Vinci (1452-1519): Nattvarden mm,Leonardo da Vinci (1452-1519): Nattvarden mm,Dürer (1471-1528):Dürer (1471-1528):
Projektioner Projektioner - - historiahistoria
Brook Taylor, New Principles of Linear Perspective, 1719.
ProjektionerProjektionerPlanar Geometric Projections
Parallell Perspective
1-pt 2-pt 3-ptOrthographic Oblique
Cavalier CabinetMultiview Axonometric
Isometric Dimetric Trimetric
Alla projektionerna finns beskrivna med illustrativa figurer i Carlbom-Pacioreks artikel och i Angel 5.1.
5
Ortografisk projektionOrtografisk projektionProjektorerna ä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:isometriskprojektionsplan symmetriskt till två av huvudytorna: dimetriskprojektionsplan utan sådan symmetri: trimetriskParallellitet bevaras, inte vinklar & avstånd (samma förkortning)
PerspektivprojektionPerspektivprojektionProjektor 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å- ochtre-, se Carlbom-Paciorek
PerspektivprojektionPerspektivprojektion, Angel 5.4, Angel 5.4
x
y
z
d
y
dz
PPp
Antag att vi projicerar punkten P på ett bildplan somligger d enheter från origo och är parallellt med x-y-planet:
Bildplan
PerspektivprojektionPerspektivprojektion
y
dz
PPp
P = x y z 1 T
z
yp
d =yz
yp =ydz =
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
yyp
PerspektivprojektionPerspektivprojektion
Vi vill kunna skriva perspektivprojektionen som en matris M. För att kunna göra det måste vi införa en ”normeringsoperation”,som mera matematisk stringent kan beskrivas medprojektiv geometri
P = x y z w T
med w skilt från 1 ser vi till att alltid dividera alla komponenter 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
PerspektivprojektionsmatrisPerspektivprojektionsmatris
1 0 0 00 1 0 00 0 1 00 0 1/d 0
xyz1
= x y zz/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 kallasperspektivdivision
i OpenGL.
MPp =
z
x
z
x
6
OrtografiskprojektionsmatrisOrtografiskprojektionsmatris
1 0 0 00 1 0 00 0 0 -d0 0 0 1
xyz1
= x y -d 1
MOp =Här är yp=yoch xp=xoch zp=-dså vi får
(i boken är d satt till 0)
Att positionera kameranAtt positionera kameran
Antingen tänker man att kameran flyttas i förhållande världen,eller att världen flyttas så att den hamnar framför kameran.
Operationerna är inverser av varandra.
I OpenGL är kameraramen fix så rent matematiskt gäller det senare alternativet. Men det finns en funktion som
hjälper en att ’’flytta världen’’ så att det motsvarar att flytta kameran.
Kombinationer av transformationerKombinationer av transformationer
•• 3D 3D alltså påalltså påmotsvarande sätt sommotsvarande sätt somi 2D.i 2D.
•• Varje Varje transformationtransformationmotsvarar ett motsvarar ett byte byte avavkoordinatsystemkoordinatsystem..
•• Så successivaSå successivatransformationer ärtransformationer ärockså successiva bytenockså successiva bytenav koordinatsystemav koordinatsystem!!
M1
M2M = M2M1
Kurvor och ytorKurvor och ytor
Representation with mathematical surfaces
Parametrisk form
Kurvor och ytor
Kubiska (grad 3)
Interpolerande Hermite Bezier B-Spline
Generell B-Spline
Polynom
Generella (grad d)
Uniform NURBS
Explicitform
Implicitform
Uppdelnings-procedur
Catmull-Clark Loop
Angel,Angel,kapkap.11.11 Representation Representation av kurvorav kurvor
x
y
10
1
0x = uy = 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)
7
Why donWhy don’’t we t we just just useusey = f(x)y = f(x)??
instead instead ofofx = x = fxfx(u)(u)y = fy(u)y = fy(u)with 0with 0≤≤uu≤≤11
Parametriska kurvorParametriska 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:
ExempelExempel
p(u) =uu2
0 ≤ u ≤ 1
dp(u)du =
12u
I u = 0.5 får vi tangenten11
A curve in 3D can be defined by
x = x(u)y = y(u)z = z(u)
0 ≤ u ≤ umax
The tangent can be obtained with aderivativedx = dx(u)/dudy = dy(u)/dudz = dz(u)/du
YtorYtor
p(u,v) =fx(u,v)fy(u,v)fz(u,v) x
zuv
x = u+vy = u-v
z = u2+v2
0 ≤ u ≤ 1
x = fx(u,v)y = fy(u,v)z = fz(u,v)
umin ≤ u ≤ umax
z = f(x,y) z=xy
f(x, y, z) = 0 x2+y2+z2 -1 = 0
Explicit
Implicit
Para-metrisk
Generellt Exempel Parametriska ytorParametriska ytor
∂p(u,v)
∂fx(u,v)∂u
∂fy(u,v)∂u
∂fz(u,v)∂u
De vektorer vi får om vi deriverar m.a.p. u och vdefinierar ytans tangentplan:
∂u=
∂p(u,v)
∂fx(u,v)∂v
∂fy(u,v)∂v
∂fz(u,v)∂v
∂v=
∂p(u,v)∂u
×∂p(u,v)∂v
N(u,v) = är ytans normal.
8
Interpolerande polynomkurvorInterpolerande polynomkurvor
p0 = (p0x p0y p0z)T, p1 = (p1x p1y p1z)T, p2 = (p2x p2y p2z)T , p3 = (p3x p3y p3z)T
px =
p0xp1xp2xp3x
py =
p0yp1yp2yp3y
pz =
p0zp1zp2zp3z
p2p0
p1
p3
Vi samlar koordinaterna i tre vektorer:
Antag att vi har fyra styrpunkter p0, p1, p2 och p3 och att vi vill att kurvan ska gå genom dessa punkter.
Parametric, e.g. cubic curves:
x = x(u) = axu3 + bxu2 + cxu + dxy = y(u) = ayu3 + byu2 + cyu + dyz = z(u) = azu3 + bzu2 + czu + dz
0 ≤ u ≤ umax
Compare this with:x(u) = axu + bxy(u) = ayu + by
p(u) =( 2u3 – 3u2 + 1 ) p0 + (–2u3 + 3u2 ) p3 +( u3 – 2u2 + u ) p’0 + ( u3 – u2 ) p’3
Curves, Hermite
1 0 1 0 00 00MMHH = 0 0 = 0 0 11 00 -3 3 -2 -1 -3 3 -2 -1 22 -2 1 1-2 1 1
p(u) = p(u) = uuTT MMHH q, q, where qwhere qTT = (p0 p3 p= (p0 p3 p’’0 p0 p’’3)3)and and u = (uu = (u33 u u22 u 1) u 1)
uuTT MMHH is a is a blending functionblending function, , giving giving the the weights weights for the for the geometricgeometricconditionsconditions
Hermite, joint point
P(u) = c0 P0 + c1 P1 + c2 P2 + c3 P3Bezier curve demo
http://www.timotheegroleau.com/Flash/articles/cubic_bezier_in_flash.htm
This web page is a paper on Bezier curves with somemath and demos etc
9
p(u) =( 1- u )3 p0 + 3u( 1- u )2 p1 +3u2(1-u) p2 + u3 p3
Curves, Bezier
1 01 0 00 00MMHH = -3 -3 = -3 -3 00 00 3 -6 3 0 3 -6 3 0 -1-1 3 -3 1 3 -3 1
Note: Σ weights = 1
Bezier, joint point
Join two Bezier curves eachdefined by four control points!
What continuity can we expectin the joint point?
The cubic B-spline curve
We would like to have C2 continuity
p(u) =( 1- u )3 p0 + (4 - 6u2 + 3u3) p1 +(1 + 3u + 3u2 - 3u3) p2 + u3 p3
Intervals with many contributingcontrol points
Each control point contributes to four intervals
Curves, splinesUniform, nonrational B-splines
To get C0, C1 and also C2 continuity you can use spline curves.The word spline has it´s origin from a kind of ruler used byengineersYou combine a set of curves:
Control points
Curves
Knots
P1 P2 P3 P4 P5 Pm-1 Pm
Q3 Q4 Q5 Qm
t3 t4 t5 t6 tm tm+1
P0
Curves, splinesNonuniform, nonrational B-splines means that the distancesbetween the knots not necessarily are equal.The reason for using this is that you want to control continuity.
Multiple points does not solve the problem:
P0 P4
P1 = P2 = P3
Q3 Q4
10
Curves, splinesIt is better to use multiple knots.
Example of a sequence of knots:(0,0,0,1,2,2,3,4,5,5,5,5,)
ti = ti+1 implies Qi is a point
The blending functions aremore complicated and are defined recursively
P0P4
t4 = t5 = t6
Q3Q6
P3
Q7
Curves, splinesNURBS - NonUniform Rational B-Splines
x(t) = X(t)/W(t) y(t) = Y(t)/W(t) z(t) = Z(t)/W(t)
Q(t) = (X(t), Y(t), Z(t), W(t) )
To be used as homogeneous coordinates, which means thatonly control points has to be 3D-transformed
Bezier patch
Spline patch
An example ofrecursive subdivision of Bezier curves
Subdivision surfaces
http://www.multires.caltech.edu/teaching/courses/subdivision/
11
Inlämningsuppgift 1 på transformationer samt kurvor och ytorkommer på hemsidan