Geometriai transzformációk

Slides:



Advertisements
Hasonló előadás
Készítette: Nagy Mihály tanár Perecsen, 2006.
Advertisements

Készítette: Szinai Adrienn
Az egyenest meghatározó adatok a koordináta-rendszerben
ALAKZATOK TRANSZFORMÁCIÓJA ÚJ KÉPSÍKOK BEVEZETÉSÉVEL
2D képszintézis Szirmay-Kalos László.
Geometriai Transzformációk
2D grafikus rendszerek Szirmay-Kalos László. 2D grafikus editor: GUI, use-case, dinamikus modell L L L R LD LU MouseLDown első pont MouseLDown második...
Analitikus (koordináta) geometriai gyorstalpaló
Geometriai transzformációk
Inkrementális 3D képszintézis
Geometriai modellezés
Animáció Szirmay-Kalos László. Animáció = időfüggés T1(t)T1(t) T2(t)T2(t) TV(t)TV(t) Transzformációk alak szín megjelenítési attribútumok, stb.
Inkrementális 3D képszintézis Szirmay-Kalos László.
OpenGL Szirmay-Kalos László In theory, there is no difference
2D képszintézis Szirmay-Kalos László. Számítógépes grafika feladata képszintézis Virtuális világ modell modellezés Metafórák: 2D rajzolás világ = sík.
Geometriai modellezés
Számítógépes grafika Szirmay-Kalos László
Számítógépes grafika Szirmay-Kalos László
Bevezetés.  A számítógépes grafika inkrementális képszintézis algoritmusának hardver realizációja  Teljesítménykövetelmények:  Animáció: néhány nsec.
Regresszió számítás Mérnöki létesítmények ellenőrzése, terveknek megfelelése Geodéziai mérések – pontok helyzete, pontszerű információ Lineáris regresszió.
Számítógépes Grafika 6. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.
A vetítések geometriája
Transzformációk kucg.korea.ac.kr.
A számítógépi grafika matematikai háttere
Számítógépes grafika, PPKE-ITK, Benedek Csaba, D képszintézis 4. előadás.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 Geometriai modellezés 2. előadás.
Textúrák, világmodellek
A számítógépes grafika céljai és feladatai
Kamerák és képalkotás Vámossy Zoltán 2004
3. Vetületi ábrázolások számítási eljárásai
Web-grafika II (SVG) 2. gyakorlat Kereszty Gábor.
P z : egy „elemi” projektív transzformáció M = ( m m m m ); P z = ( ) | m m m m | | | | m m m m | | | ( p p p p ) ( 0 0 r 1 ) az.
2. Koordináta-rendszerek és transzformációk 2.1. Koordináta-rendszerek 2.2. Az egyenes és a sík egyenlete 2.3. Affin transzformációk 2.4. Projektív transzformációk.
Számítógépes geometria
2D képszintézis és textúrák
Koordináta-geometria
3.3. Axonometrikus ábrázolások Rövid áttekintés
2. Koordináta-rendszerek és transzformációk
2. Koordináta-rendszerek és transzformációk
3. Vetületi ábrázolások számítási eljárásai
2008/2009 tavasz Klár Gergely  Gyakorlatok időpontjai: ◦ Szerda 10:05–11:35 ◦ Csütörtök 10:00+ε –11:30+ε  Gyakvez: ◦ Klár Gergely ◦
16. Modul Egybevágóságok.
Vektorok különbsége e-x = [ex-xx ey-xy ez-xz] e e-x x szempozíció
2D képszintézis Szirmay-Kalos László.
Analitikus geometria gyorstalpaló
Inkrementális 3D képszintézis Szirmay-Kalos László.
Számítógépes grafika Bevezetés
Transzformációk Szirmay-Kalos László. Transzformációk (x,y) (x’,y’) = T(x,y) l Tönkre tehetik az egyenletet l Korlátozzuk a transformációkat és az alakzatokat.
Inkrementális 3D képszintézis
3. Vetületi ábrázolások számítási eljárásai
2.2. Az egyenes és a sík egyenlete
2. Koordináta-rendszerek és transzformációk
Lineáris algebra.
1 Vektorok, mátrixok.
Bevezetés a számítógépi grafikába 2. Paraméteres görbék Paraméteres görbe: 2D-ben: paraméter: általában: kikötések: legyen folytonos legyen folytonosan.
Számítógépes Grafika 6. gyakorlat Programtervező informatikus (esti)‏ 2009/2010 őszi félév.
Műveletek, függvények és tulajdonságaik Mátrix struktúrák:
Algebrai struktúrák: csoport, gyűrű, test. RSA Cryptosystem/ Titkosítási rendszer Rivest, Shamir, Adelman (1978) RSA a neten leggyakrabban használt.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 Geometriai modellezés 2. előadás.
ALAKZATOK TRANSZFORMÁCIÓJA ÚJ KÉPSÍKOK BEVEZETÉSÉVEL
A számítógépes grafika alapjai, PPKE-ITK, Benedek Csaba, 2010 Tanagyag forrás © Szirmay-Kalos László, BME A számítógépes grafika céljai és feladatai 1.
Geometriai feladatok programozása Geometriai programozás Szlávi Péter ELTE IK Média- és Oktatásinformatika Tanszék 2010.
3.2. Axonometria – Műszaki rajzok párhuzamos vetítéssel
Bevezetés a számítógépi grafikába
1 Viewing Megtekintés. 2 Miről lesz szó? ► Modellek megtekintése különböző, vagy tetszőleges irányokból ► Nézőpont áthelyezése a háromdimenziós térben.
Bevezetés.  Miért …  … egyszálúan programozunk?  … probléma ez?  Hogyan …  … változik ez?  … tudjuk kihasználni?  Megéri-e párhuzamosítani?
Bevezetés a számítógépi grafikába 1.Bevezetés: A Számítógépi grafika tárgya 2.Képek kódolása 3.A geometrikus grafika alapjai 4.Koordináta-rendszerek és.
Készítette: Horváth Zoltán
Grafikus Rendszerek 6. Camera.
Szécsi László 3D Grafikus Rendszerek 7. előadás
Előadás másolata:

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

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

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

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

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

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

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

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

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

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

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); } };

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

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

… é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

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 0 0 Sy Fix pont: origó r’ = r cos φ sin φ -sin φ cos φ r’ = r Fix pont: origó

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

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;

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

Műveletek sorrendje

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

y y β x x

y y β β h x x

y y β α β h α

y β α x

Ö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 )

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 a12 0 a21 a22 0 p1 p2 1 [r’, 1] = [r, 1] = [r A + p, 1] p [r’,1] = (...([r,1] T1) T2)... Tn) = [r,1] (T1T2... Tn)

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

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!

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

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!

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]

( , ) 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 ( , )

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

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

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

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]

[ , ] 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

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)

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 a12 0 a21 a22 0 p1 p2 1 T =

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)

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

(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

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

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

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

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

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

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

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

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ó

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

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

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

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:

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

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ó

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

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

MODELVIEW Transzformáció eye v w u -1 ux uy uz 0 vx vy vz 0 wx wy wz 0 eye 1 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

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()

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

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

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

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])

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) 0 0 0 0 1/tg(fov/2) 0 0 0 0 -(fp+bp)/(bp-fp) -1 0 0 -2fp*bp/(bp-fp) 0 Projekció után homogén osztás: normalizált koordináták

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

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 );

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.