Documente Academic
Documente Profesional
Documente Cultură
Victor Moraru
wymin
wxmin wxmax
3 4
Coordonate logice Coordonate logice
Fereastra Decuparea (clipping)
Celelalte vor fi decupate
Decupare la frontiera unui dreptunghi din spaiul de afiare,
avnd laturile paralele cu cele ale sistemului de coordonate
carteziene 2D (poarta de afiare)
Fereastra
wymax Decupare la frontiera unui poligon oarecare din spatiul de
afiare
Decuparea se poate efectua:
Analitic, prin intersecia primitivelor grafice cu frontiera
dreptunghiului/poligonului de decupare, nainte de rasterizare
wymin
La momentul rasterizarii primitivelor, prin testul de
apartenenta a fiecrui fragment la dreptunghiul/poligonul de
decupare
Pentru linii si poligoane, decuparea se efectueaz analitic (mai
wxmin wxmax eficient)
5 6
Coordonate logice
7 8
wxmin wxmax wxmin wxmax
Decuparea liniilor Decuparea brut a liniilor
E mai complicat se vor examina capetele liniilor Procedura:
pentru a vedea dac sunt sau nu in fereastra Nu decupm liniile care au ambele capete in
interiorul ferestrei
Situaie Soluie Exemplu
Pentru liniile care au un
capt pe interior i altul pe
Ambele capete sunt in
Nu decupm exterior calculm punctul
fereastra
de intersecie (utilizm
ecuaia liniei) si decupm
Unul dintre capete e in
fereastra, celalalt e in
Trebuie sa din acest punct
decupam
afara ei
Algoritmul Cohen-Sutherland:
Decuparea brut a liniilor divizarea spaiului
Pentru liniile cu ambele
capete pe exterior s se Spaiul este divizat in regiuni in funcie de
verifice dac linia marginile ferestrei
intersecteaz marginile Fiecare regiune are un bit de identificare unic
ferestrei i s se decupeze
Codurile regiunilor indic poziia regiunilor in raport
corespunztor
cu fereastra
15 16
wxmin wxmax
Algoritmul Cohen-Sutherland: Algoritmul Cohen-Sutherland:
alte linii exemple
In caz contrar, comparm restul liniei in raport cu Fie linia P9 - P10 de mai jos
alte margini ale ferestrei
Pornim de la P10
Continum pn cnd linia e eliminata sau pn
cnd e gsit un segment pe interior Reieind din codurile Window
wy
celor doua capete max
Dac unul e 1 i altul e 0 atunci linia intersecteaz cu marginea de jos i gsim wx min wx max
P3 [0001]
intersecteaz marginea intersecteaz marginea
P7 [0000]
dreapt, deci calculam stng, deci calculam P7 [0001] P8 [0010]
intersecia i gsim wymin
intersecia si gsim P8 [0000]
wy
punctul P4 punctul P7 min
Linia P3 - P4 este
complet pe exterior, wxmin wxmax wxmin wxmax
deci e decupat
19 20
Algoritmul Cohen-Sutherland:
exemple Calcularea interseciilor liniilor
Considerm linia P7 - P8
Punctele de intersecie cu marginile ferestrei
Pornim din P8
sunt calculate folosind parametrii ecuaiei liniei
Calculam intersecia Window Consideram o linie intre (x1, y1) si (x2, y2)
wymax
cu marginea dreapt
i gsim P8 Coordonata y a interseciei cu marginea vertical a
P7 [0000]
ferestrei poate fi calculat in felul urmtor:
P7 - P8 e pe interior, P7 [0001] P8 [0010]
wxmin wxmax
21 22
Intersecia cu latura situata pe dreapta x = xmin if(y < ymin) cod |=4;
yi=y1+(xmin-x1)*m }
25 26
Implementare Implementare
Int Cohen_Suth(int x1i,int y1i,int x2i,int y2i, int* x1d,int* y1d,int* x2d,int* y2d) if(cod1==0) //inversare capete
{t=x1;x1=x2;x2=t; t=y1;y1=y2;y2=t; cod1=cod2;}
{ // primeste coord. capetelor vectorului de decupat si intoarce coord. partii incluse in if(cod1 & 1)
dreptunghi, daca exista { y1+=(xmin-x1)*m; x1=xmin;}
int acceptat,rejectat,vertical; else
if(cod1 & 2)
float m, x1=x1i, y1=y1i, x2=x2i, y2=y2i; { y1+=(xmax-x1)*m; x1=xmax; }
int cod1, cod2, t; else
if(cod1 & 4)
acceptat=rejectat=vertical=0; { if (!vertical) x1+=(ymin-y1)/m;
if (x1i != x2i) y1=ymin;
m=(y2-y1)/(x2-x1); }
else
else {if (!vertical) x1+=(ymax-y1)/m;
vertical=1; y1=ymax;
}
do } while ( acceptat==rejectat);
{ cod1=codif(x1,y1); cod2=codif(x2,y2); if(acceptat)
if(cod1==0 && cod2==0) { acceptat=1; break;} {*x1d=x1;*y1d=y1;*x2d=x2;*y2d=y2;
return 1;
if((cod1 & cod2) !=0 ) { rejectat=1; break;} }
return 0;
}
}
27 28
Algoritmul Sutherland-Hodgman pentru
Decuparea suprafeelor decuparea suprafeelor
Suprafeele pot fi decupate
Poligonul e decupat lundu-se in consideraie
la fel ca i liniile
marginea la care se afla el
Va trebui s decidem care
poriune a suprafeei va
trebui decupat i care
pstrat
29 30
Dac plecm dintr-un punct intern ctre unul extern, adugm doar P1
p
intersecia liniei cu marginea e memorat Unde P este punctul de 1 p
0
Punctele salvate P
Salveaz punctul P Salveaz punctul I
definesc suprafaa
decupat la marginea P S
respectiva I P
Ferastr Ferastr Ferastr Ferastr
Rezumat
Obiectele scenei necesit decupare pentru a
pstra doar ceea ce trebuie afiat
Pe motivul c pot exista destul de multe obiecte,
decuparea trebuie sa fie eficient
Algoritmul Cohen-Sutherland poate fi utilizat att
pentru decuparea liniilor ct i a suprafeelor
35