Ra cunarska gra ka Algoritmi za crtanje 2D primitiva
Transcript of Ra cunarska gra ka Algoritmi za crtanje 2D primitiva
Racunarska grafikaRasterizacija
Vesna Marinkovic
Vesna Marinkovic Racunarska grafika Rasterizacija 1 / 43
Obnavljanje
Osnovni koncepti sa prethodnog casa
Racunarska grafika se bavi pravljenjem modela objekata na sceni imodela osvetljenja scene i na osnovu toga pravljenjem određenogpogleda na scenu
Dve osnovne poddiscipline racunarske grafike:
Modelovanje – izrada matematicke specifikacije objekata i njihovihvizuelnih svojstava, zadavanje modela svetlosti i pozicioniranje nasceni; hijerarhijski je zasnovanoRenderovanje – na osnovu modela objekata i modela ponasanjasvetlosti pravi se realisticna 2D slika
renderovanje unapred i renderovanje unazadonlajn i oflajn renderovanje
Grafika moze biti zasnovana na uzorku ili na geometriji
Grafika moze biti interaktivna i neinteraktivna
Vesna Marinkovic Racunarska grafika Rasterizacija 2 / 43
Algoritmi za crtanje 2D primitiva Rasterski i vektorski sistemi
Vektorski i rasterski sistemi
Vesna Marinkovic Racunarska grafika Rasterizacija 3 / 43
Algoritmi za crtanje 2D primitiva Rasterski i vektorski sistemi
Vektorska grafika (eps, svg, ai, . . .)
Slika je predstavljena kao kolekcija geometrijskih figura(tacke, prave, krive, poligoni, putanje, . . .)
Za svaku figuru cuvaju se njeni parametri i njen polozaj na slici
SVG tutorijal: https://www.w3schools.com/graphics/svg_intro.asp
Vesna Marinkovic Racunarska grafika Rasterizacija 4 / 43
Algoritmi za crtanje 2D primitiva Rasterski i vektorski sistemi
Vektorska grafika
Memorija koju slika zauzima zavisi od njenog sadrzaja, cesto je manjaod rasterske slike
Skaliranje vektorske slike je jednostavno i sa savrsenom preciznoscu
Vektorska grafika se koristi za fontove, logotipove, stampani materijalvelikog formata, animacije, . . .
Nije pogodna za predstavljanje fotografija ili fotorealisticnih slika;potreban je poseban softver za njihovu obradu
Vesna Marinkovic Racunarska grafika Rasterizacija 5 / 43
Algoritmi za crtanje 2D primitiva Rasterski i vektorski sistemi
Osnovni pojmovi rasterske grafike
Ekranu je pridruzena matrica piksela – bitmapaPiksel – najmanji graficki element rasterske slike sa pridruzenimvrednostima intenziteta/boje/transparentnosti, . . .
kvadrat sa centrom u cvoru celobrojne mrezekrug sa centrom u cvoru celobrojne mreze
Koordinatni pocetak je u donjem levom uglu ekrana
Bitska dubina – broj bitova N koji se koristi za predstavljanje piksela
Svaki piksel ima jednu od 2N vrednosti
Vesna Marinkovic Racunarska grafika Rasterizacija 6 / 43
Algoritmi za crtanje 2D primitiva Rasterski i vektorski sistemi
Rasterska grafika (jpg, png, gif, bmp, . . .)
Memorija koju slika zauzima zavisi od rezolucije i bitske dubine
Problemi pri skaliranju slike (nazubljenost, mutnost)
Koristi se za fotografije, u veb dizajnu, . . .
Slika se moze kompresovati da bi se smanjila velicina datoteke
kompresija sa gubicima (lossy)kompresija bez gubitaka (lossless)
Vesna Marinkovic Racunarska grafika Rasterizacija 7 / 43
Algoritmi za crtanje 2D primitiva Rasterski i vektorski sistemi
JPEG vs. PNG vs. GIF
JPEG (Joint Photographic Expert Group)Podrzava 24-bitne bojeDobar izbor za kompresovanje slika visoke rezolucije bez tekstaKoristi kompresiju sa gubicimaNe podrzava transparentnu pozadinu (slike su uvek pravougaonogformata sa punom pozadinom)Manja velicina datoteke (u odnosu na PNG) za slican kvalitet slike
PNG (Portable Network Graphic)Podrzava 24-bitne bojeKoristi kompresiju bez gubitakaVelicina datoteke slika u visokoj rezoluciji je velikaPodrzava transparentnu pozadinu (pogodna za logoe)
GIF (Graphics Interchange Format)Podrzava samo 8-bitne bojeOsnovna prednost u odnosu na JPEG i PNG je da kompresuje digitalneslike u manje datoteke (smanjivanjem broja boja)Podrzava transparentnost i kratke animacije male velicine
Vesna Marinkovic Racunarska grafika Rasterizacija 8 / 43
Algoritmi za crtanje 2D primitiva Rasterizacija
Rasterizacija
Rasterizacija (ili sken konverzija) je proces transformisanja objekataniskog nivoa u njihovu rastersku verziju (reprezentaciju pikselima)
Podrazumeva se da nam je na raspolaganju operacija:
setPixel(x,y)
Vesna Marinkovic Racunarska grafika Rasterizacija 9 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Crtanje duzi – opis problema
Zadatak: Postaviti boje piksela tako da aproksimiraju duz od tacke(x0, y0) do tacke (x1, y1)
Zahtevi:
Sto blize idealnoj pravojObavezno prolazi kroz krajnje tackeSve tacke svake duzi su iste osvetljenosti bez obzira na nagib i duzinuCrtanje treba da bude sto brze
Vesna Marinkovic Racunarska grafika Rasterizacija 10 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Jednacine prave
Eksplicitna jednacina prave je y = mx + B
Iz pripadnosti tacaka (x0, y0) i (x1, y1) pravoj, dobijamo m = y1−y0x1−x0
Jednacina prave kroz datu tacku (x0, y0) je y = m(x − x0) + y0
Vesna Marinkovic Racunarska grafika Rasterizacija 11 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Koeficijent pravca prave
Vesna Marinkovic Racunarska grafika Rasterizacija 12 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Koeficijent pravca prave
Ako bi se u svakoj koloni oznacavao po jedan piksel, bila bi vidljivarazlika u osvetljenosti duzi razlicitog nagiba
Zato uvodimo naredno pravilo:
|m| < 1 – crta se po tacno jedan piksel u svakoj kolonim > 1 ili m < −1 – crta se po tacno jedan piksel u svakoj vrsti
Vesna Marinkovic Racunarska grafika Rasterizacija 13 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Crtanje duzi – osnovni zadatak
Jednobitna slika (piksel ima dve moguce vrednosti: 0 i 1)
Duz je debljine 1
Duz ima koeficijent pravca m: |m| < 1(za |m| > 1 radimo simetricno)
Kriterijum ocene kvaliteta: minimalno rastojanje od idealne duzi
Zbog pogodosti racuna piksel cemo u algoritmima razmatrati uterminima krugova sa centrom u cvorovima celobrojne mreze
mozemo koristiti termine “između dve tacke”, “prava je bliza jednomod dva susedna piksela” . . .
Vesna Marinkovic Racunarska grafika Rasterizacija 14 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Algoritam grube sile
procedure Line_brute_force(x0, y0, x1, y1 : integer);
var
x : integer;
dx, dy, y, m : real;
begin
dx := x1 - x0;
dy := y1 - y0;
m := dy/dx;
for x := x0 to x1 do
begin
y := m * (x - x0) + y0;
setPixel(x, round(y));
end
end.
Vesna Marinkovic Racunarska grafika Rasterizacija 15 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Algoritam grube sile – nedostaci
Veliki broj operacija – svaki korak ukljucuje sabiranje, oduzimanje,mnozenje, zaokruzivanje
Koriscenje aritmetike u pokretnom zarezu – mnozenje, sabiranje,zaokruzivanje
Pomocne promenljive su realnog tipa
Vesna Marinkovic Racunarska grafika Rasterizacija 16 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Osnovni inkrementalni algoritam – ideja
Vazi veza:
yi+1 = mxi+1 + B = m(xi + 1) + B = mxi + m + B = yi + m
Ideja inkrementalnosti – za racunanja u narednom koraku koristimovec izracunate vrednosti iz prethodnog korakaNa ovaj nacin eliminise se mnozenje
xi , [yi + 0.5]
xi+1, [yi + 0.5 + m]
Vesna Marinkovic Racunarska grafika Rasterizacija 17 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Osnovni inkrementalni algoritam
procedure Line_increment_basic(x0, y0, x1, y1 : integer);
var
x : integer;
dx, dy, y, m : real;
begin
dx := x1 - x0;
dy := y1 - y0;
m := dy/dx;
y := y0;
for x := x0 to x1 do
begin
setPixel(x, round(y));
y := y + m
end
end.
Vesna Marinkovic Racunarska grafika Rasterizacija 18 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Osnovni inkrementalni algoritam – komentari
Sta bi se desilo sa ovim algoritmom u slucaju |m| > 1?
Nedostaci ovog algoritma:
m je realna vrednost izracunata sa nekom tacnoscu i greska se tokomizvrsavanja nagomilavaI dalje vrsimo zaokruzivanjePromenljive su i dalje realnog tipa
Vesna Marinkovic Racunarska grafika Rasterizacija 19 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Midpoint algoritam (varijanta Bresenhamovog algoritma)
Bresenham (1965) – crtanje duzi koriscenjem celobrojne aritmetike
Pitteway (1967), Van Aken (1984) – unapredili algoritam, moze seuopstiti na proizvoljnu krivu drugog reda
Zahtevi:
0 < m < 1(x0, y0) je donja leva tacka, a (x1, y1) gornja desna i potrebno ih jespojiti
Vesna Marinkovic Racunarska grafika Rasterizacija 20 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Midpoint algoritam
Oznacili smo piksel P(xp, yp) i u narednom koraku pravimo izborizmeđu samo dva piksela: E i NE
zasto je dovoljno razmatrati samo ova dva piksela?kako napraviti izbor?
P = (xp, yp)
prethodni tekuci piksel naredni
E
NE
M
Q
Vesna Marinkovic Racunarska grafika Rasterizacija 21 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Midpoint algoritam
Oznacili smo piksel P(xp, yp) i u narednom koraku pravimo izborizmeđu samo dva piksela: E i NE
Bresenham: razmatra se rastojanje tacaka E i NE do presecne tackeduzi koju rasterizujemo sa pravom x = xp + 1 i bira se blizaMidpoint: razmatra se odnos tacke M (srediste duzi određene tackamaE i NE ) sa duzi koju rasterizujemo: ako je M ispod preseka duzi kojase rasterizuje sa pravom x = xp + 1 bira se NE , a inace E
P = (xp, yp)
prethodni tekuci piksel naredni
E
NE
M
Q
Vesna Marinkovic Racunarska grafika Rasterizacija 22 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Midpoint algoritam (nastavak)
Kako proveriti da li se tacka M nalazi iznad ili ispod date pravekoriscenjem celobrojne aritmetike?
Iz eksplicitne jednacine prave dobijamo njenu implicitnu jednacinu:
y =dy
dxx + B (dx = x1 − x0, dy = y1 − y0)
F (x , y) = dy · x − dx · y + B · dx = 0, −dx < 0
F (x , y) = a · x + b · y + c = 0, a = dy , b = −dx < 0, c = B · dx
Vrednost F (x , y) jednaka je 0 za tacke na pravoj, pozitivna je zatacke ispod prave, a negativna za tacke iznad prave
Vesna Marinkovic Racunarska grafika Rasterizacija 23 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Midpoint algoritam – promenljiva odlucivanja
P = (xp, yp)
prethodni tekuci piksel naredni
E
NE
M
Q
Vrednost d = F (M) = F (xp + 1, yp + 12) na osnovu koje se pravi izbor
zovemo promenljiva odlucivanja:
d < 0 – M je iznad prave – biramo Ed > 0 – M je ispod prave – biramo NEd = 0 – stvar dogovora, biramo E
Koja je pozicija tacke M i vrednost promenljive d za narednuvertikalnu liniju mreze? Odgovor zavisi od toga da li smo uprethodnom koraku odabrali piksel E ili NE
Vesna Marinkovic Racunarska grafika Rasterizacija 24 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Midpoint algoritam – azuriranje promenljive odlucivanja
P = (xp, yp)
prethodni tekuci piksel naredni
E
NE
M
Q
Ako smo u prethodnom koraku odabrali E :
dnew = F (xp + 2, yp +1
2) = a(xp + 2) + b(yp +
1
2) + c =
a + a(xp + 1) + b(yp +1
2) + c = a + dold = dold + dy = dold + ∆E
Ako smo u prethodnom koraku odabrali NE :
dnew = F (xp + 2, yp +3
2) = a(xp + 2) + b(yp +
3
2) + c =
a + b + a(xp + 1) + b(yp +1
2) + c = a + b + dold = dold + dy − dx = dold + ∆NE
∆E , odnosno ∆NE je korektivni faktor i nazivamo ga razlikom unapred
Vesna Marinkovic Racunarska grafika Rasterizacija 25 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Midpoint algoritam – pocetna iteracija
Algoritam u svakom koraku bira između dva piksela na osnovu znakapromenljive odlucivanja
Naredna vrednost promenljive odlucivanja racuna se na osnovuprethodne – inkrementalni pristup
Potrebno nam je da eksplicitno izracunamo prvu vrednost
Za prvu tacku vazi:
dstart = F (x0 + 1, y0 +1
2) = a(x0 + 1) + b(y0 +
1
2) + c = a + b/2
Da bi se izbeglo deljenje sa dva, sve vrednosti mnozimo sa 2; pritomrelevantni znakovi ostaju isti
dstart = 2a + b = 2dy − dxako je dold ≤ 0, onda dnew = dold + 2dyako je dold > 0, onda je dnew = dold + 2dy − 2dx
Vesna Marinkovic Racunarska grafika Rasterizacija 26 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Midpoint algoritam za crtanje duzi
procedure Line_midpoint(x0, y0, x1, y1 : integer);
var
dx, dy, x, y, d : integer;
begin
dx := x1 - x0;
dy := y1 - y0;
y := y0;
d := 2*dy - dx;
for x := x0 to x1 do
begin
setPixel(x, y);
if (d <= 0) { izabrana je tacka E }
begin
d := d + 2*dy;
end
else { izabrana je tacka NE }
begin
y := y + 1;
d := d + 2*(dy-dx);
end
end
end.
Vesna Marinkovic Racunarska grafika Rasterizacija 27 / 43
Algoritmi za crtanje 2D primitiva Crtanje duzi
Crtanje duzi – dodatna pitanja
Duzi razlicitog nagiba imaju razlicitu osvetljenost
Duzi P0P1 i P1P0 treba da se crtaju na isti nacin
zbog stilova nije dobro uvek svoditi na poredak sleva nadesnovazan je odabir piksela kada je vrednost promenljive odlucivanja d = 0
Vesna Marinkovic Racunarska grafika Rasterizacija 28 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Crtanje kruga – opis problema
Zadatak: Postaviti boje piksela tako da aproksimiraju sliku kruga sacentrom u tacki (0, 0)
Zahtevi:
Sto blize idealnom kruguCrtanje treba da bude sto brze
Vesna Marinkovic Racunarska grafika Rasterizacija 29 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Crtanje kruga – osnovni zadatak
Jednobitna slika (piksel ima dve moguce vrednosti: 0 i 1)
Krug je debljine 1
Centar kruga je u tacki (0, 0)
Radimo sa jednim kvadrantom; na osnovu simetrije mogu se odreditipikseli u ostalim kvadrantima
Vesna Marinkovic Racunarska grafika Rasterizacija 30 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Algoritam grube sile
Implicitna jednacina kruga je: x2 + y2 = R2, a iz nje mozemo dobitieksplicitnu jednacinu: y = ±
√R2 − x2
xi se pocev od vrednosti 0 inkrementira za po 1 i osvetljavamo tacku:
(xi , [√R2 − x2i + 0.5]), i = 1, 2, 3, . . .
Nedostaci:
neefikasno: aritmetika u pokretnom zarezu, racunanje korena,zaokruzivanje, . . .sa porastom vrednosti x povecavaju se praznine između tacaka
Vesna Marinkovic Racunarska grafika Rasterizacija 31 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Midpoint (Bresenham-ov) inkrementalni algoritam
Bresenham (1977), Midpoint algoritam je varijanta Bresnehamovogalgoritma
Razmatramo samo osminu kruga; ostali slucajevi obrađuju sesimetricno
Vrednost x ide od 0 do R/√
2
Osnovna ideja slicna je ideji za crtanje duzi: u svakom koraku trebaodabrati jednu od dve moguce tacke
Vesna Marinkovic Racunarska grafika Rasterizacija 32 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Midpoint (Bresenham-ov) inkrementalni algoritam
P = (xp, yp)
prethodni tekuci piksel naredni
E
SE
M
MSE
ME
Vrednost F (x , y) = x2 + y2 − R2 jednaka je 0 u tackama kojepripadaju krugu, pozitivna je u spoljasnjosti, a negativna uunutrasnjosti krugaAko je tacka M u unutrasnjosti kruga, onda je tacka E bliza krugunego tacka SE . Ako je tacka M u spoljasnjosti kruga, onda je tackaSE bliza krugu
Vesna Marinkovic Racunarska grafika Rasterizacija 33 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Midpoint algoritam – promenljiva odlucivanja
P = (xp, yp)
prethodni tekuci piksel naredni
E
SE
M
MSE
ME
Vrednost d = F (xp + 1, yp − 12) = (xp + 1)2 + (yp − 1
2)2 − R2 naosnovu koje se pravi izbor nazivamo promenljiva odlucivanja:
d < 0 – M je u unutrasnjosti kruga – bira se tacka Ed > 0 – M je u spoljasnjosti kruga – bira se tacka SEd = 0, stvar dogovora, bira se tacka SE
Vesna Marinkovic Racunarska grafika Rasterizacija 34 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Midpoint algoritam – azuriranje promenljive odlucivanja
P = (xp, yp)
prethodni tekuci piksel naredni
E
SE
M
MSE
ME
Ako je dold < 0, bira se tacka E i vazi:
dnew = F (xp + 2, yp −1
2) = (xp + 2)2 + (yp −
1
2)2 − R2 = dold + (2xp + 3)
Ako je dold ≥ 0, bira se tacka SE i vazi:
dnew = F (xp + 2, yp −3
2) = (xp + 2)2 + (yp −
3
2)2 − R2 = dold + (2xp − 2yp + 5)
U slucaju dold < 0 koristi se ∆E = 2xp + 3
U slucaju dold ≥ 0 koristi se ∆SE = 2xp − 2yp + 5
Obe ove razlike su celobrojne i zavise od koordinata tacke P
Vesna Marinkovic Racunarska grafika Rasterizacija 35 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Midpoint algoritam za crtanje kruga – analiza
Pocetni uslov (za celobrojni poluprecnik):
F (0,R) = 0
F (1,R − 1
2) = 1 + (R2 − R +
1
4)− R2 =
5
4− R
Prva vrednost za d nije celobrojna
Koristicemo zamenu h = d − 14 : tada je inicijalna vrednost h = 1− R,
a poređenje d < 0 postaje h < −14
Kako je inicijalna vrednost promenljive d celobrojna i kako suvrednosti koje se dodaju (∆E i ∆SE ) celobrojne, ovaj uslov moze dase zameni sa h < 0
Ovako uvedenu promenljivu h na kraju oznacavamo sa d
Vesna Marinkovic Racunarska grafika Rasterizacija 36 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Midpoint algoritam za crtanje kruga
procedure MidpointCircle (r : integer);
var
x, y, d : integer;
begin
x := 0;
y := r;
d := 1 - r;
setPixel(x, y);
while (y > x) do
begin
if d < 0 then { izabrana je tacka E }
begin
d := d + 2*x + 3;
x := x + 1;
end
else { izabrana je tacka SE }
begin
d := d + 2*(x-y) + 5;
x := x + 1;
y := y - 1;
end
setPixel(x, y);
end
end.
Vesna Marinkovic Racunarska grafika Rasterizacija 37 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Unapređeni midpoint algoritam za crtanje kruga
Vrednosti ∆E i ∆SE su linearne te za njihovo izracunavanje takođemozemo koristiti tehniku inkrementalnog uvecavanja
Ideja je da se i za ove vrednosti, kao kod promenljive odlucivanja,nove vrednosti ∆Enew i ∆SEnew izraze preko starih ∆Eold i ∆SEold
Pritom u svakom koraku moramo azurirati i ∆E i ∆SE jer namazurirana verzija neke od ovih vrednosti moze zatrebati u nekojnarednoj iteraciji
Prilikom analize, vaznu ulogu igra informacija koja je tacka bilaizabrana u prethodnom koraku, da bismo znali gde se premestanaredna referentna tacka
Vrednosti za koje se uvecavaju promenljive ∆E i ∆SE nazivamorazlike drugog reda
Vesna Marinkovic Racunarska grafika Rasterizacija 38 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Unapređeni midpoint algoritam – azuriranje razlika unapred
P = (xp, yp)
prethodni tekuci piksel naredni
E
SE
M
MSE
ME
Ako je izabrana tacka E , referentna tacka se pomera iz (xp, yp) u (xp + 1, yp)
Vrednost ∆Eold u (xp, yp) je jednaka 2xp + 3, a vrednost ∆Enew u tacki(xp + 1, yp) je jednaka
∆Enew = 2(xp + 1) + 3 = ∆Eold + 2
Vrednost ∆SEold u (xp, yp) jednaka je 2xp − 2yp + 5, a vrednost ∆SEnew
u tacki (xp + 1, yp) je jednaka
∆SEnew = 2(xp + 1)− 2yp + 5 = ∆SEold + 2
Vesna Marinkovic Racunarska grafika Rasterizacija 39 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Unapređeni midpoint algoritam – azuriranje razlika unapred
P = (xp, yp)
prethodni tekuci piksel naredni
E
SE
M
MSE
ME
Ako je izabrana tacka SE , referentna tacka se pomera iz (xp, yp) u (xp + 1, yp − 1)
Vrednost ∆Eold u (xp, yp) je jednaka 2xp + 3, a vrednost ∆Enew u tacki(xp + 1, yp − 1) je jednaka
∆Enew = 2(xp + 1) + 3 = ∆Eold + 2
Vrednost ∆SEold u (xp, yp) jednaka je 2xp − 2yp + 5, a vrednost ∆SEnew
u tacki (xp + 1, yp − 1) je jednaka
∆SEnew = 2(xp + 1)− 2(yp − 1) + 5 = ∆SEold + 4
Vesna Marinkovic Racunarska grafika Rasterizacija 40 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Unapređeni midpoint algoritam – azuriranje razlika unapred
Pocetne vrednosti za ∆E i ∆SE se dobijaju za polaznu tacku(xp, yp) = (0,R)
∆Estart = 2xp + 3 = 3∆SEstart = 2xp − 2yp + 5 = −2R + 5
Vesna Marinkovic Racunarska grafika Rasterizacija 41 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Unapređeni midpoint algoritam za crtanje kruga
procedure MidpointCircle2 (r : integer);
var
x, y, d, deltaE, deltaSE : integer;
begin
x := 0;
y := r;
d := 1 - r;
deltaE := 3;
deltaSE := -2*r + 5;
setPixel(x, y);
while (y > x) do
begin
if d < 0 then { izabrana je tacka E }
begin
d := d + deltaE;
deltaE := deltaE + 2;
deltaSE := deltaSE + 2;
x := x + 1;
end
else { izabrana je tacka SE }
begin
d := d + deltaSE;
deltaE := deltaE + 2;
deltaSE := deltaSE + 4;
x := x + 1;
y := y - 1;
end
setPixel(x, y);
end
end.Vesna Marinkovic Racunarska grafika Rasterizacija 42 / 43
Algoritmi za crtanje 2D primitiva Crtanje kruga
Crtanje kruga ciji centar nije u koordinatnom pocetku
Ako srediste kruga nije tacka (0, 0) nego tacka (a, b), koristi sealgoritam slican navedenom
Nije isplativo za svaki piksel pojedinacno dodavati a i b (u odnosu napiksele kruga sa sredistem (0, 0))
Sve razlike prvog i drugog reda su iste (ako je poluprecnik isti) bezobzira na srediste kruga
Razlikuje se samo pocetni piksel – umesto (0,R) prvi ukljuceni pikseltreba da bude (a,R + b), a umesto uslova y > x treba koristiti uslovy − b > x − a, tj. efikasnije y > x + (b − a)
Vesna Marinkovic Racunarska grafika Rasterizacija 43 / 43