Transcript Grafika
Grafika
Transzformációk
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Tartalom
Grafika
Affin transzformációk
forgatás, eltolás és skálázás
Transzformációk homogén koordinátákkal
Transzformációk konkatenációja
forgatás fix pont körül
általános forgatás
példa transzformációra
tetszőleges tengely körüli forgatás
Virtual trackball
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Transzformációk
Grafika
Vegyünk egy pontot (vagy vektort) képezzük le
egy másik pontba (vagy vektorba)
u
R
P
4D oszlop mátrix
v
Q T P
q f p
homogén koordináták
T
Q
v Ru
v f u
transzformációs függvény
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Affin transzformáció (1/2)
Grafika
Linearitás – lineáris függvény
f p q f p f q
Lineáris transzformáció
rendeljünk egy ponthoz (vagy vektorhoz) egy másik
pontot (vagy vektort)
v Au
a11 a12
a
a22
21
A
a31 a32
0
0
a13
a23
a33
0
44 mátrix
kucg.korea.ac.kr
a14
a24
a34
1
1
u 2
3
0
vektor
1
p 2
3
1
pont
Fordította: Völgyi Beatrix
Affin transzformáció (2/2)
Grafika
Lineáris transzformáció (folyt)
egyenestartó – egyenest egyenesbe képez
P P0 d
homogén
koordináta
p p 0 d
affin
transzformáció
Ap Ap 0 Ad
az egyenesnek csak a végpontjait transzformáljuk
CG-ban a transzformációk többsége affin
forgatás, eltolás, skálázás, nyírás
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Eltolás
Grafika
Egy ponthoz adott távolságra és irányban lévő
pontot rendelünk hozzá
elmozdulás vector d
(a) tárgy az
eredeti pozícióban
(b) eltolt tárgy
P P d
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Forgatás (1/2)
Grafika
Egyszerű példa 2D forgatásra
x cos
y sin
x cos
y sin
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Forgatás (1/2)
Grafika
Egyszerű példa 2D forgatásra
x cos
y sin
x cos
y sin
x cos cos sin sin x cos y sin
y cos sin sin cos x sin y cos
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Forgatás (1/2)
Grafika
Egyszerű példa 2D forgatásra
x cos
y sin
x cos
y sin
x cos cos sin sin x cos y sin
y cos sin sin cos x sin y cos
x cos
y sin
kucg.korea.ac.kr
sin x
cos y
Fordította: Völgyi Beatrix
Forgatás (2/2)
Grafika
Szükséges
fixpont – a forgatás során a pont helyzete változatlan
forgatás szöge – pozitív forgatás (jobb-sodrású
rendszerben az óramutató irányával ellentétes)
forgástengely 3D-ben – a forgatás során az egyenes
képe önmaga
(a) fix pont körüli forgatás
kucg.korea.ac.kr
(b) 3D forgatás
Fordította: Völgyi Beatrix
Merev test transzformációk
Grafika
Forgatás és eltolás
Forgatás és eltolás kombinációja nem képes
megváltoztatni a tárgy alakját
csak a tárgy helyét és irányát
affin transzformációk, de nem merev test transzformációk
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Skálázás (1/2)
Grafika
Egy tárgy nagyságát növeljük vagy csökkentjük
egyenletes – skálázás minden irányból azonos mértékkel
nemegyenletes
egyenletes
Affin, nem merev test transzformációk
affin transzformációk: eltolás, forgatás, skálázás, nyírás
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Skálázás (2/2)
Grafika
Szükséges
fixpont
a skálázás iránya
skálázási együttható
nagyítás (α>1) vagy kicsinyítés (0≤α<1)
skálázás eredménye
Tükrözés – negatív skálázási együttható
tükrözés
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Transzformációk homogén
koordinátákkal
Megvalósítás homogén koordinátákkal
Q P v
Grafika
1
1
q p v 2 2
3
3
1
0
Affin transzformációk – 44 mátrix
a11 a12 a13 a14
a
a
a
a
23
24
M 21 22
a31 a32 a33 a34
0
0
1
0
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Eltolás
Grafika
P ponthoz rendeljük a d távolságban lévő P’-t
p p d
p Tp
x
x
x
y
y
p , p , d y
z
z
z
1
1
0
x x x
y y y
z z z
?
eltolás mátrixa
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Eltolás
Grafika
P ponthoz rendeljük a d távolságban lévő P’-t
p p d
p Tp
x
x
x
y
y
p , p , d y
z
z
z
1
1
0
kucg.korea.ac.kr
x x x
y y y
z z z
1
0
T
0
0
0 0 x
1 0 y
0 1 z
0 0 1
Fordította: Völgyi Beatrix
Eltolás
Grafika
P ponthoz rendeljük a d távolságban lévő P’-t
p p d
p Tp
x
x
x
y
y
p , p , d y
z
z
z
1
1
0
x x x
y y y
z z z
1
0
T
0
0
0 0 x
1 0 y
0 1 z
0 0 1
Az eltolás mátrixának inverze
T 1 x , y , z T x , y , z
kucg.korea.ac.kr
?
Fordította: Völgyi Beatrix
Eltolás
Grafika
P ponthoz rendeljük a d távolságban lévő P’-t
p p d
p Tp
x
x
x
y
y
p , p , d y
z
z
z
1
1
0
x x x
y y y
z z z
1
0
T
0
0
0 0 x
1 0 y
0 1 z
0 0 1
Az eltolás mátrixának inverze
1
0
T 1 x , y , z T x , y , z
0
0
kucg.korea.ac.kr
0 0 x
1 0 y
0 1 z
0 0
1
Fordította: Völgyi Beatrix
Skálázás
Grafika
A skálázás mátrixa, ha a fixpontja az origó
p Sp
x x x
S x , y , z
y y y
z z z
?
skálázás mátrixa
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Skálázás
Grafika
A skálázás mátrixa, ha a fixpontja az origó
p Sp
x x x
S x , y , z
0
x 0
y y y
z z z
kucg.korea.ac.kr
0
S
0
0
y
0
0
z
0
0
0
0
0
1
Fordította: Völgyi Beatrix
Skálázás
Grafika
A skálázás mátrixa, ha a fixpontja az origó
p Sp
x x x
S x , y , z
0
x 0
y y y
z z z
0
S
0
0
y
0
0
z
0
0
0
0
0
1
A skálázás mátrixának inverze
1 1 1
S x , y , z S , ,
y
z
x
1
kucg.korea.ac.kr
?
Fordította: Völgyi Beatrix
Skálázás
Grafika
A skálázás mátrixa, ha a fixpontja az origó
p Sp
x x x
S x , y , z
0
x 0
y y y
z z z
0
S
0
0
y
0
0
z
0
0
0
0
0
1
A skálázás mátrixának inverze
0
0
1 x
0 1
0
1
1
1
y
1
S x , y , z S ,
,
0
0 1 z
y
z
x
0
0
0
kucg.korea.ac.kr
0
0
0
1
Fordította: Völgyi Beatrix
Forgatás (1/2)
Grafika
Forgatás az origó körül
x x cos y sin
y x sin y cos
z z
Rz
p Rz p
?
forgatás mátrixa
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Forgatás (1/2)
Grafika
Forgatás az origó körül
x x cos y sin
y x sin y cos
z z
Rx Rx
kucg.korea.ac.kr
Rz
p Rz p
cos
sin
Rz
0
0
sin
cos
0
0
0 0
0 0
1 0
0 1
?
Fordította: Völgyi Beatrix
Forgatás (1/2)
Grafika
Forgatás az origó körül
x x cos y sin
y x sin y cos
z z
0
1
0 cos
Rx Rx
0 sin
0
0
kucg.korea.ac.kr
0
sin
cos
0
Rz
p Rz p
cos
sin
Rz
0
0
0
0
R y R y
0
1
sin
cos
0
0
0 0
0 0
1 0
0 1
?
Fordította: Völgyi Beatrix
Forgatás (1/2)
Grafika
Forgatás az origó körül
x x cos y sin
y x sin y cos
z z
0
1
0 cos
Rx Rx
0 sin
0
0
kucg.korea.ac.kr
0
sin
cos
0
Rz
p Rz p
cos
sin
Rz
0
0
sin
0
cos
0
0
R y R y
sin
0
1
0
cos
0
0
0 0
0 0
1 0
0 1
0 sin
1
0
0 cos
0
0
0
0
0
1
Fordította: Völgyi Beatrix
Forgatás (2/2)
Grafika
A forgatás mátrixának inverze
R 1 R
cos cos , sin sin
Rz1 Rz
kucg.korea.ac.kr
?
Fordította: Völgyi Beatrix
Forgatás (2/2)
Grafika
A forgatás mátrixának inverze
R 1 R
cos cos , sin sin
cos sin
sin cos
Rz1 Rz
0
0
0
0
1
0 0 cos
0 0 sin
1 0 0
0 1 0
R R
kucg.korea.ac.kr
sin
cos
0
0
0 0
0 0
1 0
0 1
T : ortogonális mátrix
Fordította: Völgyi Beatrix
Nyírás (1/2)
Grafika
Még egy affin transzformáció
tárgy nyírása az x tengely irányában
x
y
z
kucg.korea.ac.kr
?
Fordította: Völgyi Beatrix
Nyírás (1/2)
Grafika
Még egy affin transzformáció
tárgy nyírása az x tengely irányában
x x y cot
y y
z z
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Nyírás (2/2)
Grafika
Nyírás az x tengely irányában
x x y cot
y y
z z
H x
p H x p
?
nyírás mátrixa
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Nyírás (2/2)
Grafika
Nyírás az x tengely irányában
x x y cot
y y
z z
kucg.korea.ac.kr
H x
p H x p
1 cot
0
1
Hx
0
0
0
0
0 0
0 0
1 0
0 1
Fordította: Völgyi Beatrix
Nyírás (2/2)
Grafika
Nyírás az x tengely irányában
x x y cot
y y
H x
z z
Nyírás mátrixának inverze
H x1 H x
kucg.korea.ac.kr
p H x p
1 cot
0
1
Hx
0
0
0
0
0 0
0 0
1 0
0 1
?
Fordította: Völgyi Beatrix
Nyírás (2/2)
Grafika
Nyírás az x tengely irányában
x x y cot
y y
H x
z z
Nyírás mátrixának inverze
p H x p
1 cot
0
1
Hx
0
0
0
0
1 cot
0
1
1
H x H x
0
0
0
0
kucg.korea.ac.kr
0 0
0 0
1 0
0 1
0 0
0 0
1 0
0 1
Fordította: Völgyi Beatrix
Transzfromációk
konkatenációja
Grafika
Konkatenáció
affin transzformációk összeszorzása
alap transzformációk sorozata
tetszőleges transzformáció közvetlen definiálása
három, egymást követő transzformáció:
p
A
B
C
q CBAp CBAp
CBA
M CBA
q Mp
kucg.korea.ac.kr
q
p
M
q
Fordította: Völgyi Beatrix
Pont körüli forgatás (1/3)
Grafika
Fixpont: pf
jelölje Rz() a forgatást
Kocka forgatása a középpontja körül
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Pont körüli forgatás (2/3)
Grafika
transzformációk sorozata
M T p f Rz T p f
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Pont körüli forgatás (3/3)
Grafika
M T p f Rz T p f
1
0
0
0
0 0
1 0
0 1
0 0
cos
sin
0
0
kucg.korea.ac.kr
x f cos
y f sin
z f 0
1 0
sin
cos
0
0
sin
0
cos
0
0
1
0
0
0 0 1
0 0 0
1 0 0
0 1 0
0 0 xf
1 0 y f
0 1 zf
0 0
1
x f x f cos y f sin
y f x f sin y f cos
0
1
Fordította: Völgyi Beatrix
Általános forgatás (1/2)
Grafika
3 egymás követő forgatás a tengelyek körül
Kocka forgatása a z tengely mentén
Kocka forgatása a y tengely mentén
?
Kocka forgatása a x tengely mentén
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Általános forgatás (2/2)
Grafika
R Rx R y Rz
0
1
0 cos
0 sin
0
0
kucg.korea.ac.kr
0
sin
cos
0
0 cos
0 0
0 sin
1 0
0 sin
1
0
0 cos
0
0
0 cos
0 sin
0 0
1 0
sin
cos
0
0
0 0
0 0
1 0
0 1
Fordította: Völgyi Beatrix
Példa transzformációra (1/2)
Grafika
Adott egy tárgy
prototípusa
Keresünk egy
transzformációt
használjunk egy affin
transzformációt, hogy
megváltoztassuk a tárgy
méretét, helyét és irányát
?
példa transzformációra
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Példa transzformációra(2/2)
Grafika
M TRS
1
0
0
0
kucg.korea.ac.kr
0 0 x cos
1 0 y sin
0 1 z 0
0 0 1 0
sin
cos
0
0
0 0 x 0
0
0 0 0 y 0
1 0 0
0 z
0 1 0
0
0
0
0
0
1
Fordította: Völgyi Beatrix
Tetszőleges tengely körüli
forgatás (1/6)
Grafika
Szükséges
fixpont: p0
elforgatás szöge: θ
forgástengely : vektor p2-p1
u p 2 p1
x
u
v
y
u
z
kocka forgatása tetszőleges
tengely mentén
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Tetszőleges tengely körüli
forgatás (2/6)
Grafika
Az első transzformáció a T(-p0) és az utolsó a
T(p0) eltolás
Probléma a forgatásnál
Tetszőleges forgatás megfeleltethető 3, az egyes
tengelyek körüli forgatásnak
Hajtsunk végre két forgatást,
hogy a forgatás tengelye a z
tengelynek feleljen meg
Forgassunk a z tengely körül
θ szöggel
kucg.korea.ac.kr
a fix pontot az origóba
mozgattuk
Fordította: Völgyi Beatrix
Tetszőleges tengely körüli
forgatás (3/6)
Grafika
Forgatási sorrend
Határozzuk meg x-t és y -t
A szögek iránya és ezek cosinusai
x2 y2 z2 1
cos x x , cos y y , cos z z
cos2 x cos2 y cos2 z 1
kucg.korea.ac.kr
szögek iránya
Fordította: Völgyi Beatrix
Tetszőleges tengely körüli
forgatás (4/6)
Grafika
Határozzuk meg x-t és y -t (folyt.)
Vetítsük le az egyenest az y=0 síkra
Nézzük meg az egyenes vetületét (a forgatás előtt) az x=0
síkon
d y2 z2
0
1
0 / d
z
Rx x
0 y / d
0
0
kucg.korea.ac.kr
0
y / d
z / d
0
0
0
0
1
x tengely körüli forgatás
számolása
Fordította: Völgyi Beatrix
Tetszőleges tengely körüli
forgatás (5/6)
Grafika
Határozzuk meg x-t és y -t (folyt.)
Vetítsük az egyenest a z tengelyre
Forgatás az y tengely körül
figyelem!!! – órajárással megegyező szög
Ry y
d
0
x
0
0 x
1
0
0
d
0
0
0
0
0
1
y tengely körüli forgatás
számolása
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Tetszőleges tengely körüli
forgatás (6/6)
Grafika
Végül konkatenáljuk a három mátrixot
M T p 0 Rx x Ry y Rz Ry y Rx x T p 0
R Rx x Ry y Rz Ry y Rx x
M T p 0 RT p 0
Feladat) Forgass egy tárgyat egy, az origón
átmenő egyenes körül 45°-kal
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Kocka forgatás (1/2)
Grafika
glutDisplayFunc(display);
glutIdleFunc(spinCube);
glutMouseFunc(mouse);
void display(void)
{
glClear(GL_COLOR_BUFFER_BIT |
glLoadIdentity();
glRotatef(theta[0], 1.0, 0.0,
glRotatef(theta[1], 0.0, 1.0,
glRotatef(theta[2], 0.0, 0.0,
colorcube();
glutSwapBuffers();
}
GL_DEPTH_BUFFER_BIT);
0.0);
0.0);
1.0);
void mouse(int btn, int state, int x, int y)
{
if(btn==GLUT_LEFT_BUTTON && state==GLUT_DOWN) axis=0;
if(btn==GLUT_MIDDLE_BUTTON && state==GLUT_DOWN) axis=1;
if(btn==GLUT_RIGHT_BUTTON && state==GLUT_DOWN) axis=2;
}
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Kocka forgatás (2/2)
Grafika
void spinCube(void)
{
theta[axis] += 2.0;
if( theta[axis] > 360.0 ) theta[axis] -= 360.0;
glutPostRedisplay();
}
void mykey(char key, int mousex, int mousey)
{
if( key == ‘q’ || key == ‘Q’ ) exit();
}
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Kocka forgatás (2/2)
Grafika
void spinCube(void)
{
theta[axis] += 2.0;
if( theta[axis] > 360.0 ) theta[axis] -= 360.0;
glutPostRedisplay();
}
void mykey(char key, int mousex, int mousey)
{
if( key == ‘q’ || key == ‘Q’ ) exit();
}
glPushMatrix( ), glPopMatrix( )
hajtuk végre egy transzformációt és aztán térjünk
vissza a test eredeti állapotába glPushMatrix();
feladat) példatranszformáció
kucg.korea.ac.kr
glTranslatef(.....);
glRotatef(.....);
glScalef(.....);
/* draw object here */
glPopMatrix();
Fordította: Völgyi Beatrix
Virtual Trackball (1/3)
Grafika
Használjuk az egér helyzetét, hogy
leellenőrizzük a forgatást a 2 tengely körül
Igazolásként forgassuk a tárgyat folyamatosan
trackball frame
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Virtual Trackball (2/3)
Grafika
Forgatás virtual trackball-lal
Vetítsük le a trackball pozícióját a síkra
x y z r
2
y r x z
2
2
2
2
kucg.korea.ac.kr
2
2
Fordította: Völgyi Beatrix
Virtual Trackball (3/3)
Grafika
Forgatás virtual trackball-lal (folyt.)
határozzuk meg a sík írányát
n p1 p 2
forgásszög
cos p1 p 2
1
Kvaterniók
kucg.korea.ac.kr
n
Fordította: Völgyi Beatrix
Komplex számok (1/3)
Grafika
Valós rész + képzetes rész:
z x, y
Képzetes
tengely
x Rez , y Imz
Összeadás és kivonás
Számmal való szorzás
Szorzás
z x iy
z
y
x1, y1 x2 , y2 x1 x2 , y1 y2
Valós
tengely
x
k x1 , y1 kx1 , ky1
x1, y1 x2 , y2 x1x2 y1 y2 , x1 y2 x2 y1
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Komplex számok (2/3)
Grafika
Képzetes egység: i 0, 1
i 2 0, 10, 1 1, 0
i 1
Konjugált
z x iy
z x iy
Abszolút érték
z zz x 2 y 2
Osztás
z1 z1 z2 x1 , y1 x2 , y2 x1 x2 y1 y2 x2 y1 x1 y2
2
, 2
2
2
2
2
z2 z2 z2
x2 y2
x2 y2
x2 y2
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Komplex számok (3/3)
Grafika
Polár koordinátákkal való reprezentáció
Euler-formula
z r cos i sin
e cos i sin
i
z re
Szorzás és osztás
n-edik gyök
n
i 1 2
,
z=(x, y)
r
i
z1 z2 r1r2e
Képzetes
tengely
θ
Valós
tengely
z1 r1 i 1 2
e
z2 r2
2k
2k
z r cos
i sin
, k 0, 1, 2, , n 1
n
n
n
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Kvaterniók (1/2)
Grafika
Egy valós rész + 3 képzetes rész
q s ia jb kc
Tulajdonságai: i 2 j 2 k 2 1
ij ji k
jk kj i
ki ik j
Összeadás és skaláris szorzás
q1 q2 s1 s2 ia1 a2 jb1 b2 k c1 c2
dq1 s1d ia1d jb1d kc1d
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Kvaterniók (2/2)
Grafika
Átírás rendezett számpárba
q s, v
skalár ‘s’ + vektor “v = (a, b, c)”
Összeadás:
Szorzás
q1 q2 s1 s2 , v1 v 2
q1q2 s1s2 v1 v 2 , s1v 2 s2 v1 v1 v 2
Nagyság
Inverz
q s vv
2
1
q
1
q
kucg.korea.ac.kr
2
2
s, v
qq 1 q 1q 1, 0
Fordította: Völgyi Beatrix
Kvaterniók és 3D forgatás
Grafika
3D pont (α, β, γ)
egy egység kvaternió q s, a, b, c konjugáltja
q s, a, b, c
q 0, , , q 0, , ,
Forgassuk (α, β, γ) pontot 2θ°-kal a (ux, uy, uz)
irányvektorú tengely körül
q cos , sin ux , u y , uz
Rq egy (ux, uy, uz) körüli 2θ°-os forgatás
Rq p q p q
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Forgatás kvaternióval (1/2)
Grafika
Tetszőleges tengely körüli forgatás
válasszunk egy egységkvaterniót (u: egységvektor)
s cos , v u sin a, b, c
2
2
alakítsunk át egy tetszőleges P pontot kvaternióvá
(p = (x, y, z))
P 0, p
végezzük el a kvaternió műveletet (q-1=(s, –v))
P qPq 1
állítsuk elő az új kvaterniót
P 0, p
p s 2p vp v 2sv p v v p
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Forgatás kvaternióval (2/2)
Grafika
A kvaterniószorzás segítségével megkapjuk a
forgatás mátrixát
1 2b 2 2c 2
2ab 2sc
2ac 2sb
2
2
M R 2ab 2sc 1 2a 2c
2bc 2sa
2
2
2ac 2sb
2
bc
2
sa
1
2
a
2
b
R x x R y y R z R y y R x x
Az eltolást is belevéve
R T M R T
1
kucg.korea.ac.kr
Fordította: Völgyi Beatrix
Példa
Grafika
z tengely körüli forgatás
vegyük az egységkvaterniót : s cos , v 0, 0, 1sin
2
2
Helyettesítsük be a=b=0-t, c=sin(θ/2)-t a mátrixba:
2
1
2
sin
2
cos
sin
0
2
2
2
2
M R 2 cos sin
1 2 sin
0
2
2
2
2
0
0
1
1
2
sin
cos
2
2 cos sin sin
cos sin 0
2
2
sin cos 0
0
0
1
kucg.korea.ac.kr
Fordította: Völgyi Beatrix