next up previous contents
Next: 7.2 Distribuirani sistem Up: 7.1 Program za sledenje Previous: 7.1.1 Vhodni podatki Vsebina: contents

7.1.2 Zgradba programa

Program za sledenje zarku je napisan v objektno orientiranem jeziku C++[Str91,Ter93]. Z objektnim pristopom k programiranju je program mozno brez tezav aprilagoditi. Pravilna hierarhija omogoca vgraditev novih primitivov z enostavnim dopisovanjem modulov.

 

 

Slika 7.1: Zgradba programa za sledenje zarku

Na sliki 7.1 je prikazana osnovna zgradba programa, predstavljena z razredi, ki so vgrajeni v program. Temeljni gradniki baze podatkov so tridimenzionalni objekti. Razred Object zdruzuje podatke in metode skupne vsem tridimenzionalnim objektom. Object je abstraktni razred, kar pomeni, da ne more obstajati v bazi gradnikov element, ki bi bil primer (instance) razreda Object, ampak lahko v bazo vstavimo le izpeljani objekt.

Izpeljani objekti morajo implementirati vse virtualne metode, ce jih zelimo vstaviti v bazo gradnikov. Iz slike je razvidno, da so iz razreda Object izpeljani trije razredi:

Camera
implementira enostaven sistem gledanja, kot je opisan v podpoglavju 4.1. Parametri kamere ustrezajo specifikaciji NFF. Mozna je tudi uvedba drugih parametrov gledanja, saj je implementacija dovolj splosna.
Light.
Svetlobni izvor tockaste oblike. Jakost izvora je odvisna od celotnega stevila luci v sceni. Vsi svetlobni izvori imajo enako jakost, ki se normira ob zacetku dolocanja barve zarkov v posameznih tockah. Normiranje je potrebno zaradi pravilne dolocitve obmocja barv v modelu RGB (0..255). Svetlobne izvore je mozno tudi razsiriti na druge tipe kot sta reflektorska luc ali svetlobni snopi. Uvedba omenjenih izvorov svetlobe v program za sledenje zarku ne bi povecala racunske zahtevnosti, saj se taka izvora lahko se vedno obravnava kot tockasta svetlobna izvora. Problem pri metodi sledenja zarku lahko predstavljajo le linijski in povrsinski svetlobni izvori, saj le ti mecejo drugacne sence od tockastih svetlobnih izvorov.
Primitive.
Abstraktni razred primitivov zdruzuje lastnosti objekta z lastnostmi povrsine (barva, difuzijska in odbojna sposobnost, prepustnost in lomni kolicnik). Razred Primitive je osnova za izpeljane primitive, ki jih vstavljamo v bazo podatkov. Dolocanje preseka in normale v izbrani tocki sta edini potrebni virtualni metodi, ki ju mora izpeljani primitiv implementirati. Specifikacija NFF predvideva sledece primitive:
Sphere.
Kot najenostavnejsi primitiv za katerega je potrebno dolociti presecno tocko in normalo. Krogla je primitiv, ki ga najdemo prav v vseh programih za upodabljanje.
Polygon.
Mnogokotnik je ravnina v prostoru omejena z mnozico vozliscnih tock na povrsini. Smer normale je podana s polozajem prvih treh tock mnogokotnika, ki pa ne smejo biti kolinearne. Dolocanje presecne tocke zarka in povrsine ne predstavlja velikega problema (glej stran gif). Hitrost dolocanja notranjosti tocke je odvisna predvsem od stevila vozlisc in konkavnosti mnogokotnikov [Hai94].
Cone.
Prisekani stozec je lahko v posebnem primeru tudi valj. Pri dolocanju preseka je potrebno upostevati, da imamo vedno tri mozne povrsine in dva preseka.
PPatch.
Mnogokotniski zlepek v vsakem vozliscu podaja tudi normalo. Tocke preseka dolocamo podobno kot pri primitivu Polygon. Normale v tocki pa linearno interpoliramo.

Dodajanje novih primitivov v program je enostavno. Potrebno je le izpeljati primitiv in poskrbeti za vnos v bazo primitivov in izdelati vitrualni metodi za presek in normalo.

Razred Scene zdruzuje vse osnovne gradnike scene v enoten razred. Skrbi za sestavo baze primitivov in luci. Vsebuje metodi za rasterizacijo filma kamere (Screen()) in rekurzivno sledenje zarku (Trace()). Rekurzivni algoritem je izveden po Whittedovem algoritmu z uteznostno kontrolo smiselnosti generiranja novih zarkov. Rezultat rekurzivnega programa za sledenje zarku se zapise v prenosljivem formatu PPM[MvR94] (Portable Pixel Map). PPM format datoteke je zelo razsirjen in je bil zato tudi uporabljen.

Podrobnejsi opis posameznih razredov in pripadajocih metod je podan v dodatku A. Na sliki 7.2 so prkazane osnovne lastnosti izdelanega programa za sledenje zarku: zrcalni odboj, razprsitev, prozornost in sence; manjse krogle imajo visok koeficient zrcalnosti, osrednja krogla razprsuje svetlobo na povrsini, trikotnik je prozoren, z lomnim kolicnikom .

 

 

Slika 7.2: Krogle z visoko stopnjo zrcalnosti in prozorni trikotnik



Copyright © 1995 Leon Kos, Univerza v Ljubljani