Documente Academic
Documente Profesional
Documente Cultură
proector (rază)
A
1 0 0 0
M= 0 1 0 0
0 0 1/(1+zmin) -zmin/(1+zmin)
0 0 -1 0
unde zmin reprezintă coordonata planului din faţă
al volumului de vizualizare.
Încadrarea obiectelor
• O metodă de a micşora numărul de operaţii între diferitele
obiecte ale scenei sau între proiecţiile lor, este de a le
include în extensii care să le încadreze. Aceste extensii de
încadrare sunt volume - pentru obiecte, respectiv
dreptunghiuri cu laturile paralele cu axele sistemului de
coordonate pentru proiecţiile lor.
• Considerînd determinate dreptunghiurile extensie a două
obiecte proiectate, testul de intersecţie al obiectelor se face
doar dacă extensiile lor se suprapun. În acest caz este
posibil ca proiecţiile celor două obiecte să se suprapună.
• Volumul extensiei pote fi paralelipiped dreptunghic, sferă
sau volum infinit ce încadrează o singură dimensiune a
obiectului.
continuare
• Două obiecte nu se suprapun pe z dacă :
• zmax1 < zmin2 sau zmax2 < zmin1
• Pentru a efectua testul de suprapunere este necesar să se
determine valorile z extreme ale obiectelor. Trebuie iterate toate
punctele ce definesc obiectele, ceea ce implică de regulă, consum
mare de timp.
• Costul total al testului de intersecţie pentru un obiect, utilizînd
extensiile de încadrare, poate fi exprimat astfel :
• T = n*T1 + m*T2
unde n este numărul de teste de suprapunere pentru extensia
obiectului;
• T1 este costul unui test de suprapunere;
• m este numărul de teste de intersecţie dacă extensiile se suprapun;
• T2 este costul unui test de intersecţie a obiectului cu alt obiect.
continuare
•• Pentru
a determina dacă un proiector OV intersectează planul
feţei F se pot folosi două metode.
• O metodă porneşte de la ecuaţiile parametrice ale proiectorului
OV:
• x = xO + t(xV - xO)
• y = yO + t(yV - yO)
• x = zO + t(zV - zO)
• t €(0,1) pentru (x,y,z) aparţinînd segmentului OV.
• Dacă proiectorul intersectează planul feţei, punctul de
intersecţie (xi,yi,zi) verifică ecuaţia planului, deci
• ti =
•
continuare
(c1) Ambele vîrfuri ale laturii sunt în interiorul feţei, deci latura
este nevizibilă.
• (c2) Un vîrf al laturii este în interiorul feţei iar celălalt în exterior.
Segmentul vizibil este determinat de vîrful exterior şi punctul de
intersecţie al laturii cu una din laturile feţei.
• (c3) Ambele vîrfuri ale laturii sunt în exteriorul feţei şi latura
intersectează faţa. Se obţin două segmente vizibile determinate de
vîrfurile laturii şi punctele de intersecţie ale laturii cu laturile feţei.
• (c4) Ambele vîrfuri ale laturii sunt în exteriorul feţei şi latura nu
intersectează faţa. Latura este vizibilă în raport cu faţa.
Algoritmul Z-buffer
• Algoritmul Z-buffer este considerat cel mai simplu algoritm de afişare
a scenelor 3D numai prin părţile vizibile. Acest algoritm nu necesita
comparaţii intre obiecte sau calcule de intersecţie şi de aceea este
simplu de implementat. Necesita insa ca structura de date un buffer
(tablou bidimensional), având un număr de elemente egal cu
rezoluţia ecranului. Fiecare element din buffer memorează informaţia
de adâncime (coordonata z) corespunzătoare unui pixel (x,y). De
aceea, structura de date folosita şi algoritmul se numesc Z-buffer.
• Algoritmul se executa asupra unei scene 3D, după ce asupra scenei s-
a efectuat transformarea de proiecţie. De asemenea, pentru
reducerea numărului de poligoane tratate în cadrul algoritmului, se
recomanda ca mai întâi sa se determine fetele auto-obturate ale
fiecărui obiect. Metoda "backface culling" reduce, în medie, la
• jumătate numărul fetelor care urmează sa fie procesate în continuare
de algoritmul folosit pentru vizualizarea scenei 3D.
Paşii algoritmului sunt:
1. Se iniţializează memoria ecran în culoarea fondului şi Z-bufferul cu
valoarea ce corespunde planului din spate al volumului de vizualizare
(unu). Valoarea minima din Z- buffer (zero) corespunde coordonatei z a
planului din fata al volumului (se considera sistemul de coordonate
carteziene 3D, observatorul fiind situat la infinit ).
2. Se procesează poligoanele prin care sunt reprezentate obiectele
scenei 3D, intr-o ordine arbitrara. Pentru fiecare pixel (x,y) ce aparţine
proiecţiei unui poligon, se calculează coordonata z a punctului poligonului
care se proiectează în acel pixel. Fie (x,y,z1) punctul poligonului care se
proiectează în pixelul (x,y). Fie z0 valoarea din Z-buffer corespunzătoare
pixelului (x,y). Daca z1<z0 atunci punctul (x,y,z1) este mai apropiat de
observator decât punctul pentru care exista memorata informaţia de
adâncime în Z-buffer. Fiind mai aproape de observator, este vizibil şi
deci se înscrie culoarea sa în memoria ecran iar informaţia de
adâncime în Z-buffer.
Algoritmul presupune calculul coordonatei z pentru puncte
aparţinând proiecţiei unui poligon.
Algoritmul Appel