Sunteți pe pagina 1din 31

GRAFICA 3D

Valentin Stoica

Grafica 3D UPB 2020-2021 1


Decuparea obiectelor
 Pentru un punct de observare şi un volum
de vizualizare nu ne interesează decât
obiectele din interiorul acestui volum, a căror
proiecţie se generează în fereastra de
vizualizare
→ se execută operaţia de decupare relativ la
volumul de vizualizare (clipping) prin
care se reţin numai obiectele sau părţile din
obiecte cuprinse în acest volum de
vizualizare

Grafica 3D UPB 2020-2021 2


Decuparea obiectelor
 Fiind dat un obiect tridimensional şi un volum de
vizualizare, pot exista trei posibilităţi:
 obiectul este complet în interiorul volumului → el este
proiectat în fereastră şi redat pe display
 obiectul este complet în afara volumului de vizualizare
→ el poate fi ignorat
 obiectul intersectează volumul de vizualizare → se
decupează obiectul şi partea vizibilă (cuprinsă în interiorul
volumului) este proiectată în fereastra de vizualizare şi
redată pe display
 Decuparea obiectelor tridimensionale relativ la
volumul de vizualizare se execută în sistemul de
referinţă normalizat în coordonate omogene,
înainte de împărţirea cu w

Grafica 3D UPB 2020-2021 3


Decuparea în plan
 Decuparea în planul bidimensional reprezintă o
particularizare a operaţiei de decupare în spaţiul
tridimensional
 Fiind dat un poligon oarecare în plan şi o regiune
de decupare, problema decupării poligonului este
de a reţine numai acea parte din poligon care se
află în interiorul regiunii de decupare
 Se consideră cazul cel mai frecvent întâlnit în care
regiunea de decupare este un dreptunghi cu
laturile paralele cu axele de coordonate. Această
regiune de decupare corespunde ferestrei de
vizualizare
Grafica 3D UPB 2020-2021 4
Decuparea obiectelor

Grafica 3D UPB 2020-2021 5


Algoritmul Sutherland-Hodgman
 Majoritatea algoritmilor de decupare, atât în plan cât
şi în spaţiu, se bazează pe algoritmul de decupare
Sutherland-Hodgman
 Algoritmul Sutherland-Hodgman împarte planul
bidimensional în nouă regiuni, după poziţia faţă de
regiunea dreptunghiulară de decupare dată prin
ecuaţiile a patru drepte:
x = xmin; x = xmax; y = ymin; y = ymax
y

y = ymax

y = ymin

x = xmin x = xmax
x

Grafica 3D UPB 2020-2021 6


Algoritmul Sutherland-Hodgman
 Fiecărei regiuni îi corespunde un cod de
vizibilitate (cunoscut sub numele de cod
Sutherland-Cohen) reprezentat pe 4 biţi, b0,
b1, b2, b3, definiţi astfel:
b0 = semn(x – xmin)
b1 = semn(xmax–x)
b2 = semn(y – ymin)
b3 = semn(ymax–y)
, unde semn(x) = 0 daca x>0, semn(x) = 1 unde x < 0
 Codurile de vizibilitate se reprezintă printr-o
secvenţă de cifre binare b3b2b1b0

Grafica 3D UPB 2020-2021 7


Algoritmul Sutherland-Hodgman
y
1001 1000 1010
y = ymax
0001 0000 0010
y = ymin
0101 0100 0110

x = xmin x= xmax
x

Codurile de vizibilitate Sutherland-Cohen

Grafica 3D UPB 2020-2021 8


Algoritmul Sutherland-Hodgman
 Un poligon oarecare din plan:
 poate fi complet inclus în regiunea de decupare
 poate fi complet în afara regiunii de decupare
 poate intersecta regiunea de decupare
 Folosind codurile de vizibilitate ale vârfurilor poligonului se pot identifica
direct (fără să se execute calcule de intersecţii) două situaţii ale
poligonului faţă de regiunea de decupare:
 Acceptare sigură. Dacă toate vârfurile poligonului se află în regiunea de
decupare, atunci polinomul este vizibil în întregime. Fie C1, C2,…., Cn,
codurile de vizibilitate ale vârfurilor poligonului. Pentru testul de acceptare
sigură se calculează reuniunea acestor coduri (operaţia OR): SC = C1 | C2 |
…| Cn. Dacă SC = 0, atunci poligonul este sigur vizibil:

(a) Acceptare sigură


SC = 0000

Grafica 3D UPB 2020-2021 9


Algoritmul Sutherland-Hodgman
 Rejecţie sigură. Dacă toate vârfurile unui poligon se află într-unul
din semiplanele invizibile (x < xmin; x > xmax; y < ymin; y > ymax),
atunci tot poligonul este sigur invizibil. Pentru testul de rejecţie
sigură se calculează intersecţia codurilor de vizibilitate (operaţia
AND): PC = C1 & C2 &…& Cn. Dacă PC  0, atunci poligonul este
sigur invizibil deoarece toate punctele se află în semiplanul invizibil
corespunzător bitului diferit de 0 din PC:

1010
1010

0010
0010

0110
(b) Rejecţie sigură
PC = 0010

Grafica 3D UPB 2020-2021 10


Algoritmul Sutherland-Hodgman
 Dacă nu este îndeplinită nici condiţia de acceptare sigură, nici
condiţia de rejecţie sigură, atunci decuparea se calculează prin
intersecţia laturilor poligonului cu dreptele care mărginesc
regiunea de decupare:

1000

0010

0001 (c) Decupare prin intersecţie


SC = 1111, PC = 0000

0100

Grafica 3D UPB 2020-2021 11


Algoritmul Sutherland-Hodgman
 Dreapta (infinită) corespunzătoare unei laturi a regiunii de
decupare împarte planul în două semiplane:
 semiplanul (regiunea) vizibil, care se află de aceeaşi parte a

dreptei ca şi regiunea de decupare


 semiplanul invizibil, care se află de partea opusă faţă de

regiunea de decupare.
De exemplu, pentru latura x = xmin, semiplanul x < xmin, este
invizibil, iar semiplanul x  xmin este vizibil

Semiplanul Semiplanul
invizibil vizibil

x = xmin
x

Grafica 3D UPB 2020-2021 12


Algoritmul Sutherland-Hodgman
 În algoritmul de decupare Sutherland-Hodgman,
decuparea unui poligon faţă de o regiune dată se
efectuează într-un număr de paşi egal cu numărul
de laturi ale regiunii de decupare:
 În fiecare pas se decupează poligonul (iniţial sau provenit
dintr-un pas anterior) relativ la o latură a regiunii de
decupare:
 se elimină acea porţiune din poligon care se află în semiplanul
invizibil corespunzător laturii
 se reţine numai porţiunea vizibilă
 Poligonul se reprezintă printr-o listă ordonată de
vârfuri V1V2…Vn, şi fiecare pereche de două vârfuri
consecutive (Vi Vi+1), pentru i < n, şi (VnV1)
reprezintă o latură a poligonului ca un segment de
dreaptă orientat (vector).

Grafica 3D UPB 2020-2021 13


Algoritmul Sutherland-Hodgman
 În fiecare pas de decupare:
 se porneşte de la un poligon dat printr-o listă
ordonată de vârfuri
 se creează lista vârfurilor poligonului rezultat prin
decupare relativ la dreapta suport a unei laturi a
regiunii de decupare.
 Iniţial lista vârfurilor poligonului rezultat este
considerată vidă
 Un segment orientat ViVj se poate afla într-
una din patru situaţii posibile faţă de o latură
de decupare:

Grafica 3D UPB 2020-2021 14


Algoritmul Sutherland-Hodgman
(A) Dacă ambele vârfuri se află în semiplanul
vizibil corespunzător laturii de decupare,
atunci se adaugă în listă vârful Vj:

Vi

Vj (A) Vi vizibil,
Vj vizibil
Se adaugă Vj
Semiplanul Semiplanul
invizibil vizibil

Grafica 3D UPB 2020-2021 15


Algoritmul Sutherland-Hodgman
(B) Dacă ambele vârfuri se află în semiplanul
invizibil, atunci nu se adaugă nici un vârf în
listă:

Vi
(B) Vi invizibil,
Vj invizibil
Nu se adaugă
Vj nici un vârf

Semiplanul Semiplanul
invizibil vizibil

Grafica 3D UPB 2020-2021 16


Algoritmul Sutherland-Hodgman
(C) Dacă primul vârf al segmentului (Vi) se află în semiplanul vizibil,
iar al doilea (Vj) se află în semiplanul invizibil (segmentul este
orientat de la semiplanul vizibil către semiplanul invizibil), atunci
se calculează intersecţia I dintre segment şi dreapta de
decupare şi se adaugă intersecţia I în listă:

Vi

I
Vj (C) Vi vizibil,
Vj invizibil
Se adaugă I

Semiplanul Semiplanul
invizibil vizibil

Grafica 3D UPB 2020-2021 17


Algoritmul Sutherland-Hodgman
(D) Dacă primul vârf al segmentului (Vi) se află în semiplanul
invizibil, iar al doilea (Vj) se află în semiplanul vizibil (segmentul
este orientat de la semiplanul invizibil către semiplanul vizibil),
atunci se calculează intersecţia I dintre segment şi dreapta
de decupare, în lista vârfurilor se adaugă intersecţia I şi apoi
vârful Vj:

Vj

I
Vi
(D) Vi invizibil,
Vj vizibil
Se adaugă I, Vj

Semiplanul Semiplanul
invizibil vizibil

Grafica 3D UPB 2020-2021 18


Algoritmul Sutherland-Hodgman
V1 V1
V4 I4 V4

I1 I1
V2
I2 I3
I2

Semiplan V3 Semiplan Semiplan V3 Semiplan


invizibil vizibil vizibil invizibil
x = xmin x = xmax
(a) Poligonul V1V2V3V4 decupat (b) Poligonul I1I2V3V4V1 decupat
în semiplanul x  xmin în semiplanul x  xmax

Grafica 3D UPB 2020-2021 19


Algoritmul Sutherland-Hodgman
V1 Semiplan V1
I4 invizibil I4

Semiplan y = ymax
vizibil I8 I7
I1 I1 I1 I1

Semiplan I3
I2 I2 I3 vizibil I2 I2

I5 I6
y = ymin
I5 I6
Semiplan
invizibil V3

(c) Poligonul I2V3 I3 I4V1I1 decupat (d) Poligonul I2I5 I6 I3I4V1I1 decupat
în semiplanul y  ymin în semiplanul y < ymax

Decuparea unui poligon în algoritmul Sutherland-Hodgman.


Poligonul rezultat este: I5 I6 I3I7 I8 I1 I2

Grafica 3D UPB 2020-2021 20


Decuparea suprafetelor relativ la volumul de vizualizare
(Decuparea 3D)
 Algoritmii de decupare a obiectelor în spaţiul tridimensional
pot fi consideraţi ca o extensie a algoritmilor de decupare din
plan, prin înlocuirea regiunii de decupare plane cu un volum
de decupare şi efectuarea calculelor de intersecţie a unei
suprafeţe în spaţiu cu planele volumului de decupare
 Decuparea la volumul de vizualizare este un caz particular al
decupării spaţiale, în care volumul de decupare este volumul
de vizualizare (trunchiul de piramidă de vizualizare) definit în
sistemul de referinţă de observare
 În continuare se va analiza modul de execuţie a decupării
pentru sistemul de vizualizare definit ca un trunchi de
piramidă şi se va evidenţia de ce decuparea se execută cel
mai eficient în sistemul de referinţă normalizat

Grafica 3D UPB 2020-2021 21


Decuparea 3D

Directia de observare
yV
yV=h zV/d

B
A
OV
zV
C
xV zV=d D

xV = g zV/d
zV = f

Grafica 3D UPB 2020-2021 22


Decuparea 3D
 Volumul de decupare se defineşte prin şase plane în sistemul
de referinţă de observare
 Fiecare plan împarte spaţiul tridimensional în două semispaţii:
 semispaţiul vizibil, aflat de aceeaşi parte a planului ca şi volumul

de decupare
 semispaţiul invizibil, în partea opusă a volumului.

Grafica 3D UPB 2020-2021 23


Decuparea 3D
 Decuparea unei suprafeţe în raport cu un plan al volumului de
decupare se efectuează asemănător cu decuparea unui poligon
faţă de o latură de decupare:
 fiecare latură orientată introduce zero, unul sau două vârfuri în

lista de vârfuri a suprafeţei rezultate, în funcţie de orientare şi de


intersecţia ei cu planul
 un vârf este vizibil în raport cu un plan dacă se află în semispaţiul

vizibil determinat de planul dat.


De exemplu, un vârf este vizibil în raport cu planul , dacă yV  h
zV/d.
În mod asemănător, decuparea relativ la celelate plane ale
volumului de decupare definit în sistemul de referinţă de
observare stâng necesită testele:

h g g
y V   z V ; x V  z V ; x V   z V ; z V  d; z V  f
d d d

Grafica 3D UPB 2020-2021 24


Decuparea 3D
 Aceste teste implică operaţii asupra coordonatelor
vârfurilor, operaţii care în formă matriceală înseamnă
înmulţirea cu matricea MN1, componentă a matricei de
normalizare. Matricea MN1 transformă sistemul de
referinţă de observare într-un sistem de referinţă
O’x’y’z’, în care volumul de vizualizare (deci volumul
de decupare) este un trunchi de piramidă regulată cu
unghiul de la vârful piramidei de 90.
 Relaţiile anterioare de testare a vizibilităţii unui punct în
sistemul de referinţă de observare sunt echivalente cu
următoarele relaţii în sistemul O’x’y’z’:

x’  z’; x’  – z’; y’ z’; y’  – z’; z’  f; z’  d

Grafica 3D UPB 2020-2021 25


Decuparea 3D
 Dacă s-ar executa decuparea în sistemul de
referinţă intermediar O’x’y’z’, atunci toate punctele
din sistemul de referinţă de observare se transformă
mai întâi cu matricea MN1, pentru trecerea în
sistemul O’x’y’z’, apoi se execută decuparea, iar
după decupare, vârfurile vizibile se transformă cu
matricea MN2, pentru trecere în sistemul de referinţă
normalizat şi proiecţie în fereastra de vizualizare.
 Aplicarea separată a două transformări, mai întâi
prin matricea MN1 şi apoi prin matricea MN2 este
costisitoarte şi nenecesară, dat fiind că decuparea
se poate face direct în sistemul normalizat

Grafica 3D UPB 2020-2021 26


Decuparea 3D
y’ = z’
g d 0 0 0
 0 hd 0 0 y’
M N1  
yV  0 0 1 0
 
 0 0 0 1

yV = – hzV/d

z’
zV

yV = hzV/d

zV = d zV = f
(b)
(a)
1 0 0 0  z’’ = d
0  z’ = f
1 0 0
M N2  
yN
0 0 f (f - d) - fd (f - d)
 
0 0 1 0  yN = 1

(a) Volumul de decupare în


sistemul de referinţă de observare
(b) Volumul de decupare în zN
sistemul O’x’y’z’
(c) Volumul de decupare în yN = – 1
sistemul de referinţă normalizat
(c) zN = 0 z N= 1

Grafica 3D UPB 2020-2021 27


Decuparea 3D
 În sistemul de referinţă normalizat volumul de
decupare este un paralelipiped dreptunghic cu
suprafeţele paralele cu planele sistemului de
coordonate.
 Testele de vizibilitate ale unui punct în raport cu
planele volumului de decupare sunt:

xN  1; xN  – 1; yN  1; yN  – 1; zN  1; zN  0;

 Aceste teste se pot efectua direct în coordonatele


omogene în sistemul normalizat, fără să mai fie
necesară împărţirea cu wN

Grafica 3D UPB 2020-2021 28


Decuparea 3D
 Codul de vizibilitate C al unui vârf în coordonate
normalizate omogene se exprimă pe 6 biţi şi fiecare bit
se poziţionează în funcţie de rezultatul unuia din
testele din relaţia:
b0 = semn(XN – wN)
b1 = semn(wN –XN)
b2 = semn(YN – wN)
b3 = semn(wN –YN)
b4 = semn(ZN – wN)
b5 = semn(ZN)
 Spaţiul omogen normalizat se împarte în 27 de regiuni
după poziţia lor faţă de planele care definesc volumul
canonic de vizualizare.
 În interiorul volumului canonic, toate punctele au codul
de vizibilitate cu toţi biţii egali cu 0 (C = 000000). În toate
celelalte regiuni, codul de vizibilitate este diferit de 0,
având unul sau mai mulţi biţi egali cu 1.

Grafica 3D UPB 2020-2021 29


Decuparea 3D
 Algoritmul Sutherland-Hodgman de decupare în
spaţiu se desfăşoară în mod asemănător cu
algoritmul de decupare în plan:
 Pentru o suprafaţă dată prin vârfurile ei în spaţiu,
decuparea relativ la un volumul dat prin ecuaţiile planelor
sale se efectuează în modul următor:
 se calculează codurile de vizibilitate ale vârfurilor suprafeţei
 se efectuează testele de acceptare şi rejecţie sigură.
 pentru suprafeţele care nu îndeplinesc nici unul din aceste
teste se continuă cu decuparea prin intersecţia cu volumul de
decupare:
 decuparea prin intersecţie a unei suprafeţe se efectuează într-un
număr de paşi egal cu numărul de plane ale volumului de
decupare
 în fiecare pas se obţine o nouă suprafaţă, din care a fost
eliminată porţiunea invizibilă în raport cu planul de decupare
respectiv

Grafica 3D UPB 2020-2021 30


Decuparea 3D
 După efectuarea decupării, se calculează coordonatele xN, yN, zN ale
vârfurilor suprafeţelor vizibile rezultate (prin împărţirea cu wN), iar toate
celelalte vârfuri (ale suprafeţelor invizibile) sunt ignorate. Acest lucru
înseamnă că operaţia de împărţire omogenă se execută pentru un
număr strict necesar de vârfuri, ceea ce reprezintă un câştig în viteza
de execuţie.
 Se pune problema dacă nu ar fi mai simplu să fie efectuată decuparea
în plan, deci după calculul proiecţiilor suprafeţelor, dat fiind că algoritmul
de decupare în plan este mai simplu:
 toate suprafeţele să fie proiectate pe planul de vizualizare
 se efectueze decuparea relativ la fereastra de vizualizare.
 Această soluţie este însă inacceptabilă, datorită faptului că în fereastra de
proiecţie se proiectează atât punctele (vârfuri ale suprafeţelor) aflate în
volumul de vizualizare, cât şi cele aflate într-un volum simetric cu acesta faţă
de planul zV = 0, care se află în spatele observatorului.
 Tratarea tuturor acestor suprafeţe proiectate în fereastra de vizualizare
dar invizibile consumă un timp de execuţie în mod inutil. De aceea,
decuparea obiectelor la volumul de vizualizare nu se poate executa
corect şi eficient decât în spaţiul tridimensional, şi anume în
coordonate normalizate omogene.

Grafica 3D UPB 2020-2021 31

S-ar putea să vă placă și