6. Sjenčanje poligona

27 KB
Lab6.zip

ZADATAK VJEŽBE

Ostvariti sjenčanje poligona i mehanizam za rješavanje problema presjecanja dvaju poligona.

KONCEPTUALNO RJEŠENJE

U vježbi koristimo Z-spremnik i algoritam DDA. Z-spremnikom možemo bez složenih proračuna ostvariti mogućnost međusobnog presjecanja poligonâ. Algoritam DDA nam koristi za određivanje skupa lijevih i desnih vrijednosti pri raspodjeli nekog raspona vrijednosti; u ovom slučaju raspodjeljujemo x-koordinate, z-koordinate i intenzitet svjetla po pojedinim ispitnim horizontalnim linijama. (Pod z-koordinatama podrazumijevamo udaljenost od očišta.) Njime je za svaku ispitnu liniju odabrana samo po jedna vrijednost iz danog raspona.

Algoritmom DDA formiramo lijeve i desne skupove za x-koordinate, z-koordinate i intenzitet svjetla. Uz evidentiranje z-koordinata u Z-spremniku, iscrtavamo zadane poligone, tj. sjenčamo ih.

PROGRAMSKO OSTVARENJE

Algoritam DDA se može prikazati u pseudokodu:

Neka je početna točka (xs, ys) a završna točka (xe, ye).
Ako je ys = ye, tada:
    Ako je xs < xe, tada:
        Postavi L[ys] = xs
    Inače:
        Postavi D[ys] = xs
Inače:
    Postavi xi = xs
    Postavi xf = - abs (ye - ys)
    Postavi mi = abs ((xe - xs) / (ye - ys))
    Postavi mf = 2 * abs ((xe - xs) % (ye - ys))
    Počni od y = ys i ponavljaj sve dok je y != ye + sgn (ye - ys):
        Ako je ye < ys, tada:
            Postavi L[y] = xi
        Inače:
            Postavi D[y] = xi
        Povećaj xi za mi * sgn (xe - xs)
        Povećaj xf za mf
        Ako je xf >= 0, tada:
            Povećaj xi za sgn (xe - xs)
            Umanji xf za 2 * abs (ye - ys)
        Povećaj y za sgn (ye - ys)
    Dno petlje.
Gotovo.

UPUTE ZA KORIŠTENJE

Program očekuje da mu se navede ulazna datoteka kao parametar:

Lab6.exe  ulaz.txt

Ulazna datoteka je u sljedećem formatu: u prvoj liniji nalazi se naveden broj vrhova prvog poligona, zatim slijede za svaku točku poligona koordinate x, y i z, te intenzitet boje, i zatim se svi ti podaci navode jednako i za drugi poligon.

Primjer ulazne datoteke:

10
219 92 0 159
281 139 0 128
357 137 0 87
333 209 0 101
357 281 0 87
281 281 0 129
221 324 0 160
199 253 0 172
137 208 0 205
199 166 0 172

3
508 182 -10 200
362 337 25 50
251 167 -12 250

daje sljedeći prikaz:

Ante Radman, Laboratorijske vježbe iz Računalne grafike, šk. godina 2003/2004.