egc_12

10
  Algoritmul Warnock Divizeaza recursiv zona de afisare, pana se poate determina poligonul vizibil in acea zona sau dimensiunea zonei este 1 pixel. P poligon acoperitor Z Z P poligon disjunct Z P poligon intersectat Z P poligon inclus

Upload: alex-dinu

Post on 20-Jul-2015

33 views

Category:

Documents


0 download

TRANSCRIPT

5/17/2018 egc_12 - slidepdf.com

http://slidepdf.com/reader/full/egc12 1/10 

 Algoritmul Warnock 

Divizeaza recursiv zona de afisare, pana se poatedetermina poligonul vizibil in acea zona sau dimensiuneazonei este 1 pixel.

P

poligon acoperitor 

ZZ

P

poligon disjunct

Z

P

poligon intersectat

ZP

poligon inclus

5/17/2018 egc_12 - slidepdf.com

http://slidepdf.com/reader/full/egc12 2/10 

 Algoritmul Warnock 

O zona de afisare cu dimensiunea mai marede 1 pixel nu va mai fi divizata daca: toate poligoanele sunt disjuncte fata de zona

considerata exista doar un poligon ce poate fi intersectat,

inclus sau acoperitor exista mai multe poligoane intersectate, incluse

sau acoperitoare, dar cel mai apropiat deobservator este un poligon acoperitor

5/17/2018 egc_12 - slidepdf.com

http://slidepdf.com/reader/full/egc12 3/10 

 Algoritmul Warnock 

Warnock(Zona Z, ListaPligoane LP)clasifica poligoanele din LP (poligoane incluse, acoperitoare, disjuncte, intersectate = incluse+disjunctte)elimina poligoanele disjuncte din LPordoneaza poligoanele din LP in ordine descrescatoare dupa zmin al fiecarui poligon

elimina din LP poligoanele care se afla in spatele primului (cel mai apropiat de observator) poligon acoperitordaca LP == vida atunci

afiseaza zona Z in culoarea de fond;

stop;daca LP contine un singur poligon atuncidaca P este inclus atunci

afiseaza zona Z in culoarea de fond; afiseaza poligondaca P este acoperitor atunci

afiseaza zona Z in culoare poligonstop;

daca zona Z are dimensiunea de 1 pixel (x, y) atuncipentru fiecare poligon P din LP calculeaza z(x, y);determina max pentru z(x, y);

afiseaza pixelul (x,y) in culoarea poligonului cu z(x, y) maxstop;

Warnock(Z1, LP); Warnock(Z2, LP);Warnock(Z3, LP); Warnock(Z4, LP);

Z

ZZ

Z

Z

5/17/2018 egc_12 - slidepdf.com

http://slidepdf.com/reader/full/egc12 4/10

 

Transparenta

Daca nu se tine cont de refractie, cand suprafata vizibila intr-un pixel estetransparenta, culoarea in care va fi afisat pixelul se poate obtine combinandculoarea suprafetei vizibile cu aceea a suprafetei aflata imediat in spatelesau, folosind urmatoarea formula de interpolare:

I = (1-k)*I1 + k*I2

k masoara transparenta suprafetei vizibile in pixel, 0<= k <=1 daca k = 0, suprafata vizibila este opaca pixelul va fi afisat in culoarea sa,

I1; daca k = 1, suprafata vizibila este transparenta si nu contribuie la culoarea

pixelului.

Daca k = 1 si suprafata din spatele celei vizibile este la randul sautransparenta, metoda de calcul se aplica recursiv, pana cand se intalneste osuprafata opaca sau fondul.

5/17/2018 egc_12 - slidepdf.com

http://slidepdf.com/reader/full/egc12 5/10

 

Umbre

Cand un observator priveste o scena 3D iluminata de osursa de lumina dintr-o poziţie diferita de aceea a surseide lumina va vedea umbrele produse de obiectele scenei.

O zona de umbra se compune in realitate din doua parti: umbra pura - este densa, neagra si are un contur bine delimitat Penumbra - inconjoara umbra pura. Zona aflata in

penumbra primeste o parte din lumina de la sursa. Sursele punctiforme produc numai umbra pura. Sursele

reale, cu o dimensiune finita, produc si penumbra.

5/17/2018 egc_12 - slidepdf.com

http://slidepdf.com/reader/full/egc12 6/10

 

Umbre (2)

•Umbrele sunt de doua tipuri:•Umbre proprii•Umbre purtate

•Umbrele proprii sunt generate de obiectul insusi, care impiedica lumina sa ajunga la unele

dintre fetele sale. Fetele umbrite de umbra proprie sunt fetele auto-obturate atunci candscena este vazuta din pozitia sursei de lumina.•Umbra purtata este umbra pe care un obiect o produce pe alte parţi ale scenei, la carelumina nu ajunge din cauza obiectului.

5/17/2018 egc_12 - slidepdf.com

http://slidepdf.com/reader/full/egc12 7/10

 

 Volume de umbra

•  Volum de umbra - este definit de o sursa de lumina si un poligon vizibildin pozitia sursei de lumina (poligon generator).

• FUV fetele de umbra care sunt vizibile din pozitia observatorului• FUN fetele de umbra care nu sunt vizibile din pozitia observatorului• Pentru un punct P al unei suprafete si V pozitia observatorului.

• P este umbrit:• Se foloseste un contor in care initial se memoreaza numarul de volume de

umbra care contin pozitia observatorului.• Pentru FUV se asociaza valoarea +1 iar celor de tip FUN valoarea 1.• Cand vectorul VP traverseaza o fata de umbra, se aduna la contor

valoarea asociata fetei.• Punctul P este umbrit daca valoarea contorului este pozitiva in P.

5/17/2018 egc_12 - slidepdf.com

http://slidepdf.com/reader/full/egc12 8/10

 

 Algoritmul z-buffer cu umbre

In scena exista o singura sursa de lumina

Se executa algoritmul z-buffer din pozitia sursei delumina si se construieste bufferul zs_buff 

zs_buff(x, y) contine coordonata z corespunzatoarepunctului cel mai apropiat de sursa de lumina care seproiecteaza in pixelul (x, y)

Se executa algoritmul z-buffer din pozitia observatoruluitinand cont si de valorile din bufferul zs_buff 

5/17/2018 egc_12 - slidepdf.com

http://slidepdf.com/reader/full/egc12 9/10

 

 Algoritmul z-buffer cu umbre

se executa algoritmul z-buffer din pozitiasursei de lumina si se obtine bufferul zs_buf 

Pentru fiecare pixel (x, y)

z_buf(x, y) = z plan spate al volumului devizualizare canonic

inscrie pixelul (x, y) in culoarea de fond

5/17/2018 egc_12 - slidepdf.com

http://slidepdf.com/reader/full/egc12 10/10

 

 Algoritmul z-buffer cu umbre Pentru fiecare poligon P

pentru fiecare pixel (x, y) interior proiectiei poligonului P

{

determina coordonata z a punctului care se

proiecteaza in pixelul (x, y)

daca z > z_buf(x, y) atunci{

z_buf(x, y) = z;

determina (xs, ys, zs) punctul corespunzator lui

(x, y, z) in vederea din pozitia sursei de lumina

daca zs_buf(xs, ys) > zs atunci

afiseaza pixelul (x, y) in umbra

altfel

afiseaza pixelul (x, y) luminat

}

}