Računarska grafika 2
Transformacije
u 2D i 3D grafici
Elementarne transformacije
u 3D grafici
Rotacija
Objekat rotira oko X ose za ugao α,
oko Y ose za ugao β i oko Z ose za ugao γ.
Pozitivan smer rotacije je
nasuprot kretanja kazaljke časovnika.
Skaliranje
Faktori skaliranja po X, Y i Z osi: SX , SY , SZ
=
1000
100
010
001
zyx
T
T
T
TM
Translacija
Objekat se pomera za vektor ( )TTT zyxT ,,
• Koristi se konvencija pokretnog objekta i matrice kolona
−=
1000
0cossin0
0sincos0
0001
M RX
−=
1000
0cos0sin
0010
0sin0cos
M RY
−
=
1000
0100
00cossin
00sincos
M RZ
=
1000
000
000
000
Z
Y
X
S
S
S
S
• Transformacije u 2D prostoru su slične, samo je potrebno
ukloniti 3. vrstu i 3. kolonu priloženih matrica
Zadatak 1
• U X-Y koordinatnom sistemu trougao je određentemenima: A(2,6), B(4,6) i C(3,8). Ukoliko se objekat translatorno pomeri za vektorO1(-1,-1), zatim rotira u smeru kretanja kazaljke načasovniku za ugao 30 i konačno skalira faktorimaza X-osu Sx=2, odnosno Y-osu: Sy=1, odrediti:
– kompozitnu matricu transformacije
– nove koordinate datog trougla
Zadatak 1 – rešenje (1/2)
Matrice elementarnih transformacija su:
=
100
010
002
S
Kompozitna matrica je:
−
−
=
100
110
101
T
−−
−
==
100
366.0866.05.0
732.21732.1
TRSM
−=
100
030cos30sin
030sin30cos
R
Zadatak 1 – rešenje (2/2)Početno stanje
8
x
y
6
1 2 3 4 5 6 7 8 9 10
AB
C
Izgled nakon transformacija
8
x
y
6
1 2 3 4
A B
C
==
1
83.3
732.6
' AMA
==
1
83.2
196.10
' BMB
==
1
062.5
464.10
' CMC
• U OpenGL-u bi se isti objekat pozicionirao na sledeći način
glMatrixMode(GL_MODELVIEW);
glPushMatrix();
glLoadIdentity();
glTranslated(-1,-1,0);
glRotated(-30, 0, 0, 1);
glScaled(2,1,1);
// crtanje figure u k.s. objekta
glPopMatrix();
Zadatak 2
• Trougao ABC nalazi se na ekranu u položajudefinisanom koordinatama tačakaA(1,3), B(3,1), C(3,3). Koordinatni početak se nalazi u donjem levom uglu ekrana.
Odrediti kompozitnu matricu transformacija pokretnogobjekta tako da se promeni položaja trougla ABC u položaj:
– A’B’C’, gde su koordinate tačaka A’(7,5), B’(5,7), C’(5,5)
– A’’B’’C’’, gde su koordinate tačaka A’’(5,7), B’’(7,5), C’’(5,5)
Zadatak 2
8
x
y
6
2 4 6 8 10
4
2
A
B
CA’
B’
C’
8
x
y
6
2 4 6 8 10
4
2
A
B
CB’’
A’’
C’’
Zadatak 2 – rešenje (1/2)
8
x
y
6
2 4 6 8 10
4
2
A
B
CA’
B’
C’
8
x
y
6
2 4 6 8 10
4
2
A
B
C
A’
B’
C’
8
x
y
6
2 4 6 8 10
4
2
A’
B’
C’
B
A
C
1.Translacija objekta tako da teme C bude u koordinatnom početku
2.Rotacija objekta u smeru kretanja kazaljke na časovniku za ugao =
3.Translacija temena C u tačku (5,5)
−
−
=
−
−
−
−
==
100
810
801
100
310
301
100
010
001
100
510
501
12 TRTM
Zadatak 2 – rešenje (2/2)
8
x
y
6
2 4 6 8 10
4
2
A
B
CB’’
A’’
C’’
8
x
y
6
2 4 6 8 10
4
2
A
B
C
B’’
A’’
C’’
8
x
y
6
2 4 6 8 10
4
2
A
B
C
B’’
A’’
C’’
8
x
y
6
2 4 6 8 10
4
2A
B
C
B’’
A’’
C’’1. Translacija objekta tako da je teme C u koord. početku
2. Refleksija prema X-osi
3. Rotacija objekta u smeru kretanja kazaljke za ugao =90
4. Translacija temena C u tačku (5,5).
−
−
=
−
−
−
−
==
100
801
810
100
310
301
100
010
001
100
010
001
100
510
501
12 TOOTM xy
Zadatak 3
• Ukoliko je tačka P određena vektorom (x, y, z) u koordinatnom sistemu objekta,
pronaći koordinate iste tačke u koordinatnom sistemu sveta (world space).
Na slici dole je prikazan položaj ova dva koordinatna sistema.
−
=
−
==
1000
0100
)sin(0)cos()sin(
)cos(0)sin()cos(
1000
0100
0010
001
1000
0100
00cossin
00sincos
R
RR
TRM
• Potrebno je pronaći matricu transformacije, M,
koja “poravnava” sistem objekta u sistem sveta
PMP ='P
α
R
yW
xW
yO
xO'P
• Postoje dva načina razmišljanja:• Prvi je da se pođe od situacije da su k.s. bili preklopljeni,
a da je onda k.s. sveta dospeo u datu poziciju translacijom i rotacijom.
Iz perspektive k.s. sveta to izgleda kao da se tačka P pomerala,
pa su i matrice transformacije u skladu sa konvencijom pokretnog objekta
Zadatak 3 – rešenje
• Drugi način je da pronađemo vektore i ( i )
kao i vektor translacije koordinatnog početka k. s. modela u k. s. sveta.
Na osnovu toga se direktno dobija matrca transformacije.
xO
yO
zO
α
yW
xW
yOxO
)0,sin,cos( xO
)0,cos,sin( −yO
=
−
=
1000
0100
)sin(0)cos()sin(
)cos(0)sin()cos(
R
R
M
)1,0,0(zO
)0,sin,cos( RRT
Zadatak 4
• Pronaći matricu transformacije koja
preslikava k.s. sveta u k.s. objekta iz
prethodnog zadatka.
• Jedan način je da se traže projekcije
osa k.s. sveta u k.s. objekta
−
=
1000
0100
)sin(0)cos()sin(
)cos(0)sin()cos(
R
R
M
P
α
R
yW
xW
yO
xO
'P
• Drugi način je da se pronađe inverz
matrice M iz prethodnog zadatka
Zadatak 4 – rešenje
• Za ortonormalne matrice važi da jeTMM =−1
−
−
=
−== −
1000
0100
00)cos()sin(
0)sin()cos(
10
1
R
TMMM
T
P
T
P
=
−
=10
1000
0100
)sin(0)cos()sin(
)cos(0)sin()cos(
TMR
R
MP
Projekcije
ortonormalnih vektora Translacija
PTMPMPTPMTPMP T
P
T
PPP =−==−=+= − ')'(' 1
• Matrica je ortonormalna ukoliko su vektori kolona međusobno ortogonalni i
imaju jedinične dužine => mora drukčije da se traži inverz matrice M
Transformacija
prozor → prikazni prozor window→viewport
• Obezbeđuje razdvajanje postupka sastavljanja scene
od njenog prikazivanja
• Window (prozor): određuje deo scene koji se posmatra
• Viewport (prikazni prozor): određuje poziciju, veličinu i
orijentaciju dela prikazne površi u kojoj se prikazuje
deo scene vidljiv u prozoru
prozor
prikazni
prozor
Zadatak 5
Izračunati kompozitnu matricu preslikavanja objekata iz
prozora (Window) sa slike 1 u prikazni prozor (Viewport)
na slici 2. Prozor se nalazi u koordinatnom sistemu
realnog sveta, a prikazni prozor u normalizovanom
koordinatnom sistemu prikaznog uređaja.
x
y( 1 0 , 9 )
( 2 , 3 )
x
ya b
r
= 3 0
a = 0 . 4
b = 0 . 6
r = 0 . 5
Slika 1 Slika 2
Zadatak 5 – rešenje
8
x
y
6
2 4 6 8 10
4
2
8
x
y
6
2 4 6 8 10
4
2
Translacija: donji levi ugao pravougaonika
se postavlja u koordinatni početak
Skaliranje: (8,6)(0.6,0.4)
Zadatak 5 – rešenje
0.8
x
y
0.6
0.2 0.4 0.6 0.8 1
0.4
0.2
0.8
x
y
0.6
0.2 0.4 0.6 0.8 1
0.4
0.2
30°
Translacija: donji levi ugao pravougaonika
se postavlja u (0, r)
Rotacija: oko koordinatnog
početka za ugao 30°
Zadatak 5 – rešenje
0.8
x
y
0.6
0.2 0.4 0.6 0.8 1
0.4
0.2
M = R TVP S TW
=
100
00
00
y
X
S
S
S
6
4.08
6.0
=
=
y
x
S
S
−
−
=
100
310
201
wT
=
100
5.010
001
VPT
−=
100
030cos30sin
030sin30cos
R
−=
100
3348.00577.00375.0
0201.00333.00649.0
M
Zadatak 6
• Pronaći koordinate tačke P(5,1,-9) iz k.s. sveta
u k.s. normalizovanog uređaja (NDC) nakon projekcije,
ukoliko se k.s. kamere poklapa sa k.s. svetai ukoliko su parametri glFrustum funkcije bili sledeći:
10f
1n
t
5b
5r
5l
=
=
=
−=
=
−=
5
n
fb
t
l
r
-1
1
1
-1
-1
1
O
PPp
P’
• Potrebno je pronaći koordinate tačke P’
1. Pronađe se Pp , odnosno projekcija tačke P na bližoj strani odsecanja (near clipping plane)
2. Komponente x’ i y’ tacke P’ se dobijaju linearnom transformacijom komponenti xp i yp tačke
Pp , dok se z’ komponenta tacke P’ dobija linearnom transformacijom recipročne vrednosti
z komponente originalne tacke P
3. Na osnovu 2. se dobija matrica projekcije, kojom se tačka P preslikava
u homogeni prostor odsecanja (w komponenta projekcije je dubina tačke P u k.s. kamere)
4. Na kraju se koordinate dele sa w komponentom,
čime projekcija tačke P dospeva u normalizovani prostor odsecanja ili NDC
(ovo radi hardver!)
Zadatak 6 – rešenje (1/3)
1,,, zyx PPPP =
n
fb
t
l
r
-1
1
1
-1
-1
1
O
PPp 'P
−
−−
−
+−
−
+
−
−
+
−
==
1
0100
200
02
0
002
'z
y
x
PROJP
P
P
nf
nf
nf
nfbt
bt
bt
nlr
lr
lr
n
PMP
• Kamera je u koordinatnom početku i gleda u negativnom smeru z ose.
Zadatak 6 – rešenje (2/3)
x
z
p PP
nx −=
y
z
p PP
ny −=
12'
12'
−−
−=
−−
−=
bt
byy
lr
lxx
p
p
bt
bt
P
P
bt
ny
lr
lr
P
P
lr
nx
z
y
z
x
−
+−
−
−=
−
+−
−
−=
2'
2'
Linearno preslikavanjeSmena
Bz
Az +='
Recipročno
preslikavanje
z=−n, z’=−1
z=− f, z’=1 nf
nf
Pnf
nfz
z −
++
−
−−=
12'
nf
nfP
nf
nfPz
Pbt
btP
bt
nPy
Plr
lrP
lr
nPx
zz
zyz
zxz
−−
−
+−=−
−
++
−=−
−
++
−=−
2'
2'
2'
−
−−
−
+−
−
+
−
−
+
−
==
1
0100
200
02
0
002
'z
y
x
PROJP
P
P
nf
nf
nf
nfbt
bt
bt
nlr
lr
lr
n
PMP
• Postupak dobijanja matrice projekcije
Zadatak 6 - rešenje (2/2)
−=
−
−
−−
==
99
25
11
1
9
1
5
01009
20
9
1100
005
10
0005
1
PM'P PROJh
−
−−
−
+−
−
+
−
−
+
−
==
1
0100
200
02
0
002
z
y
x
PROJhP
P
P
nf
nf
nf
nfbt
bt
bt
nlr
lr
lr
n
PM'P
10f
1n
5b
5t
5r
5l
=
=
−=
=
=
−=
P(5,1,-9)
1,81
2,
45
1,
9
1' −=P
• Konkretna primena dobijene matrice projekcije
Zadatak 7
• Pronaći koordinate tačke P(0,1,-5)iz k.s. sveta
u NDC sistemu nakon projekcije,
ukoliko je k.s. kamere pozicioniran u k.s. svetapozivom gluLookAt(0,5,0, 0,0,- , 0,1,0)
i ukoliko je vidljivi prostor kamere postavljenpozivom glFrustum(-1,1, 1,-1, 1,10).
3
5
•P
α = 30
V = 5
yW
zW
zCyC
H = -3
5•
•
Zadatak 7 – rešenje
1. Matrica preslikavanja k.s. sveta u k.s. kamere
−
−−=
−
−−=
1000
33.45.0866.00
5.2866.05.00
0001
1000
cossincos0
sincossin0
0001
V
VM view
2. Matrica projekcije
−
−−=
−
−−
−
+−
−
+
−
−
+
−
=
01009
20
9
1100
0010
0001
0100
200
02
0
002
nf
nf
nf
nfbt
bt
bt
nlr
lr
lr
n
M PROJ
=
−
−−
−−
−−==
96.5
06.5
33.2
0
1
5
1
0
33.45.0866.00
063.361.0057.10
5.2866.05.00
0001
PMMP VIEWPROJH
=
1
849.0
391.0
0
PP
Zadatak 8
• Pronaći matricu rotacije koja rotira objekat oko ose
zadate jediničnim vektorom A(-0.25, -0.433, 0.866) za ugao 75° u pozitivnom matematičkom smeru.
• Problem će najpre biti rešen u opštem slučaju,
kada je potrebno rotirati tačku P
za ugao φ u pozitivnom mat. smeru
oko ose čiji je pravac određenjediničnim vektorom A
xz
y
A
P
Zadatak 8 – rešenje (1/3)
• Projektovanjem vektora P na osu određenu vektorom A,
vidi se da je potrebno je pronaći samo rotaciju normalne komponente, dok se paralelna komponenta sabira nepromenjena.
A
P
APAPP
= )(
APAPPN
−= )(
• Rotacija vektora PN za ugao φ oko ose A se dobija kao linearna
kombinacija vektora PN i vektora PAxP dobijenog rotacijom vektora PN oko
ose A za ugao od 90° u supr. smeru od kretanja kazaljke časovnika.
sin)(cos))((sincos_ +−=+= PAAPAPPPP PANRotN
NP
PAP
RotNP _
Zadatak 8 – rešenje (2/3)
• Iz poslednjeg sledi celokupni izraz rotiranog vektora P
sin)(cos))(()(_ +−+=+= PAAPAPAPAPPP RotNPRot
• Primenom matrične predstave gornji izraz je ekvivalentan sledećem
)cos1()(sin)(cos −++= PAAPAP
)cos1(sin
0
0
0
cos
100
010
001
2
2
2
−
+
−
−
−
+
= P
AAAAA
AAAAA
AAAAA
P
AA
AA
AA
PP
zzyzx
zyyyx
zxyxx
xy
xz
yz
Rot
• Odakle sledi matrica rotacije ( ) sin,cos == sc
−++−−−
−−−++−
+−−−−+
=2
2
2
)1()1()1(
)1()1()1(
)1()1()1(
)(
zxzyyzx
xzyyzyx
yzxzyxx
A
AccAsAAcAsAAc
AsAAcAccAsAAc
AsAAcAsAAcAcc
R
Zadatak 8 – rešenje (3/3)
• Zamenom konkretnih vrednosti u opštu formulu dobija se matrica
tražena u zadatku ( A (-0.25, -0.433, 0.866) , φ=60°)
−++−−−
−−−++−
+−−−−+
=2
2
2
)1()1()1(
)1()1()1(
)1()1()1(
)(
zxzyyzx
xzyyzyx
yzxzyxx
A
AccAsAAcAsAAc
AsAAcAccAsAAc
AsAAcAsAAcAcc
R
−
−−
=
875.0404.0266.0
029.0594.0804.0
483.07.0531.0
)60( AR
0.063 0.187 0.75 0.108 -0.217 -0.375
2
xA2
yA 2
zA yx AAzx AA zy AA c s
0.5 0.866
Zadatak 8
• Izvesti matricu skaliranja duž proizvoljne ose
Ideja je slična kao u prethodnom zadatku.
Na slici je prikazana osa određena vektorom A
i neka tačka P treba da se skalira s puta duž te ose.
A
P
APAPP
= )(
APAPPN
−= )(
Zadatak 8 - rešenje
A
P
APAPP
= )(
APAPPN
−= )(
Skaliranje duž ose A će uticati samo na komponentu Pp.
Prema tome, tačka P će nakon skaliranja da se transformiše u tačku P’
na sledeći način:
P
AAAAA
AAAAA
AAAAA
sP
APAsPsAPAAPAP
sPPPPP
zzyzx
zyyyx
zxyxx
PNPN
−+
=−+=+−
=+=+=
2
2
2
)1(
100
010
001
)()1()()(
''
Zadatak 9
• Pronaći matricu skaliranja duž osa drugog k. s. čiji su
jedinični vektori pravca u tekućem k. s.
Sx(0.866, 0.433, -0.25)
Sy(-0.5, 0.75, -0.433)
Sz(0, 0.5, 0.866).
Faktor skaliranja duž x ose je 2, dok je duž y ose 3.
== −
1000
0500.1750.0433.0
0750.0375.2217.0
0433.0217.0125.2
1 MSMM S
−−
−
=
1000
0866.0433.025.0
05.075.0433.0
005.0866.0
M
−−
−
=−
1000
0866.05.00
0433.075.05.0
025.0433.0866.0
1M
=
1000
0100
0030
0002
S
Literatura
• Eric Langel, Mathematics for 3D Game
Programming and Computer Graphics
Top Related