Você está na página 1de 27

ALGORITMI ZA

RASTERIZACIJU
Odabrana poglavlja kompjuterskih nauka
Maja Mihojevi
5113/M

UVOD
Rasterizacija - postupak u kome se podaci vezani za objekat u vektorskom sistemu
pretvaraju u oblik pogodan za prikaz na ekranu, proces prevoenja grafkih primitiva iz
kontinualnog u diskretni oblik.
Rasterska mrea

NAIVNI ALGORITAM

OSNOVNI ALGORITAM
Parametarski oblik jednaine
kroz dvije take M1(x1, y1) i
M2(x2, y2)
x = x1+k(x2-x1)
y = y1+k(y2-y1)
pri emu je 0 k 1.
Mijenjamo koeficijenat k sa
nekim malim korakom i
uvrtavamo u prethodne dvjie
jednaine
Nema najbolje performanse

NAGIBNI ALGORITAM
y = mx + b
dy
y y
m-koeficijent smjera m= = 2 1
dx
x2x1
Izrauna se y = mx + b za x = x1,
x = x1+1, ... , x = x2

INKREMENTALNI ALGORITAM (DDA)


yi+1 = mxi+1 + b =
= m( xi + x) + b =
= mxi + b +xm =
= yi + xm
Za x = 1 je yi+1 = yi + m.
Za |m|>1 zamjene se uloge od x
i y.
yi+1 = yi + 1
xi+1 = xi + 1
Osvijetlit emo piksel sa
koordinatama (xi,Round(yi))
xi i=0,1,2, cjelobrojne
koordinate
= m xi + b
Round(yi) = 0.5 +
Ostaju operacije sa realnim
brojevima

BRESENHAMOV ALGORITAM
Inkrementalni algoritam koji
koristi iskljuivo cjelobrojnu
aritmetiku
M polovina rastrojanja izmeu
dva piksela
Q presjek originalne linije i linije
x = xp + 1
U Bresenhamovoj formulaciji
raunamo rastojanje izmeu
gornjeg i donjeg i take Q
U formulaciji srednje take
posmatramo s koje strane linije
lei taka M

Linija u implicitnom obliku : F(x,y)= ax+by+c =0


Ako stavimo dy=y1-y0, dx=x1-x0 onda jednainu u eksplicitnom obliku
dy
moemo pisati y=dx x+ l
A implicitna jednaina postaje: F(x,y)= dy*x - dx*y + l*dx gdje su a = dy,
b = - dx , c = l*dx.
Ako je F(x,y) = 0 => taka je na pravi,
Ako je F(x,y) < 0 => taka je ispod prave,
Ako je F(x,y) > 0 => taka je iznad prave.
Raunamo F(M) = F(xp+1, yp +1/2)
Uzimamo d = F(xp+1, yp +1/2) = a (xp+1) + b (yp +1/2) + c
d>0, biramo piksel GD
d<0 biramo piksel D
d=0 biramo bilo koji piksel
Ako je izabran piksel D, onda se M pomie jedan korak u smjeru x
Ako je izabran piksel GD, tada se M pomie jedan korak u smjeru x i jedan
u smjeru y.
Prva krajnja taka je (x0, y0) pa je prva srednja toka (x0 + 1, y0 +1/2)
Za inicijalnu vrijednost od d uzimamo F(x0 + 1, y0 +1/2) == F(x0, y0) + a
+b/2

dpoetni= a + b/2 =dy dx/2


Da izbjegnemo dijeljenje redifinisat emo funkciju F(x,y) = 2(ax + by +c)
Ova verzija algoritma vrijedi samo za one linije iji je koeficijent smjera m
takav da vrijedi 0 m < 1.

ALGORITAM
void SredtocLinija(int x0, int y0, int x1, int y0, int v) //Pretpostavlja se 0 k < 1, x0 <
x1
{
int dx = x1- x0;
int dy = y1- y0;
int d = 2* dy-dx;
/* Inicijalna vrijednost od d */
int deltaD = 2 *dy;
/* Korak za pomicanje do D */
int deltaGD = 2*(dy- dx); /* Korak za pomicanje do GD */
int x = x0;
int y = y0;
NacrtajPixel(x,y,v);
/* Poetni pixel */
while(x < x1){
if(d <= 0){
/* Izaberi D */
d+ = deltaD;
x + +;
} else{
/* Izaberi GD*/
d+ = deltaGD;
x + +;
y + +;
}
NacrtajPixel(x,y,v);
/* Izabrani piksel najblii liniji */
}
}

PRIMJER
elimo aproksimirati liniju
zadanu krajnjim takama (5,8)
(9,11).
dx = 4, dy = 3,deltaD = 6,
deltaGD = -2
x =5, y = 8, d = 2 pa biramo GD
x = 6, y = 9, d = 0 biramo D
x = 7, y = 9, d = 6 biramo GD
x =8, y = 10, d = 4 biramo GD
x =8, y = 10, kraj

RASTERIZACIJA KRUNICE
Implicitna jednaina krunice sa sreditem u ishoditu data je sa:
x2 + y2 = R2
eksplicitne jednadbe krunice
y = 2 2
Moemo crtati po etvrtinu krunice za 0 x R i y >0 i onda koristiti
simetriju
Neefikasno
Moemo takoer koristiti parametarski oblik (R cos , R sin ) za 0
/2
Neefikasno radi trigonometrijskih funkcija.

Osmerostruka simetrija
void TackeKruznice(int x,int y,int v)
{
NacrtajPixel(x,y,v);
NacrtajPixel(y,x,v);
NacrtajPixel(y,-x,v);
NacrtajPixel(x,-y,v);
NacrtajPixel(-x,-y,v);
NacrtajPixel(-y,-x,v);
NacrtajPixel(-y,x,v);
NacrtajPixel(-x,y,v);
}

BRESENHAMOV ALGORITAM SREDNJE TOKE


ZA KRUNICE
Podrazumjevamo da je centar u
ishoditu
Drugi oktant za 0 x < R/ 2 i
R/ 2 < y R
Koristimo proceduru TackeKruznice
Biramo taku koja je blia srednjoj
taki
Definiimo funkciju F(x,y) = x2 + y2 R2. Za nju vrijedi:
F(x,y) = 0 taka na krunici
F(x,y) > 0 izvan krunice
F(x,y) < 0 unutar krunice.
Ako je taka M izvan krunice tada je
piksel JI blii krunici
Ako je M unutar krunice tada je
piksel I blii krunici.

definiimo test varijablu d kao staru vrijednost funkcije F(x,y) u srednjoj


taki.
dstari = F (xp + 1, yp 1/2) = (xp + 1)2 + (yp 1/2)2 R2.
Ako je dstari < 0, M se pomie jedan korak u smjeru x
Ako je dstari 0, M se pomie jedan korak u smjeru x i jedan korak u
smjeru y.
Prvi piksel je na krunici (0,R), a sljedea taka lei u (1, R ) i zato je
F(1, R ) = 1 + (R2 R + ) R2 = 5/4 R.
Da izbjegnemo realnu aritmetiku uvedimo novu test varijablu h = d .
Tada inicijalizacija glasi h = 1 R, a test umjesto d < 0 glasi h < .
Kako h ima na poetku cjelobrojnu vrijednost i inkremntira se cjelobrojnim
vrijednostima I i JI test moemo promijeniti u h < 0.

Efikasniji algoritam ukoliko i I i JI raunamo inkrementalno


Ako u tekuem koraku izaberemo I odabrana taka se pomie sa (xp,yp) na
(xp + 1,yp) i izvod prvog reda u (xp,yp) je Istari = 2xp + 3 . A u (xp + 1,yp)
Inovi = 2(xp + 1) +3 . Izvod drugog reda je : Inovi - Istari = 2.
Izvod prvog reda u (xp,yp) je Istari = 2xp 2yp + 5 pa je u (xp + 1,yp) Inovi
= 2(xp + 1) 2yp + 5 a izvod druog reda je Inovi - Istari = 2.
Ako u tekuem koraku izaberemo JI onda se odabrana taka pomie sa
(xp,yp) na (xp + 1,yp-1). Izvod prvog reda u (xp,yp) je JIstari = 2xp + 3 a u
(xp + 1,yp-1) JInovi = 2(xp + 1) +3 . Izvod drugog reda je JInovi JIstari =
2.
Izvod prvog reda u (xp,yp) je JIstari = 2xp 2yp + 5 pa je u (xp + 1,yp-1)
JInovi = 2(xp + 1) 2(yp -1)+ 5 a izvod druog reda je JInovi JIstari = 4.

void SredtocKruznica(int r , int v) /* Pretpostavlja se da je sredite krunice u


ishoditu */
{int x = 0; int y = r ;
int d = 1 - r ;
int deltaI = 3; int deltaJI = -2 *r + 5;
TockeKruznice(x,y,v);
while (y > x){
if (d < 0)
/* Izaberi I */
d+ = deltaI;
deltaI+ = 2;
deltaJI+ = 2;
else{
/* Izaberi JI */
d+ = deltaJI;
deltaI+ = 2;
deltaJI+ = 4;
y ;
}
x + +;
TockeKruznice(x,y,v);
}
}

OBREZIVANJE (CLIPPING)

Korisnik moe interaktivno mijenjati poloaj i veliinu prozora u kojemu


se prikazuje grafika
Analitiko - najprije se izraunaju osnovni parametri obrezane primitive
(kao npr. krajnje take linije), a nakon toga se primjenjuju algoritmi za
rasterizaciju s novim parametrima
efikasno za realni koordinatni sustav
Istovremeno sa rasterizacijom - svaki piksel primitive se podvrgava
testu da li se nalazi unutar pravougaonika za obrezivanje ili ne
praktino za popunjene i debele primitive jer se provjeravaju samo rubni
pikseli i kada je prikaz primitive malo vei od pravougaonika za
obrezivanje

OBREZIVANJE LINIJA
Analitiki
Imamo vie sluajeva :
1. linija lei unutar pravougaonika -prikazuje se u potpunosti
2. linija sijee bar jedan rub pravougaonika-prikazuje se obrezana
linija
3. linija lei na samoj granici prikazuje se
4. linija lei izvan pravougaonika ne prikazuje se
Taka (x,y) lei unutar pravougaonika ako vrijedi:
xmin x xmax i ymin y ymax

COHEN-SUTHERLANDOV ALGORITAM

U ovome algoritmu se vri provjera krajnjih taaka. Imamo 3 sluaja:


1. trivijalno prihvaanje
2. trivijalno odbijanje
3. niti jedan uvjet nije zadovoljen
Segment se iterativno obrezuje i provjerava da li sada pripada prvom ili
drugom sluaju
Provjeru vrimo na sljedei nain:
posmatramo prave koje su definisane rubovima obrezivanje, one
dijele ravan na 9 podruja
svakom podruju dodijelimo 4-bitni kod
kod je odreen poloajem podruja u odnosu na vanjske poluravni
definisane rubovima pravougaonika
svaki bit je postavljen na 1 (istina) ili 0 (la)
1. bit vanjska poluravan gornjeg ruba, iznad gornjeg ruba (y > ymax)
2. bit vanjska poluravan donjeg ruba, ispod donjeg ruba (y < ymin)
3. bit vanjska poluravan desnog ruba, desno od desnog ruba (x > xmax)
4 bit vanjska poluravan lijevog ruba, lijevo od lijevog ruba (x < xmin)

EFEKAT NAZUBLJIVANJA
Prikaz slike na raunaru zahtjeva diskretizaciju
Javlja se neeljeni efekat alias koji se ogleda u nazubljenim linijama
Koristei razliite nivoe osvijetljenja oko ivinih linija nekog oblika koji
se predstavlja, u oku se stvara iluzija glatkih linija

Prefiltering
Piksel se tretira kao 2D objekat
Moemo iskoristiti udaljenost d u Bresenhamovom algoritmu

Postfiltering (supersampling)
Slika se renderuje na n puta veoj rezoluciji nego to e biti prikazana
Boja konanog piksela se rauna kao prosjek boja pod-piksela od kojih
se on sastoji
Teinski koeficijenti

Izraunamo kodove od obadvije krajnje toke.


Provjerimo uvjete za trivijalno prihvaanje i odbijanje.
Ako obje provjere nisu zadovoljene, tada traimo toku koja lei izvan
pravokutnika.
Provjeravamo kod vanjske toke kako bi odredili rub kojeg linija sijee.
Nalazimo sjecite linije i tog ruba.
Odreimo segment od vanjske toke do sjecita, time to emo vanjsku
krajnju toku zamijeniti sjecitem.
Izraunamo kod nove krajnje toke, kako bismo se pripremili za sljedeu
iteraciju.

HVALA NA PANJI !

Você também pode gostar