110 likes | 262 Views
6. A 3D grafika alapjai. 6.1. A 3D szerelőszalag fölépítése 6.2. Térbeli alakzatok képe 6.3. Térbeli képelemek és modell-adatszerkezetek 6.4. Képelemek összeállítása, leképezés és vágás (6.1-6.4 jórészt a 3. fejezet megfelelő részeit idézik föl.) 6.5. Láthatóság, takarás
E N D
6. A 3D grafika alapjai 6.1. A 3D szerelőszalag fölépítése 6.2. Térbeli alakzatok képe 6.3. Térbeli képelemek és modell-adatszerkezetek 6.4. Képelemek összeállítása, leképezés és vágás (6.1-6.4 jórészt a 3. fejezet megfelelő részeit idézik föl.) 6.5. Láthatóság, takarás 6.6. A fénysugár-követési módszer 6.7. Árnyalás, a képpontok színe 6.8. Irodalom 6.9. Egyebek
Tárgytér-módszerek: • Tárgytér: valódi távolságok és szögek (normál-vektor!) • SzKR: szem-(kamera-)KR • Nézetmező: csonkagúla • Közelsík (és távolsík) • Mélységvágás • Oldalvágás (2D)
6.6. A fénysugár-követés módszere • Fénysugár-követés (ray-tracing) • A tárgytérben (SZKR) • Minden képpontban: az ott látható felület-elem meghatározása • Az ott látott színárnyalat kiszámítása: „megvilágítási módszerrel” • „Valószerű képek” (realistic images) egyik módszere fényforrások, árnyékok, fény-visszaverődés, átlátszó felületek
Az FSK eljárás váza • Előtte: mélységvágás, (hátlap-ritkítás,) és az oldalt kívül lévők megjelölése • VKR -> SzKR (tárgytér) • Keret; raszter:Kij képpontok • „fénysugár:” O->KijX = O+t*(Kij-O) • a legközelebbi felület? • Iij(r,g,b)0 • Iij(r,g,b): fényvisszaverődés, árnyékok, átlátszó felületek
A kép kerete • C-től d (~50 cm) távolságra • a b (~30x40 cm) oldalú • Kij képpontok: i = 0,1,…,xmax, j = 0,1,…,ymax xi= -a/2 + a/xmax yj= -b/2 + b/ymax • for j := 0 to ymax dofor i := 0 to xmax dobegin … end; • A fénysugár: X = O + t·(Kij - O) = t·Kij; t>0
A ciklus magja: • for j := 0 to ymax dofor i := 0 to xmax dobeginsugár:„P= t·Kij”; zxy:= zmax; lapxy:=hatter; {a háttérlap följegyzése}foreach lap dobeginsik:= „a lap síkja”; {P=B+u·(A-B)+v·(C-B)} „P(x,y,z,u,v,t):= döféspont”; {sík és sugár}if 0u,v,1-u-v 0 then {a háromszögben van}if z < zxy thenbegin {közelebb van?} zxy:=z; lapxy:=lap; {a lap följegyzése}end;{if-if}end; {foreach lap} putPixel(i,j, „a lapxy színe a zxy pontban”); {megvilágítás!}end; {for i,j}
Megjegyzések • foreach y foreach x foreach lap … • Gyorsítások: a kereten kívüliek megjelölése testek dobozolása (foreach tárgy foreach lapja) lapok rendezése legkisebb z szerint térfelosztás • putPixel(i,j, „a lapxy színe a zxy pontban”); Iij(r,g,b)0 := I(lap, x,y,z) „megvilágítási modell” • Ez csak Iij(r,g,b)0 ; fény-visszaverődés: később
Rekurzív FSK • Első ütközés: a látott pont, színe a közvetlen megvilágításból • A testek között fény-visszaverődés (és átlátszó testeken fény áthaladás) • Milyen fény esik a látott pontba másokról visszaverten? (A testen áteresztve?)
Rekurzív FSK • Az ideális visszaverődés törvénye: (LN) szög = (SN) szög; egy síkban • A fénytörés törvénye: sin a / sin b = nk / nb; egy síkban • s1 sugár: a látás iránya • s2v és s2a másodlagos sugarak; milyen fény esik be arról? • Csak véges számú visszaverést számolunk • Csak az ideális visszaverési irányt számoljuk
for j := 0 to ymax dofor i := 0 to xmax dobegins1 := „P= t·Kij”; szin := FSK ( s1 ); putPixel(i,j, szin);end; {for i,j} ColorfunctionFSK(s1:Vector3D);var mpt: Point3D; ksz: Color;begin(mpt,felület):=aLegközelebbi(s1,felületlista);if (nincs mpt) thenFSK :=háttérSzín;elsebeginksz:=megvilágításiModell(felület,mpt); FSK:= ksz; end; {if-else: van mpt}end; {FSK function}
ColorfunctionrFSK(kpt:Point3D; s1:Vector3D; mélység:Integer);var mpt: Point3D; s2v,s2á:Vector3D; ksz,vsz,ász: Color;beginif mélység > korlát then rFSK:=Fekete;elsebegin (mpt,felület):=aLegközelebbi(s1,felületlista);if (nincs mpt) then szín:=háttérSzín;elsebeginksz:=megvilágításiModell(felület,mpt); s2v:=tükrözés(s1,felület,mpt); vsz:=rFSK(metszéspt,s2v,mélység+1); s2t:=megtörés(s1,felület, mpt); ász :=rFSK(mpt,s2t,mélység+1) rFSK{szín}:=kever(ksz,ksúly,vsz,vsúly,ász,ásúly);end; {if-else: van mpt}end; {if-else: mélység<korlát}end; {rFSK function}