Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
KiadtaEmília Borbélyné Megváltozta több, mint 6 éve
1
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 ( 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
2
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)
3
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
4
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->Kij X = 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
5
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 do for i := 0 to xmax do begin … end; A fénysugár: X = O + t·(Kij - O) = t·Kij; t>0
6
A ciklus magja: for j := 0 to ymax do for i := 0 to xmax do begin sugár : „P = t·Kij”; zxy := zmax; lapxy:=hatter; {a háttérlap följegyzése} foreach lap do begin sik := „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 0 u,v,1-u-v 0 then {a háromszögben van} if z < zxy then begin {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}
7
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
8
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?)
9
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
10
for j := 0 to ymax do for i := 0 to xmax do begin. s1 := „P= t·Kij”;
for j := 0 to ymax do for i := 0 to xmax do begin s1 := „P= t·Kij”; szin := FSK ( s1 ); putPixel(i,j, szin); end; {for i,j} Color function FSK( s1:Vector3D ); var mpt: Point3D; ksz: Color; begin (mpt,felület) := aLegközelebbi(s1,felületlista); if (nincs mpt) then FSK := háttérSzín; else begin ksz := megvilágításiModell(felület,mpt); FSK := ksz; end; {if-else: van mpt} end; {FSK function}
11
Color function rFSK(kpt:Point3D; s1:Vector3D; mélység:Integer);
Color function rFSK(kpt:Point3D; s1:Vector3D; mélység:Integer); var mpt: Point3D; s2v,s2á:Vector3D; ksz,vsz,ász: Color; begin if mélység > korlát then rFSK := Fekete; else begin (mpt,felület) := aLegközelebbi(s1,felületlista); if (nincs mpt) then szín:=háttérSzín; else begin ksz := 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}
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.