Upload
hillary-goff
View
48
Download
9
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
RačunarskaRačunarskagrafikagrafika
predavanjapredavanjav.as.mr. Samir Lemešv.as.mr. Samir Lemeš[email protected]@mf.unze.ba
28. 28. RasterizacijaRasterizacija
Rasterizacija linijaRasterizacija linijaDDA algoritamDDA algoritamBresenhamBresenhamov algoritamov algoritamRasterizacija krugaRasterizacija krugaRasterizacija elipseRasterizacija elipseRasterizacija trouglaRasterizacija trouglaScan-line Scan-line rrasterizaasterizacijacija
RasterizacijaRasterizacija
Pretvaranje iz kontinuiranog u diskretnoPretvaranje iz kontinuiranog u diskretno
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)
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
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.
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).).
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..
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..
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
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..
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
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)
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
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}
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
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)
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
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
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
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}
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)
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
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:
+++-
--
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
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
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
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
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
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
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
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
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
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??
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
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
KlasičnaKlasična rasteriza rasterizacijacija
Izračunavanje rubnih pikselaIzračunavanje rubnih piksela (rasteriza(rasterizacija linijecija linije))
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