Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

43
Raˇ cunarska grafika Rasterizacija Vesna Marinkovi´ c Vesna Marinkovi´ c Raˇ cunarska grafika Rasterizacija 1 / 43

Transcript of Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

Page 1: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

Racunarska grafikaRasterizacija

Vesna Marinkovic

Vesna Marinkovic Racunarska grafika Rasterizacija 1 / 43

Page 2: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 3: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

Algoritmi za crtanje 2D primitiva Rasterski i vektorski sistemi

Vektorski i rasterski sistemi

Vesna Marinkovic Racunarska grafika Rasterizacija 3 / 43

Page 4: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 5: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 6: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 7: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 8: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 9: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 10: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 11: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 12: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

Algoritmi za crtanje 2D primitiva Crtanje duzi

Koeficijent pravca prave

Vesna Marinkovic Racunarska grafika Rasterizacija 12 / 43

Page 13: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 14: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 15: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 16: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 17: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 18: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 19: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 20: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 21: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 22: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 23: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 24: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 25: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 26: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 27: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 28: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 29: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 30: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 31: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 32: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 33: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 34: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 35: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 36: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 37: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 38: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 39: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 40: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 41: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 42: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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

Page 43: Ra cunarska gra ka Algoritmi za crtanje 2D primitiva

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