8 vizibilitate
DESCRIPTION
vizibilitateTRANSCRIPT
![Page 1: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/1.jpg)
1
Determinarea vizibilitatii
![Page 2: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/2.jpg)
2
Determinarea vizibilitatii
![Page 3: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/3.jpg)
3
Algoritmi de eliminare a partilor nevizibile
Modelare Vizualiare Proiectie
Decupare Transformarea
fereastra-poarta
Generare primitive
Imagine
Obiecte 3D
![Page 4: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/4.jpg)
4
Algoritmul Back Face Culling
![Page 5: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/5.jpg)
5
Algoritmul Back Face Culling
Eliminarea fetelor spate
Poligon spate
![Page 6: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/6.jpg)
6
Algoritmi de eliminare a partilor nevizibile
Modelare Vizualiare Proiectie
Decupare Transformarea
fereastra-poarta
Generare primitive
Imagine
Obiecte 3D Eliminare fete spate
![Page 7: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/7.jpg)
7
Algoritmul Back Face Culling
Suprafete convexe
![Page 8: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/8.jpg)
8
Algoritmul Back Face Culling
(x0,y0,z0)(x1,y1,z1)
(x2,y2,z2)
->
N
v1
v2
-
z
-
y
-
x
---
-----
k*Nj*Ni*NN
z1-z2 y1-y2 x1-x2
z0-z1 y0-y1 x0-x1
k j i
v2v1N
![Page 9: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/9.jpg)
9
Back-face culling
α: [0o, 90o) poligon spate
α: 90o poligon = latura
α: (90o, 180o] poligon fata
V
F1
F2 N
α N
V
![Page 10: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/10.jpg)
10
Algoritmul Back Face Culling
Fete spate
Fete fata
![Page 11: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/11.jpg)
11
Algoritmul Back Face Culling - OpenGL
glEnable(GL_CULL_FACE);
glFrontFace(GL_CCW);
glCullFace(GL_BACK);
![Page 12: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/12.jpg)
12
Algoritmi de eliminare a partilor nevizibile
Algoritmi in spatiul imagine
Algoritmi in spatiul obiect
![Page 13: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/13.jpg)
13
Algoritmi de eliminare a partilor nevizibile
Algoritmi in spatiul imagine
for fiecare pixel P
determina obiectul O cel mai apropiat de observator de-a lungul proiectorului ce trece prin P
afiseaza pixelul P in culoarea obiectului O
![Page 14: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/14.jpg)
14
Algoritmi de eliminare a partilor nevizibile
Algoritmi in spatiul obiect
for fiecare obiect O al scenei
Determina partile vizibile ale obiectului O (parti care nu sunt obturate de alte parti ale
sale sau de alte obiecte)
Afiseaza partile vizibile ale obiectului O
![Page 15: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/15.jpg)
15
Eliminarea partilor nevizibile
Modelare Vizualiare Proiectie
Decupare Transformarea
fereastra-poarta
Generare primitive
Imagine
Obiecte 3D
Algoritmul z-buffer
![Page 16: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/16.jpg)
16
Algoritmul z-buffer
2
1
3
P
•Algoritm in spatiul imagine
•Nu exista o ordine prestabilita pentru afisarea poligoanelor
![Page 17: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/17.jpg)
17
Algoritmul z-buffer
Necesita ca strucura de date un buffer avand un numar de elemente egal cu rezolutia ecranului
Un element din buffer memoreaza informatia de adancime (z) asociata pixelului (x, y)
Pentru fiecare pixel este memorata si culoarea asociata
Poate fi implementat hard si soft
![Page 18: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/18.jpg)
18
Exemplu - Z-buffer
![Page 19: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/19.jpg)
19
Exemplu - Z-buffer
![Page 20: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/20.jpg)
20
Exemplu - Z-buffer
![Page 21: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/21.jpg)
21
Algoritmul z-buffer
//initializare
pentru fiecare pixel ecran (x, y)
ScriePixel(x, y, culoare_fond);
z_buff[x][y] = zmax; //zmax = z planului spate al
//volumului de vizualizare
pentru fiecare poligon P
pentru fiecare fragment (x, y, z) interior
daca z > z_buff[x][y] atunci
z_buff[x][y] = z;
cul = culoare fragment;
ScriePixel(x, y, cul);
![Page 22: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/22.jpg)
22
Algoritmul z-Buffer
• Informatia de adancime pierde rapid precizia
• Z-fighting
• In OpenGL se poate folosi functia PoligonOffset
![Page 23: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/23.jpg)
23
Algoritmul z-Buffer - OpenGL
glEnable(GL_DEPTH_TEST);
glDisable(GL_DEPTH_TEST);
glDepthFunc(functie); functie: GL_LESS, GL_LEQUAL,
GL_EQUAL, GL_NOTEQUAL, GL_GREATER, GL_GEQUAL,
glDepthMask(flag); flag: GL_FALSE, GL_TRUE
![Page 24: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/24.jpg)
24
Algoritmul de partitionare binara a spatiului
Algoritm in spatiul obiect
Spatiul se partitioneaza prin plane de partitionare in mai multe zone
Procesul de partitionare continua pana se ajunge la o zona cu un singur poligon
In raport cu pozitia observatorului, algoritmul stabileste ordinea de afisare a seturilor de fete, pornind de la cea mai indepartata pana la cea mai apropiata
![Page 25: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/25.jpg)
25
Algoritmul de partitionare binara a spatiului
1.Daca observatorul se afla in semiplanul fata al planului P, atunci ordinea de afisare a fetelor va fi F2, F1
2.Daca observatorul se afla in semiplanul spate al planului P, atunci ordinea de afisare a fetelor va fi: F1, F2
P - plan de partitionare->
N
semiplan fata
semiplan spate
F1
F2
![Page 26: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/26.jpg)
26
Algoritmul de partitionare binara a spatiului
A C
B
2
4
1
3
A
C B
1 4 2 3
F
F F
S
S S
![Page 27: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/27.jpg)
27
Algoritmul de partitionare binara a spatiului
A C
B
2
4
1
3
Obs
A
C B
1 4 2 3
F
F F
S
S S
![Page 28: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/28.jpg)
28
Algoritmul de partitionare binara a spatiului
1
2 4
6
3
5
![Page 29: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/29.jpg)
29
Algoritmul de partitionare binara a spatiului
1
2, 3b, 4b, 5
3a, 4a, 6
F S
1
2 4b
6
4a 3a
5
3b
![Page 30: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/30.jpg)
30
Algoritmul de partitionare binara a spatiului
1 F S
3a
4a, 6
F
4b, 5a
2
F
3b,5b
2, 3b, 4b, 5
S
3a, 4a, 6
1
2 4b
5a
6
4a 3a
5b
3b
![Page 31: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/31.jpg)
31
Algoritmul de partitionare binara a spatiului
1 F S
3a
4a, 6
F
4b, 5a
2
F
2, 3b, 4b, 5
S
3a, 4a, 6
3b
F
5b 1
2 4b
5a
6
4a 3a
5b
3b
![Page 32: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/32.jpg)
32
Algoritmul de partitionare binara a spatiului
1
2 4b
5a
6
1 F S
4a 3a
3a
F
5b
2
F S
3b
3b
F
4b
F
5a 5b
4a
F
6
![Page 33: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/33.jpg)
33
Algoritmul de partitionare binara a spatiului
ConstruiesteArbore(ListaPoligoane LP) daca LP == vida atunci intoarce NULL; P = alege un poligon din LP; Radacina = P; elimina P din LP
LFata = LSpate = NULL; pentru fiecare poligon Q din LP daca Q este in semiplanul fata planului Radacinii atunci Insereaza(Q, LFata); altfel daca Q este in semiplanul spate planului Radacinii atunci Insereaza(Q, LSpate); altfel descompune Q in QF si QS; Insereaza(QF, LFata); Insereaza(QS, LSpate); intoarce Arbore(Radacina, ConstruiesteArbore(LFata), ConstruiesteArbore(LSpate));
![Page 34: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/34.jpg)
34
Algoritmul de partitionare binara a spatiului
AfisareScena(Arbore A)
daca A == vid atunci stop;
daca observatorul este in fata planului Radacinii atunci
AfisareScena(A->FiuSpate);
Afisare Radacina
AfisareScena(A->FiuFata);
altfel
AfisareScena(A->FiuFata);
Afisare Radacina
AfisareScena(A->FiuSpate);
![Page 35: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/35.jpg)
35
Algoritmul Warnock
Divizeaza recursiv zona de afisare, pana se poate determina poligonul vizibil in acea zona sau dimensiunea zonei este 1 pixel.
acoperitor intersectat inclus disjunct
![Page 36: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/36.jpg)
36
Algoritmul Warnock
![Page 37: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/37.jpg)
37
0
0 0 0
00
0
1
M
1
1
1
1
M M
M
Algoritmul Warnock
0 – disjunct
1 – intersectat
M – mai multe fete poligonale
![Page 38: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/38.jpg)
38
1 1 0 0
1 M M 1
1 M M M
0 1 1 1
Algoritmul Warnock
![Page 39: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/39.jpg)
39
1
11
0
M M M M
M M M M
M M M M M
M M M
Algoritmul Warnock
![Page 40: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/40.jpg)
40
Algoritmul Warnock
![Page 41: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/41.jpg)
41
Algoritmul Warnock
acoperitor intersectat inclus disjunct
Poligoane:
•acoperitoare
•incluse
![Page 42: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/42.jpg)
42
Algoritmul Warnock
Modelare Vizualiare Proiectie
Decupare Transformarea
fereastra-poarta
Generare primitive
Imagine
Obiecte 3D
Divizarea spatiului
![Page 43: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/43.jpg)
43
Algoritmul Warnock
O zona de afisare cu dimensiunea mai mare de 1 pixel nu va mai fi divizata daca:
toate poligoanele sunt disjuncte fata de zona considerata
exista doar un poligon ce poate fi inclus sau acoperitor
exista mai multe poligoane incluse sau acoperitoare, dar cel mai apropiat de observator este un poligon acoperitor
![Page 44: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/44.jpg)
44
Algoritmul Warnock
Warnock(Zona Z, ListaPligoane LP) { clasifica poligoanele din LP (poligoane incluse, acoperitoare, disjuncte, intersectate = incluse+disjunctte) elimina poligoanele disjuncte din LP ordoneaza 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 acoperitor
![Page 45: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/45.jpg)
45
Algoritmul Warnock
daca LP == vida atunci afiseaza zona Z in culoarea de fond; stop; daca LP contine un singur poligon atunci daca P este inclus atunci afiseaza zona Z in culoarea de fond; afiseaza poligon daca P este acoperitor atunci afiseaza zona Z in culoare poligon stop;
![Page 46: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/46.jpg)
46
Algoritmul Warnock
daca zona Z are dimensiunea de 1 pixel (x, y) atunci
pentru 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) max stop; Warnock(Z1, LP); Warnock(Z2, LP); Warnock(Z3, LP); Warnock(Z4, LP); }
Z1
Z4Z3
Z2Z
![Page 47: 8 Vizibilitate](https://reader030.vdocuments.site/reader030/viewer/2022012314/563db884550346aa9a9461f8/html5/thumbnails/47.jpg)
47
Algoritmul Warnock
Warnock(Zona Z, ListaPligoane LP) { clasifica poligoanele din LP (poligoane incluse, acoperitoare, disjuncte, intersectate =
incluse+disjunctte) elimina poligoanele disjuncte din LP ordoneaza 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 acoperitor daca LP == vida atunci afiseaza zona Z in culoarea de fond; stop; daca LP contine un singur poligon atunci daca P este inclus atunci afiseaza zona Z in culoarea de fond; afiseaza poligon daca P este acoperitor atunci afiseaza zona Z in culoare poligon stop; daca zona Z are dimensiunea de 1 pixel (x, y) atunci pentru 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) max stop; Warnock(Z1, LP); Warnock(Z2, LP); Warnock(Z3, LP); Warnock(Z4, LP); }
Z1
Z4Z3
Z2Z