Inkrementális képsintéis Inkrementális 3D képsintéis Sirma-Kalos Lásló Árnalás, láthatóság nehé, különösen általános heletu objektumokra koherencia: oldjuk meg nagobb egségekre feleslegesen ne sámoljunk: vágás transformációk: minden feladatho megfelelo koordinátarendsert vágni, transformálni nem lehet akármit: tesselláció 3D inkrementális képsintéis tesseláció T M T V Tesselláció felületi pontok kijelölése: r n,m = r(u n,v m ) felületi pontok össekötése: háromsögháló, hualvá Lokális k.r. Világ k.r. Képerno k.r. vágás takarás vetítés Transformációk Modelleési transformáció: [r lokális,] T M = [r világ,] Néeti transformáció: [r világ,] T v = [r képerno,] Össetett transformáció: [r lokális,] T M T v = [r lokális,] T C = [r képerno,] Néeti transformáció: Kamera modell ee vup fov x aspect vrp (lookat)
ee Néeti transformáció lépései 2. Kamera 90 látósög 4. Normaliált képerno ee w vup v u x Kamera transformáció glulookat(ee,vrp,vup) vrp w = (ee-vrp)/ vrp-ee u = vup x w/ w x vup v = w x u T uvw [x,,,] = [U,V,W,] u x u u 0 v x v v 0 w x w w 0 ee. Világ x 3. Normaliált kamera 5. Képerno [U,V,W,] = [x,,,] T uvw - Normaliálás *tg(fov/2) Perspektív transformáció: gluperspective(fov, aspect,, ) [-mx*, -m*, ] [mx, m, -] [mx, m, ] 90 látósög T norm /(tg(fov/2) aspect) 0 0 0 0 /tg(fov/2) 0 0 0 0 0 0 0 0 [mx*, m*, -] [mx, m, - ] [mx*, m*, -] [mx, m, ] [mx*, m*, -, ] [mx, m, -, ] [mx*, m*, -, ] [mx, m,, ] [mx*, m*, -, ] [mx*, m*, -, ] [mx*, m*, -, ] [mx*, m*,, ] 90 látósög Perspektív transformáció -*t33+t43 = - -*t34+t44 = T persp t t2 t3 t4 t2 t22 t23 t24 t3 t32 t33 t34 t4 t42 t43 t44 ] ] [mx*,m*,-,] * [mx*, m*, -, [mx* m*,-,]*[mx*, m*,, Perspektív transformáció: gluperspective(fov,asp,,) /(tg(fov/2) asp) 0 0 0 0 /tg(fov/2) 0 0 0 0 -(+)/(-) - 0 0-2*/(-) 0, -*t33+t43 = -*t34+t44 = 0 0 0 0 0 0 0 0 -(+)/(-) - 0 0-2*/(-) 0 [X h,y h,z h,h] = [xc,c,c,] T persp [X,Y,Z,] = [X h /h, Y h /h, Z h /h,]
Néeti csoveeték Mélségi vágás a homogén ostás elott kell x,, T M T uvw - T persp [,,2] [,,-2] Vágás = =3 Rastertár: Vetítés Takarás Néet transf Homogén ostás -(+)/(-) -2*/(-) 0 0 0 0 0 0 0 0-2 - 0 0-3 0 Homogén ostás: [X,Y,Z,] = [X h /h, Y h /h, Z h /h,] Hualvá képsintéis esetén kimaradhat [,,-2, ] * [ 2] [/2 /2 /2 ] [,, 2, ] * [ -7-2] [-/2 -/2 7/2 ] Vágás homogén koordinátákban Cél: Xmin = - < X = X h /h< = Xmax Ymin = - < Y = Y h /h< = Ymax Zmin = - < Z = Z h /h < = Zmax Vegük hoá: h > 0 (h = - a kamera koordinátarendserben) Sakas/poligon vágás Xmin h < X h < Xmax h Ymin h < Y h < Ymax h Zmin h < Z h < Zmax h Xmin h = X h [Xh,Y h,z h,h ] X min h = X min (h (-t)+h 2 t) = = X h = X h (-t) + X h2 t Xmin h < X h < Xmax h Ymin h < Y h < Ymax h Zmin h < Z h < Zmax h Belül Xmin h = X h Xmin = [3, 0, 0, 2] X min h = 2 < X h = 3 Kívül [2, 0, 0, 3] X min h = 3 > X h = 2 [X h2,y h2,z h2,h 2 ] X h = X h (-t) + X h2 t Y h = Y h (-t) + Y h2 t Z h = Z h (-t) + Z h2 t h = h (-t) + h 2 t t = Hualvá képsintéis (X h,y h,z h,h) Hátsó vágósík Mélségi vágás (X h,y h,z h,h) x,, T M T V Vágás x,, T M T V Vágás Sín T C (X,Y,Z) Homogén ostás T C (X,Y,Z) Homogén ostás Rastertár: 2D sakas rajolás Néet transf (Bresenham ) Vetítés (X,Y) Rastertár: 2D sakas rajolás Néet transf (Bresenham ) Vetítés (X,Y)
Mélségi intenitásmoduláció x,, Rastertár: T C T M T V Vágás I Homogén l =Sín ostás Modulált Vetítés sín Z in [0,] (X,Y,Z) I = I l /(+az) 2D sakas rajolás sín interpolációval (X h,y h,z h,h) Néet transf (X,Y) R, (G, B) Intenitás Σ (I2-I)/pixelsám Tömör képsintéés Képerno koordinátarendserben, a sem a iránba né Objektumtér algoritmusok: láthatóság sámítás nem függ a felbontástól Képtér algoritmusok: mi látsik eg pixelben Hátsólab eldobás: back-face culling Takart él n < 0 n > 0 Láthatósági gráf Festo algoritmus Warnock algoritmus 3. 2.. Triviális esetek: nincs él a ablakban láthatóság homogén Baj: takarás nem rendeési reláció A nem takarja B-t:. Zmin(A) > Zmax(B ) VAGY 2. A és B vetületének nincs köös rése VAGY 3. A a B semen túli félterében VAGY 4. B a A semmel megegeo félterében VAGY B A Warnock(X,Y,X2,Y2) { if van él a ablakban && ablak pixelnél nagobb { Xm =(X+X2)/2; Ym=(Y+Y2)/2 Warnock(X,Y,Xm,Ym); Warnock(Xm,Y,X2,Ym) Warnock(X,Ym,Xm,Y2); Warnock(Xm,Ym,X2,Y2) } else { P = ablak köepén látható poligon Ablak kitöltése P sínével } }
Z-buffer algoritmus 2.. 3. Z-koordináta: lineáris interpoláció (X 2,Y 2,Z 2 ) Z Z(X,Y) = ax + by + c 628 325 325 628 3325 (X 3,Y 3,Z 3 ) Y (X,Y,Z ) Z(X,Y) X Z(X+,Y) = Z(X,Y) + a Z-interpolációs hardver Árnalás CLK X X sámláló a Z(X,Y) Z register Σ Koherencia: ne pixelenként kelljen a árnalási egenletet megoldani Háromsögenként: -ser sem: saját sínnel árnalás -ser: konstans árnalás csúcspontonként -ser, belül lineáris interpoláció: Gouraud árnalás pixelenként, de legalább a normál (view, light, reflection) vektort interpoláljuk: Phong árnalás Árnalás saját sínnel Konstans árnalás
R,G,B Gouraud árnalás (X 2,Y 2,R 2 ) R(X,Y) = ax + by + c Gouraud árnalás (X 3,Y 3,R 3 ) Y (X,Y,R ) R(X,Y) X R(X+,Y) = R(X,Y) + a diffú spekuláris ambiens L N Phong árnalás V Illumináció: világkoordinátarendserben Néeti transformáció Y X N(X,Y) N(X,Y) = A X + BY + C L(X,Y) =... V(X,Y) =... Pixelenként: vektorok lin. interpolációja vektorok normaliálása illuminációs képlet Phong árnalás Gouraud Gouraud, Phong Gouraud Phong Phong
Egseru síklapra vetített árnék Árnék térkép Árnéktest Lág árnékok Árnékok l p S = [A,B,C,D] [q h, h] = [p, ] Síklapra vetített árnék q [q,] S T = 0, q = l + (p-l)t t = ([l,] S T )/([l-p,0] S T ) = d/h h = d [p, ] S T q(p) NEM LINEÁRIS [q,] = [l + (p-l) d/h, ] [q h, h] =[l h + (p-l) d, h]= = [-l ([p,] S T )+p d, d [p,] S T ] q h és h a p-ben LINEÁRIS d-lx A -l A -l A -A -lx B d-l B -l B -B -lx C -l C d-l C -C -lx D -l D -l D d-d Árnék térképek T l T v Fénforrásból megkeressük a tárg körvonal éleit Kihúuk a körvonal éleket Árnéktest alapján árnékolás Árnéktestek [x,,,] T v - T l = [X h,y h,z h,h] [X,Y,Z,] = [X h /h,y h /h,z h /h, ] if (Z depth[x,y]) Fénforrás hatása Körvonal él visgálat