Documente Academic
Documente Profesional
Documente Cultură
Determinarea vizibilitatii
Vizualiare
Transformarea
Decupare
fereastrapoarta
Proiectie
Generare primitive
Imagine
Poligon spate
Transformarea
Decupare
fereastrapoarta
Proiectie
Generare primitive
Imagine
->
N
(x1,y1,z1)
(x0,y0,z0)
i
j
k
N v1 v2 x1 - x0 y1- y0 z1- z0
x2 - x1 y2- y1 z2 - z1
-
v1
--
--
v2
(x2,y2,z2)
N Nx * i Ny * j Nz * k
Back-face culling
F2
F1
Fete spate
Fete fata
10
glEnable(GL_CULL_FACE);
glFrontFace(GL_CCW);
glCullFace(GL_BACK);
11
12
13
14
Vizualiare
Transformarea
Decupare
fereastrapoarta
Proiectie
Generare primitive
Imagine
15
Algoritmul z-buffer
1
3
2
Algoritmul z-buffer
17
Exemplu - Z-buffer
18
Exemplu - Z-buffer
19
Exemplu - Z-buffer
20
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);
21
Algoritmul z-Buffer
22
glEnable(GL_DEPTH_TEST);
glDisable(GL_DEPTH_TEST);
glDepthFunc(functie);
glDepthMask(flag);
->
N
P - plan de partitionare
F2
semiplan spate
C
4
A
F
S
B
C
F
B
1
26
C
4
A
F
S
B
B
1
Obs
27
6
28
5
F
3b
2
4b
2, 3b, 4b, 5
3a, 4a, 6
1
4a
3a
6
29
2, 3b, 4b, 5
5b
S
F
4b, 5a
3a, 4a, 6
3a
2
S
3b,5b
5a
3b
4b
4a, 6
1
4a
3a
6
30
2, 3b, 4b, 5
5b
S
3a, 4a, 6
3a
3b
3b
4b, 5a
5a
4b
4a, 6
F
5b
1
4a
3a
6
31
5b
S
3a
5a
5b
4b
4a
3b
3b
4b
5a
4a
3a
6
32
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
35
Algoritmul Warnock
36
Algoritmul Warnock
0
0 disjunct
1 intersectat
1
M mai multe
fete poligonale
0
37
Algoritmul Warnock
38
Algoritmul Warnock
M M M 1
M M M M
M M M M 1
M M M M M 0
39
Algoritmul Warnock
40
Algoritmul Warnock
acoperitor
intersectat
inclus
disjunct
Poligoane:
acoperitoare
incluse
41
Algoritmul Warnock
Obiecte 3D
Modelare
Vizualiare
Transformarea
Decupare
fereastrapoarta
Proiectie
Generare primitive
Imagine
Divizarea spatiului
42
Algoritmul Warnock
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
44
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;
45
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,
Warnock(Z2,
Warnock(Z3,
Warnock(Z4,
LP);
LP);
LP);
LP);
Z1
Z2
Z3
Z4
46
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
Z
stop;
Z1 Z2
Warnock(Z1, LP); Warnock(Z2, LP);
Warnock(Z3, LP); Warnock(Z4, LP);
}
Z3
Z4
47