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

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

Hasonló előadás


Az előadások a következő témára: "2D képszintézis és textúrák"— Előadás másolata:

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

2 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

3 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

4 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

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

6 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

7 Modellezési transzformáció
Sx 0 Sy 0 cos f sin f 0 -sin f cos f 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, 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

8 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 vh/wh vx-wxvw/ww vy-wyvh/wh 1 [X, Y, 1] = [x, y, 1]

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

10 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

11 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

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

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

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

15 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!

16 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ő) }

17 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

18 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!

19 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

20 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

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

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

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

24 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...

25 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

26 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

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

28 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 

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

30 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

31 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

32 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

33 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

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

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

36 B-rep: Euler operátorok

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

38 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

39 Poligon modellezés: téglatest

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

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

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

43 Poligon modellezés: 6. extruding

44 Subdivision simítás

45 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

46 CSG fa 46

47 Virtuális világ tárolása

48 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

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

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

51 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

52 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

53 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

54 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

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

56 (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]

57 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

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

59 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

60 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 v1=av X1+bvY1+cv v2=av X2+bvY2+cv v3=av X3+bvY3+cv

61 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

62 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

63 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

64 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

65 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

66 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

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

68 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ó

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

70 Textúrázott űrhajó

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

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

73 Mip-map adatstruktúra
Y X

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

75 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

76 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

77 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

78 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

79 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

80 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

81 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

82 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

83 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

84 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

85 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


Letölteni ppt "2D képszintézis és textúrák"

Hasonló előadás


Google Hirdetések