Next: 7.2 Distribuirani sistem
Up: 7.1 Program za sledenje
Previous: 7.1.1 Vhodni podatki
Vsebina:
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 ).
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