Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

Geometriai transzformációk

Hasonló előadás


Az előadások a következő témára: "Geometriai transzformációk"— Előadás másolata:

1 Geometriai transzformációk
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010

2 Számítógépes grafika feladata
illúzió modellezés számok Virtuális világ modell képszintézis számítás Metafórák: optika 2D rajzolás festés analógiák Képpontok: vörös kék zöld mérés

3 Mindent számmal axiómák pont számok sík műveletek megfeleltetés
egyenes egyenlet illeszkedik metszi függvény geometria algebra

4 Koordinátageometriai gyorstalpaló - Pontok, alakzatok megadása
Mindent számmal! Koordináta rendszer Koordináták megadása Koordináta rendszerek Descartes Polár Homogén

5 Koordináta rendszerek
Yh 1 y 1 r f w Xh x Descartes Polár Baricentrikus Homogén

6 Pontfüggvények: Mozgatás
Vektor = eltolás: v Iránya és hossza (|v|) van Helyvektor De vektor ≠ pont !!! Vektorműveletek v = v1 + v2 (kommutatív, asszoc) v1 = v - v2 (összeadásnak van inverze) v1 = av (összeadásra disztributív) helyvektor origó v1 v2 v av

7 Skaláris szorzás Definíció Jelentés Tulajdonságok
v1 Definíció v1v2 = |v1||v2|cos Jelentés Egyik vektor vetülete a másikra x másik hossza Tulajdonságok Kommutatív v1v2 = v2v1 Összeadással disztributív v3(v2+v1) = v3v2 + v3v1 vv = |v|2 v2 |v1|cos v2 v1 v3 |v1|cos

8 Vektoriális szorzás Definíció Jelentés Tulajdonságok v1  v2 v2
|v1  v2| = |v1||v2|sin Merőleges, jobbkéz szabály Jelentés Paralelogramma területe, síkjára merőleges (Egyik vektor vetülete a másikra merőleges síkra + 90 fokos forgatás) x másik hossza Tulajdonságok Alternáló v1  v2 = - v2  v1 Összeadással disztributív v3  (v2+v1) = v3  v2 + v3  v1 vv = |v|2 v1 |v1|cos v2 v1 |v1|sin 90 fok v1v2

9 Descartes koordinátarendszer
Egyértelmű (x = vi, y = vj) Műveletek koordinátákban Összeadás: v1 + v2 = (x1+x2)i + (y1+y2)j Skaláris szorzás: v1  v2 = (x1i + y1 j)  (x2i + y2 j) = (x1 x2 + y1y2) Vektoriális szorzás: v1  v2 = (x1i + y1 j + z1k)  (x2i + y2 j + z2k) = (y1z2 – y2z1) i + (x2z1 – x1z2) j + (x1y2 – y1x2)k Abszolút érték: |v| =  vv =  x2 + y2 + z2 y j v = xi + yj j x i i origó i j k x1 y1 z1 x2 y2 z2

10 Vektor és Pont nem ugyanaz!
2D: vektor (x, y) Pont (x, y) 3D: vektor (x, y, z) Pont (x, y, z) Műveletek: Vektor + Vektor = Vektor Pont + Vektor =Pont (eltolás) Vektor – Vektor = Vektor Pont – Pont = Vektor Vektor  Vektor = Vektor Vektor  Vektor = Skalár Vektor * Skalár = Vektor

11 Vektor osztály struct Vector { float x, y, z, w;
Vector(float x0, float y0, float z0, float w0 = 0) { x = x0; y = y0; z = z0; w = w0; } Vector operator*(float a) { return Vector(x * a, y * a, z * a, w * a); Vector operator+(Vector& v) { return Vector(x + v.x, y + v.y, z + v.z, w + v.w); Vector operator-(Vector& v) { return Vector(x - v.x, y - v.y, z - v.z, w - v.w); float operator*(Vector& v) { return (x * v.x + y * v.y + z * v.z); Vector operator%(Vector& v) { return Vector(y*v.z-z*v.y, z*v.x - x*v.z, x*v.y-y*v.x); float Length() { return sqrt(x * x + y * y + z * z); } };

12 2D egyenes n(r – r0) = 0 nx (x – x0) + ny (y – y0) = 0
n normálvektor v irányvektor n(r – r0) = 0 nx (x – x0) + ny (y – y0) = 0 ax + by + c = 0 (x, y, 1)  (a, b, c) = 0 y r0 r x R0 az egyenes biztos pontja r = r0 + v t, t  [-∞,∞] x = x0 + vx t y = y0 + vy t

13 Sík n(r – r0) = 0 nx (x – x0) + ny (y – y0) + nz (z – z0) = 0
n normálvektor z r0 r y x n(r – r0) = 0 nx (x – x0) + ny (y – y0) + nz (z – z0) = 0 ax + by + cz + d = 0 (x, y, z, 1)  (a, b, c, d) = 0

14 … és akkor tényleg folytassuk a transzformációkkal
Affin transzformáció: Párhuzamos egyeneseket párhuzamos egyenesekbe viszi Lineáris transzformációk ilyenek

15 Elemi affin transzformációk
Eltolás: r’ = r + p Skálázás: x’= Sx x; y’= Sy y; Forgatás: x’= cosφ x+ sinφ y; y’= -sinφ x+ cosφ y; Sx Sy Fix pont: origó r’ = r cos φ sin φ -sin φ cos φ r’ = r Fix pont: origó

16 Elemi transzformációk
Nyírás: x’= x; y’= y + a x; Tükrözés: a r’ = r r’ = r

17 Transzformáció fix pontja: pivot point: (xp, yp)
Skálázás: x’= Sx (x-xp) + xp; y’= Sy (y-yp) + yp; Forgatás: x’= (x-xp)*cos f - (y-xp)* sin f + xp; y’= (x- yp)*sin f + (y- yp)* cos f + yp;

18 Modellezési feladat α v Alapműveletek: eltolás origó fixpontú skálázás
origó középpontú forgatás v méret: s=1.5x Alap objektum modell Várt elhelyezés

19 Műveletek sorrendje

20 Modellezés: 2 csuklójú robotkar
y h β w α

21 y y β x x

22 y y β β h x x

23 y y β α β h α

24 y β α x

25 Összetett transzformáció
Affin transzformáció: r’ = r A + p A: lineáris transzformáció forgatás, skálázás, tükrözés, nyírás, stb. p: eltolás Amíg lineáris transzformáció: konkatenáció r’ = (...(r A1) A2)... An) = r (A1A2... An )

26 Homogén koordinátás transzformációk
Eltolás nem fér bele a 2x2-es mátrixba Dolgozzunk 3x3-as mátrixokkal A a11 a a21 a p1 p [r’, 1] = [r, 1] = [r A + p, 1] p [r’,1] = (...([r,1] T1) T2)... Tn) = [r,1] (T1T2... Tn)

27 Transzformációk projektív geometriai megközelítése
Homogén koordináták – nem csak az eltolás egységes kezeléséért! 3D grafika központi eleme a 3D-s világ 2D-s megjelenítése Vetítés, mint dimenziócsökkentő művelet Centrális (középponti) vetítés Az euklideszi térben nem minden pont vetíthető centrálisan -> euklideszi helyett un. projektív geometria

28 Centrális projekció Eltűnő egyenes Ideális pontok Vetítési középpont képsík tárgysík Képsíkkal párhuzamos vetítősugarakkal jellemzett pontok végtelenbe tűnnek C. projekció nem minden euklideszi pontot visz euklideszi pontba – projektív geometria: tömjük be a lyukakat!

29 Projektív geometria Euklideszi geometria Projektív geometria
2 pont meghatároz egy egyenest 2 különböző egyenes legfeljebb 1 pontban metszi egymást 1 ponton keresztül pontosan 1 egyenes megy át, amely nem metsz egy, a pontra nem illeszkedő másik egyenest (párhuzamosság) centrális projekcióra lyukas (ideális pontok) algebrai alap: Descartes koordináta rendszer Projektív geometria Projektív sík = Euklideszi sík pontjai + ideális pontok Minden egyeneshez vegyünk hozzá egy ideális pontot úgy, hogy két egyenes akkor kapja u.a. pontot, ha párhuzamos Az egyenesek halmazát egészítsük ki az ideális pontokat tartalmazó egyenessel 2 különböző egyenes pontosan 1 pontban metszi egymást algebrai alap: homogén koordináták

30 Homogén koordináták [Xh ,Yh ,h] [0,0,0] nem pont
Szemléltetés: mechanikai rendszer súlypontja Összsúly: h = Xh+ Yh + w Pont homogén koordinátái: [Xh ,Yh ,h] Yh P2 Ps w Xh P1 P3 [0,0,0] nem pont Homogén Xh P1+Yh P2 +w P3 Ps= Ha az összsúly h ≠ 0 a súlypont Ps euklideszi pont: Xh+ Yh + w [Xh ,Yh ,h] és [λXh , λYh , λ h] súlypontja ugyanaz!

31 Homogén-Descartes kapcsolat affin pontokra
Keressük egy adott affin (h ≠ 0) projektív térbeli pont megfelelőjét az euklideszi térben (azaz a Descartes koordinátarendszerben) Súlypont analógia: tegyük a súlyokat i=[1 0], j=[0 1] és 0=[0,0] pontokba, és olvassuk ki a súlypont koordinátáit Xh [1,0]+Yh [0,1]+w[0,0] r(Xh ,Yh ,h) = Yh h [0,1] r(Xh ,Yh ,h) = ( , ) Xh h Yh h w Xh Xh h Yh h [0,0] x = y = [1,0]

32 ( , ) Következmények Minden affin ponthoz van: [Xh ,Yh ,h]
(x, y)  [x, y,1] Ha h  0, akkor [Xh ,Yh ,h] affin pont Xh h Yh h ( , )

33 Mi az ideális pont? h=0 (x,y,1) (2x,2y,1) = (x,y,1/2) y x (x,y,0)

34 Egyenes egyenlete átírás homogén koordinátás alakra:
(a,b,c): egy egyenes; (Xh, Yh,h) egy pont Dualitás: pont és egyenes formailag analóg – az összes pontokra érvényes tétel igaz lesz az egyenesekre

35 Párhuzamos egyenesek metszéspontja Descartes koordinátákkal
a1 /b1 /≠ a2 /b2 a1 x + b1 y +c1 = 0 a2 x + b2 y +c2 = 0 x, y a x + b y + c1 = 0 a x + b y + c2 = 0 c1 - c2 = 0  nincs megoldás

36 Párhuzamos egyenesek metszéspontja homogén koordinátákkal
Descartes: a x + by +c = 0 a Xh/h + b Yh/h +c = 0 Homogén: a Xh + b Yh +c h = 0 a Xh + b Yh + c1 h = 0 a Xh + b Yh + c2 h = 0 (c1 - c2) h = 0  h = 0, Xh = b, Yh = -a [b ,-a ,0]

37 [ , ] Beágyazott modell [Xh ,Yh ,h] h Yh [Xh ,Yh ,0] Xh Xh h Yh h
3D euklideszi tér [Xh ,Yh ,h] [ , ] h Xh h Yh h (x, y) = 2D projektív sík [0,0,0] nem pont [Xh ,Yh ,h]·a u.a. pont 1 y x Yh [Xh ,Yh ,0] Xh

38 Projektív egyenes paraméteres egyenlete
[X1 ,Y1 ,h1] h [X2 ,Y2 ,h2] Yh Xh Szakasz: Konvex kombináció! [X(t) ,Y(t) ,h(t)]=[X1 ,Y1 ,h1]·t + [X2 ,Y2 ,h2]·(1-t)

39 Homogén lineáris transzformációk
Euklideszi sík affin transzformációi: [x’, y’] = [x, y] A + p Homogén koordináták lineáris függvényei: [Xh’ ,Yh’ ,h’] = [Xh,Yh,h] T + p Homogén lineáris transzformációk bővebbek: a11 a a21 a p1 p T =

40 Homogén lineáris transzformációk tulajdonságai
Pontot-pontba, egyenest-egyenesbe (pontba), konvex kombinációkat, konvex kombinációkba visznek át Példa: egyenest egyenesbe: [X(t) ,Y(t) ,h(t)]=[X1 ,Y1 ,h1]·t + [X2 ,Y2 ,h2]·(1-t) P(t) = P1·t + P2·(1-t) // · T P*(t) = P(t)·T = (P1·T) ·t + (P2·T) ·(1-t)

41 Példa: Euklideszi geometriában nem lineáris transzformáció
q x, y x’, y’ [x, y, 1] [ x, y, px+qy] x px+qy y px+qy px+qy=1

42 (x,y,1) (2x,2y,1) = (x,y,1/2) y x (-x,-y,1)=(x,y,-1)
Ideális pont (-x,-y,2)=(x,y,-1/2) (x,y,0) Projektív egyenes: körszerű topológia

43 Veszélyek: átfordulási probléma
Ideális pont e =Projektív egyenes (topológia) Szakasz ?????

44 A projektív tér, 3D pontok homogén koordinátái
Zh Összsúly: h = Xh+ Yh + Zh + w Pont homogén koordinátái: [Xh ,Yh ,Zh,h] w Yh Xh Homogén

45 A projektív tér egyenesei és síkjai
[X(t),Y(t),Z(t),h(t)]=[X1,Y1,Z1,h1]·t + [X2 ,Y2,Z2,h2]·(1-t) Euklideszi, Descartes koord: nx x + ny y + nz z + d = 0 Euklideszi, homogén koord: nx Xh/h + ny Yh/h + nz Zh/h +d = 0 Projektív: nx· Xh + ny ·Yh + nz · Zh +d · h = 0 nx ny nz d [Xh ,Yh ,Zh,h]· = 0

46 Invertálható homogén lineáris transzformációk síkot síkba visznek át
P T P* = P·T T-1 (P*·T-1)·NT = 0 P*·(T-1·NT) = 0 P*·(N·(T-1)T)T = 0 P*·N*T = 0 P·NT = 0 N*=N·(T-1)T Inverse-transpose

47 Projektív geometria a számítógépes grafikában
Projektív tér Világ: Euklideszi tér [x,y,z]  (x, y,z,1) (Xh ,Yh ,Zh ,h) (T1T2... Tn) Projektív tér Kép: Euklideszi tér [ , , ] Xh h Yh h Zh h

48 Koordináta-rendszer transzformációk
Analógia a műtermi fényképkészítés és az OpenGL képalkotás között Fényképezőgép elhelyezése, ráirányítása a lefényképezendő térrészre - nézőpontba transzformálás A lefényképezendő objektumok elhelyezése a kívánt pozícióba –modell-transzformáció A megfelelő lencse kiválasztása, zoom beállítása – vetítési transzformáció Papírkép a negatívról – képmező transzformálás

49 OpenGL transzformációk
Homogén lineáris transzformáció (p itt oszlopvektor) p’=Mp Transzformációk kompozíciója p’=M1p és p’’= M2p’ → p’’=M2M1p a közös transzformáció M2M1

50 OpenGL csővezeték 2. 1. MODELVIEW PROJECTION Kamera transzformáció,
Perspektív transzformáció + Vágás homogén koordinátákban Kamera transzformáció, illumináció Virtuális világ 2. 1. szín mélység megjelenítés Képernyő transzf+Raszterizáció+interpoláció

51 Transzformációk Lokális mod. Normalizált képernyő kamera homogén x y z
Modelview matrix Stack Projection matrix Stack Homogén osztás Viewport transzf. window vágás Backface culling Raszterizáció, textúrázás illumináció modellező, kamera (nyírás), normalizáló perspektív

52 OpenGL transzformációs mátrixok kezelése
Műveletek: aktuális mátrix kijelölése, betöltése, vagy megszorzása jobbról egy új mátrixszal

53 OpenGL transzformációs mátrixok kezelése
void glMatrixMode(GLenum mode); Állapotváltozó: megadjuk, hogy melyik mátrixot akarjuk a következő parancsokkal állítani mode lehet: GL_MODELVIEW – modell-nézeti transzformáció (objektumok és a kamera elhelyezkedése és iránya) GL_PROJECTION – kamera modell kiválasztás és fókuszálás GL_TEXTURE – textúra glLoadIdentity(); aktuális mátrix beállítása az egységmátrixra

54 Mátrix betöltése, szabad szorzása
void glLoadMatrix{fd}(const TYPE *m); m pointer által címzett 16 elemű vektor elemeit betölti az aktuális mátrixba oszlopfolytonosan void glMultMatrix{fd}(const TYPE *m); m pointer által címzett 16 elemű vektor elemeiből képzett mátrixszal szorozza az aktuális mátrixot m1 m5 m9 m13 m2 m6 m10 m14 m3 m7 m11 m15 m4 m8 m12 m16 M:

55 OpenGL transzformációs mátrixok kezelése
void glTranslate{fd}(TYPE x, TYPE y, TYPE z) előállítja az [x,y,z,1]T vektorral való eltolás mátrixát és megszorozza vele (jobbról) a kurrens mátrixot void glRotate{fd}(TYPE angle, TYPE x, TYPE y, TYPE z) előállítja az origón áthaladó, [x,y,z]T irányvektorú egyenes körül angle szöggel elforgató mátrixot és megszorozza vele a kurrens mátrixot. A szög előjeles, fokban kell megadni void glScale{fd}(TYPE x, TYPE y, TYPE z); - skálázás

56 Nézőpont és nézeti irány beállítása
Alapértelmezés: nézőpont a modellkoordináta-rendszer origója, nézési irány a negatív z-tengely Új nézőpont megadása: OpenGL: az objektumot toljuk/forgatjuk ellentétes irányban (glTranslate*, glRotate*) GLU: a nézőpont és a kamera nézet iránya közvetlenül is megadható

57 Nézőpont és nézeti irány beállítása
void gluLookAt(GLdouble eyex, GLdouble eyey, GLdouble eyez, GLdouble centerx, GLdouble centery, GLdouble centerz, GLdouble upx, GLdouble upy, GLdouble upz) eyex eyey, eyez: a szem pozíciója, honnan nézünk – új origó centerx,centery,centerz: hová nézünk – új nézési irány azaz a z tengely (negatív) iránya upx, upy, upz: melyik térbeli irány képe legyen függőleges – felfele irány az új y tengely iránya

58 OpenGL transzform. kompozíció
Forgatás (R) majd eltolás (T) elvégzése p’=Rp és p’’= Tp’ → p’’=TRp a közös transzformáció TR: OpenGL mátrixszorzás jobbról történik, ezért a mátrixokat a végrehajtás sorrendjével ellentétes sorrendben kell megadni: (1) lépés glLoadIdentity(); M:=E egységmátrix (2) lépés glTranslated(x,y,z); M:=M∙T=E∙T = T (3) lépés glRotated(angle,x,y,z); M:=M∙R=E∙T∙R = TR

59 MODELVIEW Transzformáció
eye v w u -1 ux uy uz 0 vx vy vz 0 wx wy wz 0 eye Kamera koordinátarendszer glMatrixMode(GL_MODELVIEW); glLoadIdentity( ); gluLookAt(eyex, eyey, eyez, vrpx, vrpy, vrpz,upx, upy, upz); //VIEW glTranslatef(px, py,pz); //MODEL glRotatef(ang, axisx,axisy,axisz); glScalef(sx, sy, sz); glMultMatrixf( mat[4][4] ); sorrend

60 OpenGL vetítési transzfromációk
Centrális vetítés (valószerű képek): glFrustum() glPerspective() Merőleges vetítés (méret/méretarány helyes képek): glOrtho() glOrtho2D()

61 Projektív transzformáció
void glFrustum(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); az ábrán csonkagúlával meghatározott centrális vetitési mártixot álltítja elő és megszorozza vele a kurrens mátrixot a near és far értékek a közeli és távoli vágósiknak a nézőponttól mért távolságát jelentik, mindig pozitivak. A csonkagúla fedőlapján az egyik átló végpontjának koordinátái (l,b-n) és (r,t,-n) az így megadott csonkagúla nem feltétlenül egyenes - a zs tengely és a fedőlap metszéspontja nem feltétlenül a fedőlap átlóinak metszéspontjával

62 Projektív transzformáció
void gluPerspective(GLdouble fovy, GLdouble aspect, GLdouble near, GLdouble far);

63 Merőleges vetítés void glOrtho(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top, GLdouble near, GLdouble far); a nézőpont helye itt közömbös, csak a nézési irány számít a near és far paraméterek itt negatívok is lehetnek

64 2D alakzatok ábrázolása
void gluOrtho2D(GLdouble left, GLdouble right, GLdouble bottom, GLdouble top); 2D: nem kell közeli és távoli vágósíkot megadni (automatikusan [-1,1])

65 PROJECTION Transzformáció
Kamera koordinátarendszer Homogén (1, 1, 1, 1) bp fp glMatrixMode(GL_PROJECTION); glLoadIdentity( ); gluPerspective(fov, asp, fp, bp); (-1,-1,-1, 1) 1/(tg(fov/2)·asp) /tg(fov/2) (fp+bp)/(bp-fp) -1 fp*bp/(bp-fp) 0 Projekció után homogén osztás: normalizált koordináták

66 Képmező transzformáció
void glViewport(GLint x, GLint y, GLsizei width, GLsizei height); képmező: téglalap alakú rajzterület a képernyőn oldalai párhuzamosak az ablak oldalaival (x,y): a képmező bal alsó sarka width, height: a képmező szélessége, hosszúsága

67 Képernyő Transzformáció
(1, 1, 1) (-1,-1,-1) 1 Normalizált képernyő: Vágás és homogén osztás után glViewport( 0, 0, width, height );

68 Aktuális transzf. mentése és újra töltése
void glPushMatrix(void); A glMatrixMode() paranccsal beállított kurrens verem minden elemét egy szinttel lejjebb tolja. A legfelső (kurrens) mátrix a második mátrix másolata lesz void glPopMatrix(void); A glMatrixMode() paranccsal beállított kurrens verem legfelsőbb elemét eldobja, és minden további elemet egy szinttel feljebb tol.


Letölteni ppt "Geometriai transzformációk"

Hasonló előadás


Google Hirdetések