Documente Academic
Documente Profesional
Documente Cultură
CursPCLP 10 11
CursPCLP 10 11
2
PROGRAMAREA CALCULATOARELOR SI LIMBAJE DE PROGRAMARE – CURS 10
trece prin 3 puncte date 6.1.3. Se continuă transpunerea prin baleiere a
poligonului pe ecran.
6.2. Se trece la alt poligon.
Condiţia z (q,w) > P (q,w) ne arată, atunci când este
îndeplinită, că punctul A (x,y,z) este mai apropiat de
Ecuaţia în 3D a
observator, deci îl acoperă pe cel dinainte.
xp xo yp xo xp x1
dreptei OM
Calculele pe care trebuie să le facem pentru a obţine cota z
(q,w) pentru un pixel A'(q,w) corespunzător unui pixel
După dezvoltare, sistemul va avea A(x,y,z) pot fi simplificate, deoarece poligoanele sunt plane.
forma: Este nevoie de coordonatele a trei puncte din planul
xM x0 yM yo zM zo
poligonului pentru a obţine ecuaţia planului respectiv. De
obicei se aleg trei vârfuri ale poligonului.
a11 a12 a13 xp b1
Algoritmii din familia "z-buffer" sunt destinaţi eliminării
a 21 a 22 a 23 yp b 2 suprafeţelor ascunse. Ei pot fi folosiţi şi ca algoritmi de
a 31 a 32 a 33
zp
b3
îndepărtare a liniilor ascunse. Pentru aceasta este suficient să
atribuim în mod artificial valori de intensitate pixelilor unui
După calcularea lui P (xpypzp) se vor afla distanţele OM şi poligon (0 pentru poligon, 1 pentru frontieră).
OP ţinând cont de faptul că
Linie de baleiaj (scan-line)
Algoritmii de acest tip reconstituie
2 2 2
d ( A, B) ( x 2 x1) ( y2 y1) (z 2 z1) imaginea linie cu linie, tratând
ansamblul faţetelor poligonale care
urmând algoritmul precizat anterior. descriu corpul. Sunt recomandabile atunci când nu se
dispune de memorie foarte mare, pentru număr mare de
2.2. Algoritmi "spaţiu-imagine" faţete, fiind însă mai lenţi şi performanţele lor fiind
dependente de complexitatea corpului de reprezentat.
Buffer de adâncime Consumul de memorie este dictat de necesitatea creării unor
Sunt uşor de implementat, dar prezintă dezavantajul de a tabele în care se ţine evidenţa muchiilor şi faţetelor parcurse
necesita memorie suplimentară pentru păstrarea valorilor de linia de baleiaj la un moment dat, în procesul de
cotei Z ale unor mulţimi de puncte bine detreminate. Cel construire linie cu linie a imaginii.
mai eficient algoritm din această familie (ca viteză de lucru) Tabelele necesare sunt:
este algoritmul "ecran z-buffer":
a) O listă de muchii care va conţine toate muchiile
1. Se creează un masiv bidimensional (matrice) în care poligoanelor ce descriu corpul cu excepţia celor
fiecărui pixel de pe ecran să-i corespundă un element orizontale (acestea vor fi conţinute integral în linia de
din masiv (masiv ecran z-buffer). baleiaj şi deci caracterizate complet prin extremităţi.
2. Se iniţializează (pentru fiecare poziţie de reprezentat a
corpului) z-buffer-ul la o valoare "foarte îndepărtată" a b) O listă de poligoane, în care să fie cuprinse toate
lui z, care prezintă siguranţa că nici unul dintre punctele poligoanele ce acoperă corpul, dispunând fiecare de:
corpului nu o va atinge în cursul transformării 3D 1. Coeficienţii A, B, C, D din ecuaţia
aplicate. Pentru reperele de reprezentare, se întâlnesc Ax + By + Cz + D = 0
două situaţii: a planului în care se află poligonul.
3. Dacă xOyz este un triedru drept, z-buffer-ul se 2. O variabilă de stare care să indice trecerea liniei de
iniţializează la cea mai mică valoare (negativă) baleiaj prin proiecţia poligonului respectiv. Variabila
reprezentabilă. poate lua două valori (1 sau 0) şi se iniţializează la
4. Dacă xOyz este un triedru stâng, z-buffer-ul se valoarea care indică, prin convenţie, faptul că
iniţializează la cea mai mare valoare reprezentabilă. baleiajul nu se află ăn interiorul sau pe frontiera
5. Se iniţializează ecranul la valoarea de intensitate proiecţiei poligonului.
corespunzătoare fondului. 3. Informaţii privind textura superficială, proprietăţi de
6. Pentru fiecare faţetă poligonală: reflexie, culoare, pentru poligonul respectiv.
6.1. Se transpune prin baleiere poligonul în refresh- 4. Informaţii cu privire la iluminarea sau umbrirea
'
buffer astfel: pentru fiecare punct A (q,w) din poligonului (se iniţializează la valoarea
interiorul sau de pe frontiera poligonului: corespunzătoare fondului sau luminii ambiante şi se
6.1.1. Se calculează cota z (x,y) a punctului A completează în timpul parcurgerii algoritmului).
(x,y,z) care are pe ecran imaginea c) O listă de muchii active, în care sunt trecute muchiile
A'(q,w). Rezultă z (x,y), sau z (q,w). intersectate de linia curentă. Toate intersecţiile au
6.1.2. Se compară z (q,w) cu P (q,w) (valoarea aceeaşi ordonată, dată de linia de baleiaj curentă.
existentă în z-buffer la linia w, coloana q). Etapele principale ale algoritmului sunt:
6.1.2.1. Dacă z (q,w) > P (q,w) atunci: 1. Se creează listele a) şi b).
6.1.2.2. Înlocuieşte valoarea veche a lui P 2. Se fac ordonările necesare în aceste tabele.
(q,w) cu z (q,w). 3. Se baleiază ecranul linie cu linie
6.1.2.3. Transpune valoarea de intensitate Pentru fiecare linie:
a poligonului în punctul 3.1. Se creează lista c) pe baza listei a).
A(x,y,z) pe ecran. Se face ordonarea intersecţiilor în tabela c).
3
PROGRAMAREA CALCULATOARELOR SI LIMBAJE DE PROGRAMARE – CURS 10
Se parcurge pixel cu pixel linia curentă. Datorită complexitâţii mari a algorimilor care tratează zone
Pentru fiecare pixel: de suprafeţe strâmbe, pentru aplicaţii care nu vizează
3.1.1. Se compară abscisa curentă cu intersecţiile prelucrarea efectivă a suprafeţelor respective, se preferă
din tabelele muchiilor active. divizarea fiecărei faţete strâmbe până la atingerea unei
Dacă abscisa curentă este egală cu o intersecţie, anumite toleranţe pe fiecare subdiviziune, după care
atunci: subdiviziunile se consideră plane.
3.1.1.1. Se identifică poligonul din care se iese sau Toleranţa depinde de:
în care se intră (pe baza listelor a) şi b)). Natura aplicaţiei
3.1.1.2. Se modifică variabilele de stare a poligo-
Poziţia relativă între faţeta trasată şi planul ecranului
nului (dacă "1" reprezintă prezenţa
Rezoluţia ecranului
pixelului în proiecţia poligonului, iar "0"
în afara acestuia, atunci variabila devine Astfel de algoritmi au fost elaboraţi de Carpenter, Lane şi
"1" la intersecţia liniei curente cu prima Clerk.
atură a poligonului în ordinea depărtării de O soluţie elegantă este folosirea zonelor de cuadrice pentru
lista c) şi redevine "0" la intersecţia cu descrierea suprafeţei unui corp (algoritmii Weiss, Woon,
ultima latură a aceluiaşi poligon). Mahl, Levin).
3.1.1.3. Dacă o singură variabilă de stare are
Pentru reprezentarea în 3D se poate utiliza o metodă de
valoarea "1" într-un punct, celelalte fiin
reprezentare a suprafeţelor în spaţiu folosind două familii de
"0", atunci linia de baleiaj taie în acel
curbe cubice corespunzătoare celor două direcţii într-un plan
punct proiecţia unui singur poligon, deci
xOy. Prin urmare, ecuaţia suprafeţei trebuie să se exprime în
valorile de intensitate corespunzătoare
funcţie de doi parametri s şi t, adică
acestuia se trec în ecran sau în refresh-
buffer. x =x (t,s) , y = y (t,s) , z = z (t,s) , s, t 0,1
3.1.1.4. Dacă există mai multe variabile de satre Aceste relaţii sunt ecuaţiile unei suprafeţe bicubice.
"1", înseamnă că în zona respectivă mai Pentru reprezentarea imaginii suprafeţei pe ecran s-a utilizat
multe poligoane se suprapun. forma de reprezentare Hermite: suprafaţa să treacă prin
În această situaţie, se calculează pentru patru puncte din spaţiu, corespunzătoare valorilor extreme 0
fiecare pereche de poligoane (cu ajutorul şi 1 pentru parametrii s şi t (notate cu P 00, P01, P10, P11, ) şi să
coeficienţilor ecuaţiei planului, luaţi din aibă trei tangente la suprafaţă, date în fiecare dintre aceste
lista b)) cota z corespunzătoare fiecărui puncte.
poligon în punctul a cărui proiecţie pe Forma generală a unei coordonate în funcţie de parametrii s
ecran are ordonata dată de linia curentă. şi t este:
Se trec în refresh-buffer sau pe ecran 4 8 12 16
intensităţile corespunzătoare poligonului
celui mai apropiat, până la intersecţia cu
F(s, t ) a k s 3 t 4k s k s 2 t 8k a k st 12k a k t 16
k 1 k 5 k 9 k 13
următoarea muchie din lista muchiilor
Dându-se Pij, i, j 0,1, cele 4 puncte de control
active, când se refac calculele privitaore la
corespunzătoare valorilor extreme 0 şi 1 ale parametrilor s
starea baleiajului.
şi t prin care trebuie să treacă suprafaţa, adică
3.1.1.5. Dacă s-a ajuns la ultima intersecţie din
lista c), baleiajul pe linia respectivă se Pij (xij, yij, zij ) , i, j 0,1, puncte cu coordonate precizate,
consideră terminat. F F 2F
3.1.2. Se trece la linia următoare. notând cu , , derivatele de
s t st
Observaţii ordinul 1 şi 2 pentru funcţia F
Algoritmul tratează în această variantă poliedre ale căror şi cu
faţete nu se întrepătrund (sub aspectul universalităţii,
x y z
varianta este mai puţin puternică decât algoritmul z-buffer). Ts ij , ,
Pentru ca algoritmul să poată trata şi poliedre care se s s s
întrepătrund, el trebuie modificat. O metodă ar fi
următoarea: x y z
Ts ij , ,
1. Se testează mai întâi perechea de poligoane comparată, t t t
pentru a stabili dacă se intersectează.
2. Se stabilesc capetele segmentului de intersecţie, acestea
fiind trecute în lista c) ca o muchie fictivă.
3. Când linia de baleiaj întâlneşte o muchie fictivă, nu se 2x 2y 2z
Tst ij , ,
produce nici o modificare de variabilă de stare, dar se st st st
fac din nou comparaţii în adâncime.
,
Algoritmii din familia z-buffer pot trata şi suprafeţe strâmbe,
cu modificări minime. Pentru fiecare faţetă se calculează, în toate în (i,j), unde i, j 0,1, parametrii tangentelor în cele
locul coeficienţilor ecuaţiei planului, coeficienţii suprafeţei 4 puncte de control,
strâmbe (sub forma Spline, Bezier sau Hermite). unde x(s,t), y(s,t), z(s,t) sunt funcţii de forma F, se foloseşte
Profunzimea în fiecare punct al faţetei se calculează folosind algoritmul:
ecuaţia z = z (s,t). Citeşte
4
PROGRAMAREA CALCULATOARELOR SI LIMBAJE DE PROGRAMARE – CURS 10
pasul de parcurgere p,
unghiul axei Oz cu axa Ox, p,
raza r,
coordonatele celor 4 puncte de control
(xij, yij , zij) , i, j 0,1Î,
parametrii tangentelor la suprafaţă
(asij , bsij, csij )
(atij , btij, ctij )
(astij , bstij, csti j ) , i, j 0,1.
Parcurge valorile lui s între şi 1 cu pasul p
Parcurge valorile lui t între şi 1 cu pasul p
Calculează coordonatele x(s,t), y(s,t), z(s,t)
proiecţia punctului (x,y,z)
coordonatele punctului imagine
Trasează cele două familii de curbe.