2D képszintézis és textúrák

Slides:



Advertisements
Hasonló előadás
Koordináta transzformációk 2
Advertisements

L ÁTHATÓSÁG MEGHATÁROZÁSA tavaszi félév.
ALAKZATOK TRANSZFORMÁCIÓJA ÚJ KÉPSÍKOK BEVEZETÉSÉVEL
Számpélda a földelt kollektoros erősítőre Adatok: Rg=0.5k; RB=47k;
Grafika. 2 Mértékek és koordináta rendszer Használjuk a RGB és QBColor függvényeket a színekhez Grafika létrehozása Load/change picture futási időben.
Koordináta transzformációk
Koordináta transzformációk
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...
Geometriai transzformációk
Inkrementális 3D képszintézis
GPU Szirmay-Kalos László.
Geometriai modellezés
Sugárkövetés: ray-casting, ray-tracing
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ó.
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ó
Sugárkövetés: ray-casting, ray-tracing 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ó.
Csoportosítás megadása: Δx – csoport szélesség
GRAFIKUS PRIMITÍVEK KITÖLTÉSE
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
Színek és megvilágítás
A számítógépes grafika céljai és feladatai
A számítógépes grafika céljai és feladatai
A virtuális technológia alapjai Dr. Horváth László Budapesti Műszaki Főiskola Neumann János Informatikai Kar, Alkalmazott.
Modellezés és szimuláció c. tantárgy Óbudai Egyetem Neumann János Informatikai Kar Alkalmazott Matematikai Intézet Mechatronikai Mérnöki MSc 2. Kontextuális.
Mérés koordináta mérőgépen KMG programozásának alapjai
A GEOMETRIA MODELLEZÉSE
3. Vetületi ábrázolások számítási eljárásai
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.
Relációk.
Diplomamunka Geometriai invariánsokat interpoláló rekurzívan finomítható felületek Valasek Gábor ELTE IK, 2008.
Geometriai invariánsokat interpoláló rekurzívan finomítható felületek
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése
3. Vetületi ábrázolások számítási eljárásai
Pixel műveletek, képek Szirmay-Kalos László.
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
Animáció Szirmay-Kalos László.
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
Geometriai transzformációk
2.2. Az egyenes és a sík egyenlete
Számítógépes grafika I. AUTOCAD alapok 2. előadás.
Geometriai transzformációk
Bevezetés - Vonalak. Koordinátarendszer Windows form x y Az y lefelé nő Transzformáció a hagyományosra x Eltolás y Ellentett és eltolás.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010 Geometriai modellezés 2. előadás.
Informatikai eszközök a virtuális valóság szolgálatában Hapák József ELTE-IK X. Eötvös Konferencia.
4. A grafikus szerelőszalag - áttekintés 4.0. Bevezeté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.
Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2010
Vizualizáció és képszintézis
Grafikus Rendszerek 6. Camera.
Vizualizáció és képszintézis
Görbék, felületek.
Bevezetés Tematika Számonkérés Irodalom
Előadás másolata:

2D képszintézis és textúrák 6. előadás Számítógépes grafika, PPKE-ITK, Benedek Csaba, 2013

Számítógépes grafika feladata modellezés Virtuális világ modell képszintézis világ = sík Metafórák: 2D rajzolás

2D képszintézis Cél: objektumok képernyőre transzformálása és a nézetbe eső részek megjelenítése Megjelenítés = a megfelelő pixelek kiszínezése Kiindulás: lokális koordináta rendszerekben definiált objektumok Fő feladatok: Objektumok transzformálása a világkoord.rsz-be Ablak téglalap elhelyezése (2D kamera) A képernyő koordinátarendszerébe való vetítés A geometriai elemeket közelítő pixelek meghatározása

2D képszintézis lépései 1. Vektorizáció: A virtuális világban tárolt szabadformájú elemeket (például körívek, interpolációs vagy spline görbék) pontok, szakaszok és poligonok halmazával közelítjük. 2. Transzformáció: a lokális koord.rsz →világ koord.rsz → képernyő koord.rsz, homogén lineáris transzformáció 3. Vágás: csak az jeleníthető meg, ami a nézet téglalapján belül van, 4. Pásztakonverzió, avagy raszterizáció: geometriai elemek közelítése pixelek átszínezésével

2D képszintézis lépései

Vektorizáció A szabadformájú elemek közelítése pontokkal, szakaszokkal vagy poligonokkal Homogén lineáris transzformáció és vágás nem változtatja meg az elemek típusát Felosztás finomsága paraméter Pl néhány pixel hosszú szakaszok nem növelik jelentősen a raszterizáció amúgy is jenlévő hibáját r(t) [0,1]: 0, t1 , t2 , ... , tn , 1 r1 =r(0), r2 = r(t2), … , rn = r(1) r2 rn r1

Modellezési transzformáció Sx 0 0 0 Sy 0 0 0 1 cos f sin f 0 -sin f cos f 0 0 0 1 1 0 0 0 1 0 px py 1 TM ux uy 0 vx vy 0 ox oy 1 (x, y) v u [x, y, 1] = [a, b, 1]  (a, b) o [0, 0, 1] [ox oy 1 ] [1, 0, 1] [ox+ux oy+uy 1 ] p= [x,y] u=[ux,uy] v=[vx,vy] [0, 1, 1] [ox+vx oy+vy 1 ] p=(x, y) = o + au + bv

Ablak-nézet transzformáció ww vw ablak nézet (x, y) (X, Y) wh vh TV (vx,vy) (wx,wy) X = (x-wx) vw/ww + vx Y = (y-wy) vh/wh + vy vw/ww 0 0 0 vh/wh 0 vx-wxvw/ww vy-wyvh/wh 1 [X, Y, 1] = [x, y, 1]

Összetett transzformáció [X, Y, 1] = ([a, b, 1] TM ) TV [X, Y, 1] = [a, b, 1] (TM TV ) = [a, b, 1] TC TV nézeti transzformáció számítása for each object o TM előállítása TC = TM TV for each point of object o: transzformáció TC –vel enfor endfor

Vágás Ablakra vs. nézetre vágás Vektorizáció miatt: pont, szakasz, poligon Pontok vágása x > xmin, x < xmax, y > ymin, y < ymax ymax ymin xmin xmax

Szakasz vágás félsíkra Esetek (példa: xmax egyenes): minkét végpont jó oldalon: triviális elfogadás minkét végpont rossz oldalon: triviális eldobás végpontok ellentétes oldalon: metszéspont számítás kell xmax x1, y1 x2, y2 xmax x1, y1 x2, y2 xi, yi x2, y2 x1, y1 xmax

Szakasz vágás félsíkra: metszéspont számítás xmax xi, yi x2, y2 x1, y1 x(t) = x1 + (x2 - x1)t, y(t) = y1 + (y2 - y1)t x = xmax Metszéspont: xmax= x1 + (x2 - x1)t  t = (xmax-x1)/(x2-x1) xi = xmax yi = y1 + (y2 - y1) (xmax-x1)/(x2-x1)

Cohen-Sutherland vágás Kód=C3C2C1C0 1001 1000 1100 C3 0001 0000 0100 C1 0110 0011 0010 C0 C2

Cohen-Sutherland algoritmus #define Code(p) ((p.x < xmin) + ((p.y < ymin)<<1) + \\ ((p.x > xmax)<<2) + ((p.y > ymax)<<3) bool LineClip(Vector& p1, Vector& p2) { for( ; ; ) { int c1 = Code(p1), c2 = Code(p2); if (c1 == 0 && c2 == 0) return true; if ((c1 & c2) != 0) return false; if ((c1 & 1)) p1 = IntersectX(p1, p2, xmin); else if ((c1 & 2)) p1 = IntersectY(p1, p2, ymin); else if ((c1 & 4)) p1 = IntersectX(p1, p2, xmax); else if ((c1 & 8)) p1 = IntersectY(p1, p2, ymax); else if ((c2 & 1)) p2 = IntersectX(p1, p2, xmin); else if ((c2 & 2)) p2 = IntersectY(p1, p2, ymin); else if ((c2 & 4)) p2 = IntersectX(p1, p2, xmax); else if ((c2 & 8)) p2 = IntersectY(p1, p2, ymax); }

Poligonok vágása Továbbra is: négy félsíkra vágás... Csúcspont belső pont: a vágott poligonnak is belső pontja Csúcspont külső pont: eldobhatjuk, de egy új csúcspont is létrejöhet, ha az aktuális él metszi a vágás egyenesét!

Sutherland-Hodgeman poligonvágás PolygonClip(p[n]  q[m]) m = 0; for( i=0; i < n; i++) { if (p[i] belső) { q[m++] = p[i]; if (p[i+1] külső) q[m++] = Intersect(p[i], p[i+1], vágóegyenes); } else { if (p[i+1] belső) }

Konkáv poligonok vágása Konkáv poligon több részre eshet szét q[2] q[5] q[1] q[6] q[3] q[7] q[4] q[0] Kétszeres él = nem él valójában

Raszterizáció Alakzatok formáinak közelítése: pixelek átszínezése útján Alapegység: pixel egy geometria objektumhoz több ezer/millió pixel tartozhat Következmény: az elvárt sebesség nagyságrendileg haladja meg az eddigi műveleteket!

Pászta konverzió (raszterizáció) model Geometriai primitívek: 0.1-1 microsec / primitív transzformáció vágás raszterizáció Pixel műveletek Pixelek 10-50 nanosec / pixel rasztertár

Szakasz rajzolás Elvárások: a szakasz (1) ne legyen lyukas (2) ne legyen túl vastag Példa: enyhén emelkedő egyenes: 0 < m < 1: minden oszlopban 1 pixel Egyenes egyenlete: y = mx + b Egyeneshúzás (0 < m < 1): m=(y2-y1)/(x2-x1) b=y1-x1*(y2-y1)/(x2-x1) for( x = x1; x <= x2; x++) { Y = m*x + b; y = Round( Y ); write( x, y ); } x1 x2

Inkrementális elv Y(X) kiszámítása Szakasz rajzolás: Y(X) = F( Y(X-1) ) = Y(X-1) + dY/dX Szakasz rajzolás: Y(X) = mX + b = m(X-1)+b+m Y(X) = F( Y(X-1) ) = Y(X-1) + m Összeadás: fixpontos ábrázolás: y = Y 2T T: hiba < 1 a leghosszabb műveletsornál N 2-T < 1: T > log2 N N: leghosszabb szakasz hossza round( y ): y+0.5-t csonkítjuk (= „tört” bitek levágása)

DDA szakaszrajzolás DDADrawLine(x1, y1, x2, y2) { m = (y2 - y1)/(x2 - x1) y = y1 + 0.5 FOR X = x1 TO x2 { Y = round(y) trunc(y) WRITE(X, Y, color) y = y+m }

DDA szakaszrajzoló hardver X Y X számláló y regiszter 0.5 = .1000000 CLK S x1 y1 m

Bresenham szakaszrajzoló algoritmus DDA: gyors, de a fixpontos ábrázolás és egészrész képzés eltolást (shift) igényel szakaszonként egyszer lebegőpontos osztás (m) Megoldás: Bresenham algorithmusa (lásd tankönyv 103. oldal...

Terület elárasztás működése Cél: adott kezdeti pontból egy adott határvonal átlépése nélkül elérhető pixelek átszínezése Flood(x, y) { if (pixel[x][y] belső pont) { Write(x, y, color); Flood(x, y-1); Flood(x, y+1); Flood(x-1, y); Flood(x+1, y); } 2 2 1 2 mag 1 2 1 1 Belső pont = sötétkék

Területkitöltés Geometriai reprezentáció alapján Belső pixel p1,p2,...,pn csúcsok p1-p2, p2-p3,...,pn-p1 élek Belső pixel páratlanszor metszünk élt, ha végtelenből jövünk végtelen: vágás után a nézet széle

Területkitöltés Feldolgozás: vízszintes pásztánként: p2 p4 x1 x4 x3 x2 y p1 p3

Naív módszer: FillPolygonSlow(q, m) % q = [q[0],…,q[m-1]] for Y = 0 to Ymax do scanline = Y k=0 for e=0 to m-1 do if scanline a q[e] és q[e+1] között van then x[k++]=(q[e],q[e+1]) szakasz és a scanline metszéspontja endif endfor x[k] tömb rendezése for i=0 to k/2-1 do for X=x[2i] to x[2i+1] do Pixel(X,Y,Color(X,Y)) end Nem hatékony, mert minden pásztánál minden élt figyelünk 

Kitöltés gyorsítása Vizsgálatok csak az aktív élekre aktív élek frissítése a megelőző pásztából Metszéspontszámítás inkrementális elv szerint a megelőző pászta metszéspontjából: Dx/Dy Dx/Dy y+2 y+1 y x(y) x(y+1) x(y+2)

Aktív él lista Metszéspont x koordinátája az aktuális pásztával AET: aktív éltábla – az aktuális pásztánál releváns élek AET ymax Dx/Dy x next ymax Dx/Dy x next ET éltábla: előzetesen rendezzük valamennyi élet ymin érték szerint ymin=1024 ymax Dx/Dy x1 next ymax Dx/Dy x1 next ymin=1 ymin=0

Poligonkitöltés FillPolygonFast(q, m) % q = [q[0],…,q[m-1]] for Y = 0 to Ymax do for e=0 to m-1 do edge = (q[e],q[e+1]) if ymin(edge) == Y then Put_AET(edge) endfor for minden edge élre az AET-ben do if ymax(edge) >= Y then Delete_AET(edge) Resort_AET for minden második l élre az AET-ben do for X=round(x[l]) to round(x[l+1]) to SetPixelColor(X,Y,Color(X,Y)) for minden l élre az AET-ben do x[l]+=dx/dy end

2. rész - Világmodellek modellezés Virtuális világ modell világ = sík képszintézis világ = sík Metafórák: 2D rajzolás

Testek Ellenpéldák Érvényes testek: reguláris halmaz nem lehetnek alacsony dimenziós elfajulásai minden határpont mellett van belső pont Garantáltan érvényes testet építő módszerek 2.5 dimenziós eljárások speciális felületi modellezés: B-rep Konstruktív tömörtest geometria

2.5 dimenziós módszerek Kihúzás: extrude Forgatás: rotate

Felületmodellezők Test = határfelületek gyűjteménye Topológiai ellenőrzés (Euler tétel): csúcs + lap = él + 2

B-rep: Euler operátorok

Gyakorlati Euler operátorok Edge split csúcs + lap = él + 2 Poligon split Élzsugorítás v. csúcspont összevonás -Edge Collapse

Gyakorlati Euler operátorok Poligon kihúzás (Face extrude): ep: a poligon éleinek a száma 2ep új él, ep+1 új lap, ep új csúcs 1 eltűnő lap e’=e+2ep l’=l+ep+1-1 c’=c+ep l’+c’=l+c+2ep=e+2+2ep=e’+2

Poligon modellezés: téglatest

Poligon modellezés: 1. extruding poligon kihúzás

Poligon modellezés: 2. extruding mégegy poligon kihúzás

Poligon modellezés: 4. és 5. extruding még két poligon kihúzás

Poligon modellezés: 6. extruding

Subdivision simítás

Konstruktív tömörtest geometria (Constuctive Solid Geometry (CSG) Összetett testeket primitív testekből halmazműveletek (egyesítés, metszet, különbség) alkalmazásával építi fel Regularizált műveletek

CSG fa 46

Virtuális világ tárolása

Belső világ tárolása Geometria: pontok koordinátái Topológia: élek-pontok; lapok-pontok;... hierarchia: objektum-lapok-élek-pontok transzformáció: lokális és világkoordináta rendszerek modellező képszintézis világ VRML, 3DS, OBJ, DXF IGES, MB, MD2,... fáljkonv 48

Egyszerű hierarchikus modell Objektum obj1 szakasz1 Bezier kör Primitív point1 point1 point1 Pont point3 point4 point5 point6 49

Geometria kiemelése obj1 szakasz1 Bezier kör x y 50

Szárnyasél adatstruktúra class BRepCore { … public: void MEVVF(…); void MVE(float t, Edge& e); void MEF(Vertex& v1,Vertex& v2); void Move(Vertex& v, Vector p); }; class BRep : BRepCore { void FaceExtrude( ); void FaceSplit( ); void EdgeCollapse( ); void VertexSplit( ); él Pont +(x,y) lap 51

Hierarchikus színtér gráfok Ferrari haladási transzformáció Karosszéria Kerék1 transzformáció Kerék2 transzformáció Kerék Forgatási transzformáció kerék

3. rész - Textúrázás modellezés Virtuális világ modell világ = sík képszintézis világ = sík Metafórák: 2D rajzolás Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Textúra leképzés Összetett mintázatú felületek (pl perzsaszőnyeg) BRDF-leírása nehézkes bonyolult modellezés, hosszú képszintézis  Megoldás: textúra Bittérképes textúra: 2-D képet rendelünk a felülethez, a képpontok a felületelem színét tartalmazzák Procedurális textúra: generáló műveletsorral írjuk le a mintázatot

Textúra leképzés: anyagjellemzők változnak a felületen

(2D) Textúra leképzés Paraméterezés Nézeti transzformáció v (x,y,z) z u v (x,y,z) z y x Kép (elemei a „texel”-ek) vagy függvény x = fx(u,v) y = fy(u,v) z = fz(u,v) u,v  [0,1]

Textúra-tér - képtér Textúra alapú leképzés: a textúra-térben levő ponthoz keresi meg a hozzá tartozó pixelt Hatékony, de nem garantálja hogy a textúra-térben kijelölt pontok a képernyőn is egyenletesen helyezkednek el („lyukas lehet a kép”) A képtér alapú leképzés: a pixelhez keresi meg a hozzá tartozó textúra elemet Vetítési transzformáció inverze! Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Textúra leképzés sugárkövetésnél Inverz paraméterezés u v (x,y,z) z y x Gömb példa: x = x0 + r cos 2u sin v y = y0 + r sin 2u sin v z = z0 + r cos v u,v  [0,1] u = 1/2 (atan2((y-y0), (x-x0)) +) v = 1/ acos( (z-z0)/r )

Modell-világ-képernyő transzf. Inkrementális képszintézis Paraméterezés Modell-világ-képernyő transzf. [Xh, Yh, Zh, h] = [x,y,z,1]TC (X,Y)= [Xh/h, Yh/h] u v (x3,y3,z3) Y (u1, v1) z (X1,Y1) (x2,y2,z2) (u3, v3) (u2, v2) (X3,Y3) (x1,y1,z1) (X2,Y2) y X x

Lineáris interpoláció Leképzés: 2x3 mátrix 6 egyenlet 6 ismeretlen u v u=au X+buY+cu v=av X+bvY+cv Y (X1,Y1) (u1, v1) (u3, v3) (u2, v2) (X3,Y3) u(X,Y) X (X2,Y2) X számláló u regiszter CLK S X Interpolációs feltétel: au lineáris u1=au X1+buY1+cu u2=au X2+buY2+cu u3=au X3+buY3+cu jó v1=av X1+bvY1+cv v2=av X2+bvY2+cv v3=av X3+bvY3+cv

P: homogén lineáris Tv: homogén lineáris u v (x,y,z) z y x Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Perspektíva helyes textúrázás Paraméterezés Modell-világ-képernyő transzf. xq=ax u+bxv+cx yq=ay u+byv+cy zq=az u+bzv+cz q=aq u+bqv+cq [Xh, Yh, h] = [x q,y q,z q,q]TV(4x3) (X,Y) = [Xh/h, Yh/h] u v Y [Xh1,Yh1,h1] (u1, v1) [Xh3,Yh3,h3] z (u3, v3) (u2, v2) y [Xh2,Yh2,h2] x X [u,v,1]TC(3x3) = [Xh, Yh, h], [u/h,v/h,1/h] = [X,Y,1]TC-1

TC-1 mátrixelemek [u/h,v/h,1/h] = [X,Y,1]TC-1 u v Y au, av , ah bu, bv , bh cu, cv , ch TC-1 = [u/h,v/h,1/h] = [X,Y,1]TC-1 u v Y [Xh1,Yh1,h1](X1,Y1) (u1, v1) (u3, v3) (u2, v2) [Xh3,Yh3,h3] ( X3,Y3 ) [Xh2,Yh2,h2](X2,Y2) X u1/h1 =au X1+buY1+cu u2/h2 =au X2+buY2+cu u3/h3 =au X3+buY3+cu v1/h1 =av X1+bvY1+cv v1/h1 =av X2+bvY2+cv v1/h1 =av X3+bvY3+cv 1/h1=ah X1+bhY1+cw 1/h2=ah X2+bhY2+cw 1/h3=ah X3+bhY3+cw au ,bu,cu av ,bv,cv ah ,bh,ch Tc-1: leképzés: 3x3 mátrix 9 egyenlet 9 ismeretlen

Perspektíva helyes textúrázás u v Y Perspektív helyes X lineáris au X+buY+cu u/h = au X+buY+cu v/h = av X+bvY+cv 1/h = ah X+bhY+ch u = v = ah X+bhY+ch av X+bvY+cv ah X+bhY+ch

Perspektíva helyes interpolációs hw. R G B X Textúra memória u v Div Div [u/h](X,Y) [v/h](X,Y) [1/h](X,Y) X számláló [u/h] regiszter [v/h] regiszter [1/h] regiszter S S S CLK au av ah

Textúra függvény definíciója Parametrikus felületeknél triviális 2. Implicit felületeknél és poligonmodellnél: közvetítő felületek v (u1,v1) (u3,v3) (u2,v2) (1,1) (0,0) u (x3,y3,z3) z (x2,y2,z2) (x1,y1,z1) közvetítő felület = téglalap y x

Henger (gömb) közvetítő felület

Téglalap közvetítő felület: textúratér nézet A kiterített közvetítő felületre texúrázott minta látható

Téglalap közvetítő felület: textúratér nézet

Textúrázott űrhajó

Textúrázás = kiterítés Torzításcsökkentés relaxációval

Textúrák szűrése v Y pixel ősképe u X

Mip-map adatstruktúra Y X

Bucka leképzés (Bump mapping) Tároljuk a normálvektort táblázatban vagy a felületi elmozdulást

Textúrák az OpenGL-ben Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

A textúraobjektumok elnevezése void glGenTextures(GLsizei n, GLuint *textureNames); n darab, jelenleg használaton kívüli textúraobjektum nevet a vissza a textureNames tömbbe. A visszaadott nevek nem feltétlenül egymást követő egészek Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

A textúraobjektumok létrehozása, használata void glBindTexture(GLenum target, GLuint textureName); Target: GL_TEXTURE_1D, GL_TEXTURE_2D, vagy GL_TEXTURE_3D, Ha először hívjuk a textureName azonosítóval: létrehoz egy textútraobjektumot és hozzákapcsolja a névhez Ha nem először hívjuk: textureName azonosítójú textúrát teszi kurrenssé Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Textúra beállítása void glTexParameter{if}(GLenum target, GLenum pname, TYPE param); Target: GL_TEXTURE_1D, GL_TEXTURE_2D, vagy GL_TEXTURE_3D, Pname, param: számos paraméterezési lehetőség (lásd OpenGL referencia) Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Textúra beállítás - példák glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); Nagyításhoz ill kicsinyítéshez használt interpoláció (GL_NEAREST mellett lehet még GL_LINEAR) Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Textúra beállítás - példák glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT); x és y (itt s és t) irányú ismétlődés (wrap=burkolat), lehet: GL_CLAMP - rögzített GL_REPEAT – ismétlődő parketta Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Textúra beállítás - példák void glTexImage2D(GLenum target, GLint level, GLint internalFormat, GLsizei width, GLsizei height, GLint border, GLenum format, GLenum type, const GLvoid *texels); 2D struktúrát hoz létre. Target: GL_TEXTURE_2D (vagy más) level > 0 ha több felbontást használunk internalFormat: használt színkomponensek pl GL_RGBA GLsizei width, GLsizei height: a textúraobj mérete Border: határ szélessége (lehet 0) Format, type: a textúraadatok formátuma pl format=GL_RGBA, type= GL_UNSIGNED_BYTE texels: a textúra-minta adatait tartalmazó tömb Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Minta textúra inicializálása static GLubyte textDescriptor[height][width][4]; static GLuint texName[2]; ... glGenTextures(1, texName); glBindTexture(GL_TEXTURE_2D, texName[0]); glTexParameteri(…); … glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, textDescriptor); Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Textúra paraméterezése void glTexCoord{1234}{sifd}(TYPE coords); Textúra kooridnátái: s,t,r,q (~x,y,z,w), ahol q=1 ált. A kurrens (s,t,r,q) textúrakoordinátákat állítja be. Az ezt követően létrehozott csúcspontokhoz a rendszer ezt a textúrakoordinátát rendeli Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Textúra paraméterezése, példa glBegin(GL_QUADS); glTexCoord2f(0, 0); glVertex3d(1,-1,0); glTexCoord2f(0, 1); glVertex3d(-1,-1,0); glTexCoord2f(1, 1); glVertex3d(-1,1,0); glTexCoord2f(1, 0); glVertex3d(1,1,0); glEnd(); Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME

Textúra és saját szín kombinálása glTexEnvf(GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_REPLACE); GL_TEXTURE_ENV_MODE lehet: GL_REPLACE – a textúrával felülírjuk a saját v. megvilágításból adódó színt GL_MODULATE – a megjelenített színt a textúrából és a saját színből közösen számítjuk Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME Számítógépes Grafika 2010, PPKE ITK, Benedek Csaba Tanagyag forrás ® Szirmay-Kalos László, BME