Transzformációk kucg.korea.ac.kr
Tartalom Affin transzformációk Transzformációk homogén koordinátákkal 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
transzformációs függvény Transzformációk Vegyünk egy pontot (vagy vektort) képezzük le egy másik pontba (vagy vektorba) P Q u v T R 4D oszlop mátrix homogén koordináták transzformációs függvény kucg.korea.ac.kr
Affin transzformáció (1/2) Linearitás – lineáris függvény Lineáris transzformáció rendeljünk egy ponthoz (vagy vektorhoz) egy másik pontot (vagy vektort) 44 mátrix vektor pont kucg.korea.ac.kr
Affin transzformáció (2/2) Lineáris transzformáció (folyt) egyenestartó – egyenest egyenesbe képez 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 homogén koordináta affin transzformáció kucg.korea.ac.kr
(a) tárgy az eredeti pozícióban Eltolás 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 kucg.korea.ac.kr
Forgatás (1/2) Egyszerű példa 2D forgatásra kucg.korea.ac.kr
Forgatás (1/2) Egyszerű példa 2D forgatásra kucg.korea.ac.kr
Forgatás (1/2) Egyszerű példa 2D forgatásra kucg.korea.ac.kr
(a) fix pont körüli forgatás 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 (b) 3D forgatás kucg.korea.ac.kr
Merev test transzformációk 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
Skálázás (1/2) 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 Affin, nem merev test transzformációk affin transzformációk: eltolás, forgatás, skálázás, nyírás nemegyenletes egyenletes kucg.korea.ac.kr
Skálázás (2/2) Szükséges Tükrözés – negatív skálázási együttható fixpont a skálázás iránya skálázási együttható nagyítás (α>1) vagy kicsinyítés (0≤α<1) Tükrözés – negatív skálázási együttható skálázás eredménye tükrözés kucg.korea.ac.kr
Transzformációk homogén koordinátákkal Megvalósítás homogén koordinátákkal Affin transzformációk – 44 mátrix kucg.korea.ac.kr
? Eltolás P ponthoz rendeljük a d távolságban lévő P’-t eltolás mátrixa kucg.korea.ac.kr
Eltolás P ponthoz rendeljük a d távolságban lévő P’-t kucg.korea.ac.kr
? Eltolás P ponthoz rendeljük a d távolságban lévő P’-t Az eltolás mátrixának inverze ? kucg.korea.ac.kr
Eltolás P ponthoz rendeljük a d távolságban lévő P’-t Az eltolás mátrixának inverze kucg.korea.ac.kr
? Skálázás A skálázás mátrixa, ha a fixpontja az origó kucg.korea.ac.kr
Skálázás A skálázás mátrixa, ha a fixpontja az origó kucg.korea.ac.kr
? Skálázás A skálázás mátrixa, ha a fixpontja az origó A skálázás mátrixának inverze ? kucg.korea.ac.kr
Skálázás A skálázás mátrixa, ha a fixpontja az origó A skálázás mátrixának inverze kucg.korea.ac.kr
? Forgatás (1/2) Forgatás az origó körül forgatás mátrixa kucg.korea.ac.kr
Forgatás (1/2) Forgatás az origó körül ? kucg.korea.ac.kr
Forgatás (1/2) Forgatás az origó körül ? kucg.korea.ac.kr
Forgatás (1/2) Forgatás az origó körül kucg.korea.ac.kr
Forgatás (2/2) A forgatás mátrixának inverze ? kucg.korea.ac.kr
Forgatás (2/2) A forgatás mátrixának inverze : ortogonális mátrix kucg.korea.ac.kr
tárgy nyírása az x tengely irányában Még egy affin transzformáció tárgy nyírása az x tengely irányában ? kucg.korea.ac.kr
tárgy nyírása az x tengely irányában Még egy affin transzformáció tárgy nyírása az x tengely irányában kucg.korea.ac.kr
? Nyírás (2/2) Nyírás az x tengely irányában nyírás mátrixa kucg.korea.ac.kr
Nyírás (2/2) Nyírás az x tengely irányában kucg.korea.ac.kr
? Nyírás (2/2) Nyírás az x tengely irányában Nyírás mátrixának inverze kucg.korea.ac.kr
Nyírás (2/2) Nyírás az x tengely irányában Nyírás mátrixának inverze kucg.korea.ac.kr
Transzfromációk konkatenációja 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 M p q CBA kucg.korea.ac.kr
Pont körüli forgatás (1/3) Fixpont: pf jelölje Rz() a forgatást Kocka forgatása a középpontja körül kucg.korea.ac.kr
Pont körüli forgatás (2/3) transzformációk sorozata kucg.korea.ac.kr
Pont körüli forgatás (3/3) kucg.korea.ac.kr
Általános forgatás (1/2) 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
Általános forgatás (2/2) kucg.korea.ac.kr
Példa transzformációra (1/2) 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
Példa transzformációra(2/2) kucg.korea.ac.kr
Tetszőleges tengely körüli forgatás (1/6) Szükséges fixpont: p0 elforgatás szöge: θ forgástengely : vektor p2-p1 kocka forgatása tetszőleges tengely mentén kucg.korea.ac.kr
Tetszőleges tengely körüli forgatás (2/6) 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 meg- feleltethető 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 a fix pontot az origóba mozgattuk kucg.korea.ac.kr
Tetszőleges tengely körüli forgatás (3/6) Forgatási sorrend Határozzuk meg x-t és y -t A szögek iránya és ezek cosinusai szögek iránya kucg.korea.ac.kr
Tetszőleges tengely körüli forgatás (4/6) 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 x tengely körüli forgatás számolása kucg.korea.ac.kr
Tetszőleges tengely körüli forgatás (5/6) 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 y tengely körüli forgatás számolása kucg.korea.ac.kr
Tetszőleges tengely körüli forgatás (6/6) Végül konkatenáljuk a három mátrixot Feladat) Forgass egy tárgyat egy, az origón átmenő egyenes körül 45°-kal kucg.korea.ac.kr
Kocka forgatás (1/2) glutDisplayFunc(display); glutIdleFunc(spinCube); glutMouseFunc(mouse); void display(void) { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); glRotatef(theta[0], 1.0, 0.0, 0.0); glRotatef(theta[1], 0.0, 1.0, 0.0); glRotatef(theta[2], 0.0, 0.0, 1.0); colorcube(); glutSwapBuffers(); } 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
Kocka forgatás (2/2) 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
Kocka forgatás (2/2) glPushMatrix( ), glPopMatrix( ) 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 feladat) példatranszformáció glPushMatrix(); glTranslatef(.....); glRotatef(.....); glScalef(.....); /* draw object here */ glPopMatrix(); kucg.korea.ac.kr
Virtual Trackball (1/3) 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
Virtual Trackball (2/3) Forgatás virtual trackball-lal Vetítsük le a trackball pozícióját a síkra kucg.korea.ac.kr
Virtual Trackball (3/3) Forgatás virtual trackball-lal (folyt.) határozzuk meg a sík írányát forgásszög Kvaterniók kucg.korea.ac.kr
Komplex számok (1/3) Valós rész + képzetes rész: Összeadás és kivonás Számmal való szorzás Szorzás y x z Képzetes tengely Valós tengely kucg.korea.ac.kr
Komplex számok (2/3) Képzetes egység: Konjugált Osztás Abszolút érték kucg.korea.ac.kr
Komplex számok (3/3) Polár koordinátákkal való reprezentáció Euler-formula Szorzás és osztás n-edik gyök r θ z=(x, y) Képzetes tengely Valós kucg.korea.ac.kr
Kvaterniók (1/2) Egy valós rész + 3 képzetes rész Tulajdonságai: Összeadás és skaláris szorzás kucg.korea.ac.kr
Kvaterniók (2/2) Átírás rendezett számpárba Összeadás: Szorzás Nagyság skalár ‘s’ + vektor “v = (a, b, c)” Összeadás: Szorzás Nagyság Inverz kucg.korea.ac.kr
Kvaterniók és 3D forgatás 3D pont (α, β, γ) egy egység kvaternió konjugáltja Rq egy (ux, uy, uz) körüli 2θ°-os forgatás Forgassuk (α, β, γ) pontot 2θ°-kal a (ux, uy, uz) irányvektorú tengely körül kucg.korea.ac.kr
Forgatás kvaternióval (1/2) Tetszőleges tengely körüli forgatás válasszunk egy egységkvaterniót (u: egységvektor) alakítsunk át egy tetszőleges P pontot kvaternióvá (p = (x, y, z)) végezzük el a kvaternió műveletet (q-1=(s, –v)) állítsuk elő az új kvaterniót kucg.korea.ac.kr
Forgatás kvaternióval (2/2) A kvaterniószorzás segítségével megkapjuk a forgatás mátrixát Az eltolást is belevéve kucg.korea.ac.kr
Példa z tengely körüli forgatás vegyük az egységkvaterniót : Helyettesítsük be a=b=0-t, c=sin(θ/2)-t a mátrixba: kucg.korea.ac.kr