Inkrementális 3D képszintézis Szirmay-Kalos László
Inkrementális képszintézis Árnyalás, láthatóság nehéz, különösen általános helyzetű objektumokra koherencia: oldjuk meg nagyobb egységekre feleslegesen ne számoljunk: vágás transzformációk: minden feladathoz megfelelő koordinátarendszert vágni, transzformálni nem lehet akármit: tesszelláció
3D inkrementális képszintézis Lokális k.r. Képernyő k.r. Világ k.r.
Tesszelláció felületi pontok kijelölése: rn,m = r(un,vm) felületi pontok összekötése: háromszögháló, huzalváz
Modellezési transzformáció 1. skálázás: sx, sy, sz 2. orientáció: , , 3. pozíció: px, py, pz y x 1 px, py, pz, 1 sx sy sz 1 1 R TM=
Orientáció R TM = z (R21,R22,R23) (R31,R32,R33) y (R11,R12,R13) x = cos -sin 1 sin cos 1 cos sin -sin cos 1 1 cos sin -sin cos R TM = = Csavaró: Roll Billentő: Pitch Forduló: Yaw Orientáció = ortogonális mátrix Orientácó: 3 szabadságfok Orientáció = három szög
Kvaterniók Komplex számok általánosítása q = [s,x,y,z] = [s,w] = s+xi+yj+zk q1+q2 = [s1+s2, x1+x2, y1+y2, z1+z2] aq = [as,ax,ay,az] |q| = s2+x2+y2+z2 Szorzás: i2 = j2 = k2 = ijk = -1, ij=k, ji=-k, jk=i, kj=-i, ki=j, ik=-j Szorzás asszociatív, de nem kommutatív Van egységelem: [1,0,0,0] Van inverz: q-1 = [s,-w]/|q|2 , q-1q = qq-1=[1,0,0,0] (q1q2)-1=q2-1q1-1
Kvaternió = forgatás az origón átmenő w tengely körül q = [s,x,y,z] = [s,w] q[0,u]q-1 = [0,v] v az u elforgatottja a w körül szöggel cos = 1 – 2(x2+y2+z2)/(s2+x2+y2+z2) q abszolút értéke nem számít Elforgatás legyen egység hosszú kvaternió [cos/2, w sin/2], |w| = 1 Elforgatások fűzése q1(q2 [0,u]q2-1 ) q1-1 = (q1q2 )[0,u](q1q2 )-1 Egység hosszú kvaternió = orientáció
Origón átmenő w tengely körül szöggel forgató mátrix: R w egységvektor, q = [cos/2, w sin/2] (0, R11,R12,R13) = q[0,1,0,0]q-1 (0, R21,R22,R23) = q[0,0,1,0]q-1 (0, R31,R32,R33) = q[0,0,0,1]q-1 Rodriquez formula glRotate(alpha, wx, wy, wz); fokban!!!
Transzformációk Modellezési transzformáció: [rlokális,1] TM = [rvilág,1] Nézeti transzformáció: [rvilág,1] Tv = [rképernyőh, h] Összetett transzformáció: [rlokális,1] TMTv = [rlokális,1] TC = [rképernyőh, h]
Nézeti transzformáció: Kamera modell vup fp eye fov aspect vrp (lookat) bp z y x
Nézeti transzformáció lépései Bal!!! y eye 1 z z 2. Kamera 4. Normalizált képernyő 90 látószög y x 3. Normalizált kamera 1 1. Világ 5. Képernyő
Kamera transzformáció gluLookAt(eye,lookat,vup) w u v w = (eye-lookat)/|eye-lookat| u = (vup x w)/ |w x vup| v = w x u lookat z w u v -1 y ux uy uz 0 vx vy vz 0 wx wy wz 0 0 0 0 1 1 0 0 0 0 1 0 0 0 0 1 0 -eyex -eyey -eyez 1 x [x’,y’,z’,1] = [x,y,z,1] ux vx wx 0 uy vy wy 0 uz vz wz 0 0 0 0 1
Normalizálás bp*tg(fov/2) fp bp Tnorm 1/(tg(fov/2)·aspect) 0 0 0 0 0 1 0 0 0 0 1 90 látószög
Perspektív transzformáció: gluPerspective(fov, aspect, fp, bp) [-mx*z, -my*z, z] [mx, my, -1] [mx, my, 1] 1 -bp -fp [mx*fp, my*fp, -fp] [mx, my, -1 ] [mx*bp, my*bp, -bp] [mx, my, 1 ] [mx*fp, my*fp, -fp, 1] [mx, my, -1, 1]a // mi: a = fp [mx*bp, my*bp, -bp, 1] [mx, my, 1, 1] b // ekkor: b = bp [mx*fp, my*fp, -fp, 1] [mx*fp, my*fp, -fp, fp]
Perspektív transzformáció bp Tpersp t11 t12 t13 t14 t21 t22 t23 t24 t31 t32 t33 t34 t41 t42 t43 t44 -fp*t33+t43 = -fp -fp*t34+t44 = fp 90 látószög [mx*fp,my*fp,-fp,1] * [mx*fp, my*fp, -fp, fp] [mx*bp,my*bp,-bp,1]*[mx*bp, my*bp, bp, bp] fp 1, 1 -bp*t33+t43 = bp -bp*t34+t44 = bp 1 0 0 0 0 1 0 0 0 0 -(fp+bp)/(bp-fp) -1 0 0 -2fp*bp/(bp-fp) 0
Perspektív transzformáció: gluPerspective(fov,asp,fp,bp) y Perspektív transzformáció: gluPerspective(fov,asp,fp,bp) z 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 [Xh,Yh,Zh,h] = [xc,yc,zc,1] Tpersp [X,Y,Z,1] = [Xh/h, Yh/h, Zh/h,1] 1
Nézeti csővezeték Modell: x,y,z TM TPERSP TVIEW Vágás Vetítés Takarás transzf Homogén osztás Rasztertár: X, Y Huzalváz képszintézis esetén kimaradhat
Mélységi vágás a homogén osztás előtt kell [1,1,2] [1,1,-2] 1 bp=3 fp=1 1 0 0 0 0 1 0 0 0 0 -2 -1 0 0 -3 0 -(fp+bp)/(bp-fp) Homogén osztás: [X,Y,Z,1] = [Xh/h, Yh/h, Zh/h,1] -2fp*bp/(bp-fp) [1, 1,-2, 1] * [ 1 1 1 2] [1/2 1/2 1/2 1] [1, 1, 2, 1] * [ 1 1 -7 -2] [-1/2 -1/2 7/2 1]
Vágás homogén koordinátákban Cél: -1 < X = Xh/h < 1 -1 < Y = Yh/h < 1 -1 < Z = Zh/h < 1 Vegyük hozzá: h > 0 (h = -z a kamera koordinátarendszerben) h = Xh Belül -h < Xh < h -h < Yh < h -h < Zh < h Kívül [3, 0, 0, 2 ] h = 2 < Xh = 3 [2, 0, 0, 3 ] h = 3 > Xh = 2
Szakasz/poligon vágás -h < Xh < h -h < Yh < h -h < Zh < h h = h1·(1-t)+h2 ·t = = Xh = Xh1·(1-t) + Xh2·t t = … h = Xh [Xh1,Yh1,Zh1,h1] Xh = Xh1 · (1-t) + Xh2 · t Yh = Yh1 · (1-t) + Yh2 · t Zh = Zh1 · (1-t) + Zh2 · t h = h1 · (1-t) + h2 · t [Xh2,Yh2,Zh2,h2]
Huzalváz képszintézis (Xh,Yh,Zh,h) Modell: x,y,z TM TV Vágás TC Homogén osztás Szín (X,Y,Z) 2D szakasz rajzolás Rasztertár: X, Y Nézet transzf Vetítés (X,Y)
Tömör képszintézés Képernyő koordinátarendszerben, a szem a z irányba néz Objektumtér algoritmusok: láthatóság számítás nem függ a felbontástól Képtér algoritmusok: mi látszik egy pixelben
Hátsólab eldobás: back-face culling r3 Hátsólab eldobás: back-face culling n = (r3 - r1) (r2 - r1) r2 r1 nz < 0 nz > 0 Lapok a nézeti irányban: Kívülről: lap, objektum: első lap Belülről: objektum, lap: hátsó lap Feltételezés: Ha kívülről, akkor csúcsok óramutóval megegyező körüljárásúak
Z-buffer algoritmus 2. 1. 3. 1325 628 628 1325 3325
Z-koordináta: lineáris interpoláció (X2,Y2,Z2) Z Z(X,Y) = aX + bY + c (X1,Y1,Z1) Y (X3,Y3,Z3) Z(X,Y) Z(X+1,Y) = Z(X,Y) + a X
Z-interpolációs hardver X Z(X,Y) X számláló Z regiszter CLK S a
Árnyalás Koherencia: ne pixelenként kelljen az árnyalási egyenletet megoldani Háromszögenként: 1-szer sem: saját színnel árnyalás 1-szer: konstans árnyalás csúcspontonként 1-szer, belül lineáris interpoláció: Gouraud árnyalás pixelenként, a normál (view, light, reflection) vektort interpoláljuk: Phong árnyalás
Árnyalás saját színnel
Konstans árnyalás
Gouraud árnyalás (X2,Y2,R2) R(X,Y) = aX + bY + c (X1,Y1,R1) (X3,Y3,R3) R,G,B R(X,Y) = aX + bY + c (X1,Y1,R1) Y (X3,Y3,R3) R(X,Y) R(X+1,Y) = R(X,Y) + a X
Gouraud árnyalás spekuláris ambiens diffúz
Phong árnyalás N V L Y N(X,Y) N(X,Y) = A X + BY + C L(X,Y) = ... X V(X,Y) = ... X
Illumináció: világkoordinátarendszerben Nézeti transzformáció Pixelenként: vektorok lin. interpolációja vektorok normalizálása illuminációs képlet
Phong árnyalás
Gouraud, Phong Gouraud Gouraud Phong Phong