38
Računarska Računarska grafika grafika predavanja predavanja v.as.mr. Samir Lemeš v.as.mr. Samir Lemeš [email protected] [email protected]

Računarska grafika

Embed Size (px)

DESCRIPTION

Računarska grafika. predavanja v.as.mr. Samir Lemeš [email protected]. 28. Rasterizacija. Rasterizacija linija DDA algoritam Bresenham ov algoritam Rasterizacija kruga Rasterizacija elipse Rasterizacija trougla Scan-line r asteriza cija. Rasterizacija. - PowerPoint PPT Presentation

Citation preview

Page 1: Računarska grafika

RačunarskaRačunarskagrafikagrafika

predavanjapredavanjav.as.mr. Samir Lemešv.as.mr. Samir Lemeš[email protected]@mf.unze.ba

Page 2: Računarska grafika

28. 28. RasterizacijaRasterizacija

Rasterizacija linijaRasterizacija linijaDDA algoritamDDA algoritamBresenhamBresenhamov algoritamov algoritamRasterizacija krugaRasterizacija krugaRasterizacija elipseRasterizacija elipseRasterizacija trouglaRasterizacija trouglaScan-line Scan-line rrasterizaasterizacijacija

Page 3: Računarska grafika

RasterizacijaRasterizacija

Pretvaranje iz kontinuiranog u diskretnoPretvaranje iz kontinuiranog u diskretno

Page 4: Računarska grafika

Malo Malo matematikematematike

Data je treća tačka na linijiData je treća tačka na liniji: :

P = (X,Y)P = (X,Y)

NagibNagib = (Y - Y = (Y - Y11)/(X - X)/(X - X11) )

= (Y= (Y22 - Y - Y11)/(X)/(X22 - X - X11))

Rješenje po Rješenje po YY

Y = [(YY = [(Y22-Y-Y11)/(X)/(X22-X-X11)]X )]X

+ [-(Y+ [-(Y22-Y-Y11)/(X)/(X22-X-X11)]X)]X11 + Y + Y11

iliili

Y = mx + bY = mx + b

2

4

1 2 3 4 5 6

3

5

6

1 P1 = (X1,Y1)

P2 = (X2,Y2)

P = (X,Y)

Page 5: Računarska grafika

Jednačine linijeJednačine linije

PitanjePitanje: : Koji jeKoji je implicit implicitni oblik jednačine linijeni oblik jednačine linije?? Ax + By + C = 0Ax + By + C = 0

PitanjePitanje: : Ako se znaju koordinate tačkeAko se znaju koordinate tačke ( (xx,,yy), ), šta se šta se dobije uvrštavanjem tih vrijednosti u jednačinu dobije uvrštavanjem tih vrijednosti u jednačinu linijelinije?? Da li je tačkaDa li je tačka::

Na linijiNa liniji: : Ax + By + C = 0 Ax + By + C = 0 "Iznad""Iznad" linijelinije: : Ax + By + C > 0 Ax + By + C > 0 "Ispod" linije"Ispod" linije: : Ax + By + C < 0 Ax + By + C < 0

Page 6: Računarska grafika

Druge korisne Druge korisne formuleformule

DužinaDužina segment segmentaa linije izmeđulinije između P P11 ii P P22::

L = L = ¦¦ [ (X [ (X22-X-X11))22 + (Y + (Y22-Y-Y11))22 ] ]

Srednja tačka Srednja tačka segmentsegmenta linije izmeđua linije između P P11 ii P P33::

PP22 = ( (X = ( (X11+X+X33)/2 , (Y)/2 , (Y11+Y+Y33)/2 ))/2 )

Dvije linije su okomite ako jeDvije linije su okomite ako je

1) M1) M11 = -1/M = -1/M22

2) 2) Kosinus ugla između njih Kosinus ugla između njih 0.0.

Page 7: Računarska grafika

ParametParametaarrskiski oblikoblik jednačinejednačine 2D Lin 2D Linijijee

Date su tačke Date su tačke PP11 = (X = (X11, Y, Y11) ) ii P P22 = (X = (X22, Y, Y22))

X = XX = X11 + t(X + t(X22-X-X11))

Y = YY = Y11 + t(Y + t(Y22-Y-Y11))

t t se nazivase naziva ""parametparametaarr"". . Kad jeKad je

t = 0 t = 0 dobije sedobije se (X (X11,Y,Y11))

t = 1 t = 1 dobije sedobije se (X (X22,Y,Y22))

Kako jeKako je 0 < t < 1 0 < t < 1 dobiju se sve ostale tačke na dobiju se sve ostale tačke na segmentsegmentu linije izmeđuu linije između (X(X11,Y,Y11) ) ii (X (X22,Y,Y22).).

Page 8: Računarska grafika

OsnovniOsnovni aalgoritlgoritmi za liniju i mi za liniju i krugkrug1. M1. Moraju se izračunati cjelobrojne koordinate piksela koji leže oraju se izračunati cjelobrojne koordinate piksela koji leže

na ili u blizini linije ili krugana ili u blizini linije ili kruga..2. 2. Algoritmi za vrednovanje piksela se pozivaju stotinama ili Algoritmi za vrednovanje piksela se pozivaju stotinama ili

hiljadama puta svaki put kad se slika kreira ili promijenihiljadama puta svaki put kad se slika kreira ili promijeni..3. Lin3. Linijije e moraju formirati vizualno prihvatljive slikemoraju formirati vizualno prihvatljive slike..

LinLinijeije moraju izgledati pravemoraju izgledati prave LinLinijeije moaju imati precizno definisane krajevemoaju imati precizno definisane krajeve LinLinijeije moraju imati konstantnu debljinumoraju imati konstantnu debljinu Debljina lDebljina lininijije e ne smije zavisiti od dužine i nagiba ne smije zavisiti od dužine i nagiba

linijelinije..4. 4. Algoritmi za linije moraju uvijek biti definisaniAlgoritmi za linije moraju uvijek biti definisani..

Page 9: Računarska grafika

Jednostavni DDA algoritam Jednostavni DDA algoritam zza a linijelinije

{{Zasnovan na Zasnovan na parametparametaarrskoj jednačiniskoj jednačini lin linijije}e}Procedure DDA(X1,Y1,X2,Y2 :Integer);Procedure DDA(X1,Y1,X2,Y2 :Integer);Var Var Length, ILength, I :Integer;:Integer;

X,Y,Xinc,YincX,Y,Xinc,Yinc :Real;:Real;

BeginBeginLength := ABS(X2 - X1);Length := ABS(X2 - X1);If ABS(Y2 - Y1) > Length ThenIf ABS(Y2 - Y1) > Length Then

Length := ABS(Y2-Y1);Length := ABS(Y2-Y1);Xinc := (X2 - X1)/Length;Xinc := (X2 - X1)/Length;Yinc := (Y2 - Y1)/Length;Yinc := (Y2 - Y1)/Length;X := X1;X := X1;Y := Y1;Y := Y1;For I := 0 To Length DoBegin

Plot(Round(X), Round(Y));

X := X + Xinc;Y := Y + Yinc

End {For}End; {DDA}

DDigital igital DDifferential ifferential AAnalyzernalyzer(Digitalni diferencijalni (Digitalni diferencijalni analizator)analizator)

DDA DDA kkrereira dobre linije ali ira dobre linije ali je prespor zbog funkcije je prespor zbog funkcije "round" i sporih operacija "round" i sporih operacija nad realnim brojevimanad realnim brojevima..

Page 10: Računarska grafika

DDA DDA primjerprimjerIzračunatiIzračunati koji pikseli trebaju biti uključeni da prikažu liniju od koji pikseli trebaju biti uključeni da prikažu liniju od (6,9) (6,9) ddo o (11,12).(11,12).

DužinaDužina := Max o := Max odd (ABS(11-6), ABS(12-9)) = 5 (ABS(11-6), ABS(12-9)) = 5

Xinc := 1Xinc := 1

Yinc := 0.6Yinc := 0.6

Izračunate vrijednosti suIzračunate vrijednosti su::

(6,9), (7,9.6), (6,9), (7,9.6),

(8,10.2), (9,10.8),(8,10.2), (9,10.8),

(10,11.4), (11,12)(10,11.4), (11,12)

6 7 8 9 10 11 12 13

9

10

11

12

13

Page 11: Računarska grafika

Jednostavni aJednostavni algoritlgoritmi za mi za krugkrugJednačina kruga radijusaJednačina kruga radijusa r r sa centrom u sa centrom u (0,0) (0,0) glasi:glasi:

xx22 + y + y22 = r = r22, , očigledno treba nacrtati:očigledno treba nacrtati:

y = ±y = ±(r(r22 - x - x22))zaza -r <= x <= r. -r <= x <= r.

TTo funkcioniše, ali je neefikasno o funkcioniše, ali je neefikasno zbog množenja i kvadratnog korijena. zbog množenja i kvadratnog korijena. Također kreira velike greške uTakođer kreira velike greške ukrugu za vrijednosti x koje su blizu Rkrugu za vrijednosti x koje su blizu R..

Bolji pristup, koji je još uvijek neefikasan, ali izbjegava greške je Bolji pristup, koji je još uvijek neefikasan, ali izbjegava greške je crtanje:crtanje:

x = r cosøx = r cosøy = r sinøy = r sinø

tako datako da ø ø uzima vrijednosti od uzima vrijednosti od 0 0 dodo 360 360 stepenistepeni..

Page 12: Računarska grafika

BresenhamBresenhamov ov algoritamalgoritamPretpostavkaPretpostavka: : crtanje linije nagiba crtanje linije nagiba m m odod 0 0 dodo 1 1

Koristi se Koristi se implicitimplicitna jednačinana jednačina lin linijije: e: y = mx + B y = mx + B gdje jegdje je mm nagib nagib linlinijije e aa BB jeje presjek sa presjek sa y. y.

+x-x

-y

+y

Page 13: Računarska grafika

Brze Brze linijelinijeSljedeći piksel je desno Sljedeći piksel je desno (E) (E)

ili desno goreili desno gore (NE) (NE)

Ako jeAko je d pod pozzitivitivnono linlinija siječe iznad srednje tačke i bliža je tački ija siječe iznad srednje tačke i bliža je tački TT. . Ako jeAko je d negativd negativnono, lin, linijaija siječe ispod srednje ačke i bliža je siječe ispod srednje ačke i bliža je tački tački S. S. Da bi se izabrla prava tačka treba samo znati Da bi se izabrla prava tačka treba samo znati predznakpredznak tačketačke d. d.

NE na (x+1, y+1)

E na (x+1,y)P na (x,y)

d u srednjoj tački (x+1, y+1/2)

Page 14: Računarska grafika

Brze linijeBrze linije – – vvariarijjablabla a odlukeodlukeddii = f(x = f(xii+1,y+1,yii+ 1/2 ) + 1/2 ) = a(x= a(xii+1) + b(y+1) + b(yii+ 1/2) + c + 1/2) + c

= ax= axi i + by+ byii+ c + a + b/2+ c + a + b/2= f(x= f(xii, y, yii) + a + b/2) + a + b/2

ddii j epoznata kao j epoznata kao varivarijjablabla odlukea odluke..

AlgoritAlgoritaam:m:Ako jeAko je d dii 0 0 izaberiizaberi NE = (x NE = (xii + 1, y + 1, yii + 1) + 1) kao sljedeću tačkukao sljedeću tačku

ddi+1i+1 = f(x= f(xi+1i+1 + 1, y + 1, yi+1i+1 + 1/2) = f(x + 1/2) = f(xi i +1+1,y+1+1,yii +1+1/2) +1+1/2)= a(x= a(xii +1+1) + b(y +1+1) + b(yii +1+1/2) + c +1+1/2) + c = f(x= f(xii + 1, y + 1, yii + 1/2) + c + a + b + 1/2) + c + a + b ((vidividi prvi red iznadprvi red iznad))= d= dii + a + b + a + b

A ako nije, izaberi A ako nije, izaberi E = (xE = (xii + 1, y + 1, yii) ) kao sljdeću tačkukao sljdeću tačku

ddi+1i+1 = f(x= f(xi+1i+1 + 1, y + 1, yi+1i+1 + 1/2) = f(x + 1/2) = f(xii +1+1,y +1+1,yii +1/2) +1/2)= a(x= a(xii +1+1) + b(y +1+1) + b(yii +1/2) + c = f(x +1/2) + c = f(xii + 1, y + 1, yii + 1/2) + a + 1/2) + a = d= dii + a + a

Page 15: Računarska grafika

BresenhamBresenhamov algoritam za ov algoritam za linijulinijuSamo vrijednost koja nije cjelobrojna jeSamo vrijednost koja nije cjelobrojna je b/2 b/2 u početnoj varijabli u početnoj varijabli

odlukeodluke. . Može se pomnožiti sa 2 da bi se izbjeglo dijeljenjeMože se pomnožiti sa 2 da bi se izbjeglo dijeljenje. .

Begin {Bresenham Begin {Bresenham za linije s nagibom odza linije s nagibom od 0 0 dodo 1} 1}a := ABS(xend - xstart);a := ABS(xend - xstart);b := ABS(yend - ystart);b := ABS(yend - ystart);d := 2*a + b;d := 2*a + b;If xstart > xend Then BeginIf xstart > xend Then Begin

x := xend;x := xend;y := yendy := yend

EndEndElse BeginElse Begin

x := xstart;x := xstart;y := ystarty := ystart

End;End;

For I := 0 to a Do Begin

Plot(x,y);

x := x + 1;

If d 0 Then

Begin

y := y + 1;

d := d + a + b

End

Else d := d + a

End {For Loop}

End; {Bresenham}

Page 16: Računarska grafika

OptimizaOptimizacijcijee

Brzina se može još više povećati otkrivanjem ciklusa kod varijable Brzina se može još više povećati otkrivanjem ciklusa kod varijable odlukeodluke. . Ti ciklusi odgovaraju ponavljajućem nizu izbora pikselaTi ciklusi odgovaraju ponavljajućem nizu izbora piksela..

Ponavljajući niz se snimi i ako se otkrije ciklus, ponavlja se bez Ponavljajući niz se snimi i ako se otkrije ciklus, ponavlja se bez ponovnog proračunaponovnog proračuna..

di= 2 -6 6 -2 10 2 -6 6 -2 10di= 2 -6 6 -2 10 2 -6 6 -2 10

11 12 13 14 15 16 17

9

10

11

12

13

14

15

16

6 7 8 9 10

Page 17: Računarska grafika

AlgoritAlgoritaamm za crtanje za crtanje krugakrugaPotrebno je samo izračunati vrijednosti na rubu kruga u prvom Potrebno je samo izračunati vrijednosti na rubu kruga u prvom

oktantu. Ostale vrijednosti se mogu dobiti simetrijom. oktantu. Ostale vrijednosti se mogu dobiti simetrijom.

Polazi se od kruga radijusa r s centrom u Polazi se od kruga radijusa r s centrom u (0,0).(0,0).

Procedure Circle_Points(x,y :Integer);Procedure Circle_Points(x,y :Integer);

BeginBegin

Plot(x,y);Plot(x,y);

Plot(y,x);Plot(y,x);

Plot(y,-x);Plot(y,-x);

Plot(x,-y);Plot(x,-y);

Plot(-x,-y);Plot(-x,-y);

Plot(-y,-x);Plot(-y,-x);

Plot(-y,x);Plot(-y,x);

Plot(-x,y)Plot(-x,y)

End;End;

(a,b)

(b,a)

(a,-b)

(b,-a)

(-a,-b)

(-a,b)

(-b,-a)

(-b,a)

Page 18: Računarska grafika

Brzi Brzi krugovikrugoviAko se uzme u obzir samo prvi oktant kruga radijusa Ako se uzme u obzir samo prvi oktant kruga radijusa r r sa centrom u sa centrom u

koordinatnom početkukoordinatnom početku. . Počinje se crtanjem tačke Počinje se crtanjem tačke (r,0) (r,0) a završava a završava kad budekad bude x < y. x < y.

Odluka u svakom koraku je da li odabrati piksel direktno iznad Odluka u svakom koraku je da li odabrati piksel direktno iznad posmatranog piksela ili piksel koji je iznad i ulijevo (8-smjerna posmatranog piksela ili piksel koji je iznad i ulijevo (8-smjerna simetrija)simetrija)..

Pretpostavke:Pretpostavke: P Pii = (x = (xii, y, yii) ) je piksel koji se posmatraje piksel koji se posmatra..TTii = (x = (xii, y, yii +1) +1) je piksel direktno iznad njegaje piksel direktno iznad njegaSSii = (x = (xii -1, y -1, yii +1) +1) je piksel iznad i ulijevo od njegaje piksel iznad i ulijevo od njega..

x=yx + y - r = 022 2

Page 19: Računarska grafika

Brzi krugoviBrzi krugovi – – varijable varijable odlukeodlukef(x,y) = xf(x,y) = x22 + y + y22 - r - r22 = 0 = 0

f(xf(xii - 1/2 + e, y - 1/2 + e, yii + 1) + 1)

= (x= (xii - 1/2 + e) - 1/2 + e)22 + (y + (yii + 1) + 1)22 - r - r22

= (x= (xii- 1/2)- 1/2)22 + (y + (yii+1)+1)22 - r - r22 + 2(x + 2(xii-1/2)e + e-1/2)e + e22

= f(x= f(xii - 1/2, y - 1/2, yii + 1) + 2(x + 1) + 2(xii - 1/2)e + e - 1/2)e + e22 = 0 = 0

Let dLet dii = f(x = f(xii - 1/2, y - 1/2, yii+1) = -2(x+1) = -2(xii - 1/2)e - e - 1/2)e - e22

Ako jeAko je e < 0 e < 0 onda je onda je ddii > 0 > 0 pa se bira tačkapa se bira tačka S = (x S = (xii - 1, y - 1, yii + 1). + 1).

ddi+1i+1 = f(x= f(xii - 1 - 1/2, y - 1 - 1/2, yii + 1 + 1) = ((x + 1 + 1) = ((x ii - 1/2) - 1) - 1/2) - 1)22 + ((y + ((yii + 1) + 1) + 1) + 1)22 - r - r22

= d= dii - 2(x - 2(xii -1) + 2(y -1) + 2(yii + 1) + 1 = d + 1) + 1 = d ii + 2(y + 2(yi+1i+1- x- xi+1i+1) + 1) + 1

Ako jeAko je e e 0 0 onda jeonda je d dii 0 0 pa se bira tačkapa se bira tačka T = (x T = (xii, y, yii + 1). + 1).

ddi+1i+1 = f(x= f(xii - 1/2, y - 1/2, yii + 1 + 1) = d + 1 + 1) = d ii + 2y + 2yi+1i+1 + 1 + 1

P = (x ,y )

T = (x ,y +1)

S = (x -1,y +1)i

ii

i i

i

e

(x -1/2, y + 1)ii

Page 20: Računarska grafika

Brzi krugoviBrzi krugovi – – varijable varijable odlukeodlukePočetna vrijednost za Početna vrijednost za ddii jeje

dd00 = f(r - 1/2, 0 + 1) = (r - 1/2)= f(r - 1/2, 0 + 1) = (r - 1/2)22 + 1 + 122 - r - r22

= 5/4 - r {1-r = 5/4 - r {1-r se može koristiti ako je se može koristiti ako je r r cijeli brojcijeli broj}}

Kad se izabere tačkaKad se izabere tačka S = (x S = (xii - 1, y - 1, yii + 1) + 1) onda jeonda je

ddi+1i+1 = d= dii + -2x + -2xi+1i+1 + 2y + 2yi+1i+1 + 1 + 1

Kad se izabere tačkaKad se izabere tačka T = ( x T = ( xii , y , yii + 1) + 1) onda jeonda je

ddi+1i+1 = d = dii + 2y + 2yi+1i+1 + 1 + 1

Page 21: Računarska grafika

AlgoritAlgoritaamm za brzi za brzi krugkrug

Begin {Circle}Begin {Circle}

x := r;x := r;

y := 0;y := 0;

d := 1 - r;d := 1 - r;

RepeatRepeat

Circle_Points(x,y); Circle_Points(x,y);

y := y + 1;y := y + 1;

If d < 0 Then If d < 0 Then

d := d + 2*y + 1d := d + 2*y + 1

Else BeginElse Begin

x := x - 1;x := x - 1;

d := d + 2*(y-x) + 1d := d + 2*(y-x) + 1

EndEnd

Until x < yUntil x < y

End; {Circle}End; {Circle}

Page 22: Računarska grafika

BrzeBrze ElipseElipseAlgoritam za krug se može generalizovati da bi radio sa elipsom ali se Algoritam za krug se može generalizovati da bi radio sa elipsom ali se

može koristiti sako 4-smjerna simetrijamože koristiti sako 4-smjerna simetrija. .

Moraju se izračunati sve tačke u jednom kvadrantuMoraju se izračunati sve tačke u jednom kvadrantu. . Kako jeKako je BresenhamBresenhamovov algorit algoritaam m ograničen samo na jedan oktant, proračun se ograničen samo na jedan oktant, proračun se mora vršiti u dva korakamora vršiti u dva koraka. . Promjena se dešava kad se postigne tačka na Promjena se dešava kad se postigne tačka na elipsi u kojoj tangenta na elipsu u njoj ima nagib odelipsi u kojoj tangenta na elipsu u njoj ima nagib od ±1. ±1. U prvom U prvom kvadrantu, to se dešava kad obje koordinate x i y imaju vrijednost kvadrantu, to se dešava kad obje koordinate x i y imaju vrijednost 0.707 0.707 svog maksimumasvog maksimuma..

(X,0)(-X,0)

(0,Y)

(0,-Y)

(X/¦2, Y/¦2)

(X/¦2, -Y/¦2)(-X/¦2, -Y/¦2)

(-X/¦2, Y/¦2)

Page 23: Računarska grafika

Rasterizacija trouglaRasterizacija trougla

Trougao se može definisati kao presjek tri Trougao se može definisati kao presjek tri pozitivne poluravnipozitivne poluravni::

A1x + B1y + C1 < 0

A2 x + B

2 y + C2 < 0

A 3x

+ B 3

y +

C 3 <

0

A1x + B1y + C1 > 0

A 3x

+ B 3

y +

C 3 >

0 A2 x + B

2 y + C2 > 0

Page 24: Računarska grafika

Rasterizacija trouglaRasterizacija trougla

Uključeni su samo oni pikseli kod kojih su Uključeni su samo oni pikseli kod kojih su sve jednačine stranica trougla sve jednačine stranica trougla > 0:> 0:

+++-

--

Page 25: Računarska grafika

Rasterizacija trouglaRasterizacija trougla

Za svaki piksel je potrebnoZa svaki piksel je potrebno Izračunati jednačine linija u centru pikselaIzračunati jednačine linija u centru piksela"odsjeći" dio "odsjeći" dio

površine površine oko trouglaoko trougla

Page 26: Računarska grafika

Rasterizacija trouglaRasterizacija trougla

Za svaki piksel je potrebnoZa svaki piksel je potrebno Izračunati jednačine linija u centru pikselaIzračunati jednačine linija u centru piksela"odsjeći" dio "odsjeći" dio

površine površine oko trouglaoko trougla

Problem?Ako je trougao mali,ima previše beskorisnogproračuna

Page 27: Računarska grafika

Rasterizacija trouglaRasterizacija trougla

UnapređenjeUnapređenje: : Računati samo piksele Računati samo piksele trougla koji su unutartrougla koji su unutar gabarita ekranagabarita ekrana

Kako se odredi Kako se odredi taj gabarittaj gabarit??Xmin, Xmax, Xmin, Xmax,

Ymin, Ymax Ymin, Ymax vrhova trouglavrhova trougla

Page 28: Računarska grafika

Moderne grafičke karticeModerne grafičke kartice

TrTrouglovi su obično jako maliouglovi su obično jako maliProblematično podešavanjeProblematično podešavanjeOdsijecanje Odsijecanje

je napornoje naporno

Page 29: Računarska grafika

ModernModernaa rasteriza rasterizacijacijaZa svaki trougaoZa svaki trougao

IzračunajProjekcijeIzračunajProjekcije

IzračunajIzračunaj gabaritgabarit, , odsijeciodsijeci gabaritgabarit do granica ekranado granica ekrana

Za sve piksele unutar gabaritaZa sve piksele unutar gabarita

Izračunaj jednačine linijaIzračunaj jednačine linija

Ako su sve jednačine linijaAko su sve jednačine linija>0 >0 //pi//piksksel [x,y] el [x,y] unutar trouglaunutar trougla

Framebuffer[x,y]=Framebuffer[x,y]=BojaTrouglaBojaTrougla

Page 30: Računarska grafika

ModernModernaa rasteriza rasterizacijacija

Za svaki trougaoZa svaki trougao

IzračunajProjekcijeIzračunajProjekcije

IzračunajIzračunaj gabaritgabarit, , odsijeci gabarit do odsijeci gabarit do granica ekranagranica ekrana

Za sve piksele unutar gabaritaZa sve piksele unutar gabarita

Izračunaj jednačine linijaIzračunaj jednačine linija

Ako su sve jednačine linijaAko su sve jednačine linija>0 >0 //pi//piksksel [x,y] el [x,y] je unutar trouglaje unutar trougla

Framebuffer[x,y]=Framebuffer[x,y]=BojaTrouglaBojaTrougla

Odsijecanje gabarita Odsijecanje gabarita je trivijalno, za razliku je trivijalno, za razliku od odsijecanja trouglaod odsijecanja trougla

Page 31: Računarska grafika

Može li bolje?Može li bolje?

Za svaki trougaoZa svaki trougao

IzračunajProjekcijeIzračunajProjekcije

IzračunajIzračunaj gabaritgabarit, , odsijeciodsijeci gabaritgabarit do granica ekranado granica ekrana

Za sve piksele unutar gabaritaZa sve piksele unutar gabarita

Izračunaj jednačine linijaIzračunaj jednačine linija

Ako su sve jednačine linijaAko su sve jednačine linija>0 >0 //pi//piksksel [x,y] el [x,y] unutar trouglaunutar trougla

Framebuffer[x,y]=Framebuffer[x,y]=BojaTrouglaBojaTrougla

Page 32: Računarska grafika

Može li bolje?Može li bolje?Za svaki trougaoZa svaki trougao

IzračunajProjekcijeIzračunajProjekcije

Izračunaj gabarit, odsijeci gabarit do granica ekranaIzračunaj gabarit, odsijeci gabarit do granica ekrana

Za sve piksele unutar gabaritaZa sve piksele unutar gabarita

Izračunaj jednačine linija ax+by+cIzračunaj jednačine linija ax+by+cAko su sve jednačine linijaAko su sve jednačine linija>0 >0 //pi//piksksel [x,y] el [x,y] je unutar trouglaje unutar trougla

Framebuffer[x,y]=Framebuffer[x,y]=BojaTrouglaBojaTrougla

Ne mora se svaki put Ne mora se svaki put ponovo izračunavati ponovo izračunavati jednačina linije ispočetkajednačina linije ispočetka

Page 33: Računarska grafika

Može li bolje?Može li bolje?Za svaki trougaoZa svaki trougao

IzračunajProjekcijeIzračunajProjekcijeIzračunaj gabarit, odsijeci gabarit do granica ekranaIzračunaj gabarit, odsijeci gabarit do granica ekrana

Podesi jednačinu linijePodesi jednačinu linije izračunajizračunaj a aiidx, bdx, biidy dy za 3 linijeza 3 linijeDaj početne vrijednosti jednačina linija, vrijednosti za Daj početne vrijednosti jednačina linija, vrijednosti za vrhove gabaritavrhove gabarita

LLii=a=aiix0+bx0+biiy+cy+cii

Za svaku liniju skeniranjaZa svaku liniju skeniranja y y unutar gabaritaunutar gabaritaZaZa 3 lin 3 linijeije, , ažurirajažuriraj Li LiZa sveZa sve x x unutar gabaritaunutar gabarita

InInkkrementrementirajiraj jednačine jednačine linlinijaija: Li+=adx: Li+=adxAko su sve Ako su sve Li>0 Li>0 //pi//piksksel [x,y] el [x,y] unutar trouglaunutar trougla

Framebuffer[x,y]=Framebuffer[x,y]=BojaTrouglaBojaTrougla

Ušteda: po jedno množenje za svaki pikselUšteda: po jedno množenje za svaki piksel

Page 34: Računarska grafika

Može li bolje?Može li bolje?

Izračunavaju se jednačine linija za veliki Izračunavaju se jednačine linija za veliki broj piksela koji se ne koristebroj piksela koji se ne koriste

Šta se može Šta se može uraditiuraditi??

Page 35: Računarska grafika

Može li bolje?Može li bolje?

HiHijjerarhierarhijska jska rasterizarasterizacijacijaObično u dva nivoaObično u dva nivoaTada je samo Tada je samo

pitanje pitanje određivanja određivanja prave prave granulacijegranulacije

Page 36: Računarska grafika

UU modern modernomom hard hardveruveru

Jednačine stranica trougla u Jednačine stranica trougla u homogenhomogenim im kkoordinatoordinatamaama [x, y, w] [x, y, w]

PodjelaPodjela da bi se dodala granulacija da bi se dodala granulacija srednjeg nivoasrednjeg nivoaRano se odbacuju Rano se odbacuju

beskorisna područjabeskorisna područjaKoherentan Koherentan

pristup memorijipristup memoriji

Page 37: Računarska grafika

KlasičnaKlasična rasteriza rasterizacijacija

Izračunavanje rubnih pikselaIzračunavanje rubnih piksela (rasteriza(rasterizacija linijecija linije))

Page 38: Računarska grafika

Scan-line Scan-line rrasterizaasterizacijacija

Izračunavanje rubnih pikselaIzračunavanje rubnih pikselaPopunjavanje praznih piksela između dva Popunjavanje praznih piksela između dva

krajnja pikselakrajnja piksela