Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
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 2u sin v y = y0 + r sin 2u 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 jó 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
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.