Tartalom. Tartalom. Hajder Levente Szakasz raszterizálása. 2017/2018. II. félév. Poligon raszterizáció.

Hasonló dokumentumok
Klár Gergely

Hajder Levente 2018/2019. II. félév

Hajder Levente 2014/2015. tavaszi félév

Cohen-Sutherland vágóalgoritmus

2D képszintézis. Szirmay-Kalos László

Számítógépes Grafika mintafeladatok

Klár Gergely 2010/2011. tavaszi félév

Nagy András. Feladatok a koordináta-geometria, egyenesek témaköréhez 11. osztály 2010.

x = cos αx sin αy y = sin αx + cos αy 2. Mi a X/Y/Z tengely körüli forgatás transzformációs mátrixa 3D-ben?

Hajder Levente 2017/2018. II. félév

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon) b) Minden belső pont kirajzolásával (kitöltött)

I. Vektorok. Adott A (2; 5) és B ( - 3; 4) pontok. (ld. ábra) A két pont által meghatározott vektor:

10. Koordinátageometria

= Y y 0. = Z z 0. u 1. = Z z 1 z 2 z 1. = Y y 1 y 2 y 1

Algoritmusok raszteres grafikához

Tartalom. Tartalom. Hajder Levente 2018/2019. I. félév

Tartalom. Hajder Levente 2016/2017. I. félév

Láthatósági kérdések

Skaláris szorzat: a b cos, ahol α a két vektor által bezárt szög.

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon)

Területi primitívek: Zárt görbék által határolt területek (pl. kör, ellipszis, poligon)

Hajder Levente 2016/2017.

Koordináta-geometria feladatgyűjtemény

2014/2015. tavaszi félév

Hajder Levente 2017/2018. II. félév

Tartalom. Tartalom. Raycasting. Hajder Levente 2017/2018. II. félév. Raycasting. Raycasting. Sugár és háromszög metszéspontja

Látható felszín algoritmusok

Vektorok és koordinátageometria

Információ megjelenítés Számítógépes ábrázolás. Dr. Iványi Péter

Koordinátageometriai gyakorló feladatok I ( vektorok )

GEOMETRIA 1, alapszint

Koordináta-geometria II.

Az egyenes és a sík analitikus geometriája

Koordináta-geometria feladatgyűjtemény (A feladatok megoldásai a dokumentum végén találhatók)

Geometriai modellezés. Szécsi László

Klár Gergely 2010/2011. tavaszi félév

Grafikus csővezeték és az OpenGL függvénykönyvtár

Összeállította: dr. Leitold Adrien egyetemi docens

Függvények Megoldások

Számítógépes Grafika mintafeladatok

Helyvektorok, műveletek, vektorok a koordináta-rendszerben

A kör. A kör egyenlete

9. Írjuk fel annak a síknak az egyenletét, amely átmegy az M 0(1, 2, 3) ponton és. egyenessel;

9. előadás. Térbeli koordinátageometria

SZÁMÍTÓGÉPI GRAFIKA VÁGÁS

Vektorgeometria (2) First Prev Next Last Go Back Full Screen Close Quit

, D(-1; 1). A B csúcs koordinátáit az y = + -. A trapéz BD

VEKTOROK. 1. B Legyen a( 3; 2; 4), b( 2; 1; 2), c(3; 4; 5), d(8; 5; 7). (a) 2a 4c + 6d [(30; 10; 30)]

Geometria 1 normál szint

Analitikus térgeometria

Modellezési transzformáció: [r lokális,1] T M = [r világ,1] Nézeti transzformáció: [r világ,1] T v = [r képernyo,1]

3D koordináta-rendszerek

SZE, Doktori Iskola. Számítógépes grafikai algoritmusok. Összeállította: Dr. Gáspár Csaba. Felületmegjelenítés

Algoritmusok raszteres grafikához

Algoritmusok raszteres grafikához

Koordináta-geometria feladatok (emelt szint)

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉP SZINT. Koordináta-geometria

egyenletrendszert. Az egyenlő együtthatók módszerét alkalmazhatjuk. sin 2 x = 1 és cosy = 0.

Hajder Levente 2018/2019. II. félév

Egyenes és sík. Wettl Ferenc szeptember 29. Wettl Ferenc () Egyenes és sík szeptember / 15

Vektorgeometria (1) First Prev Next Last Go Back Full Screen Close Quit

Lineáris algebra mérnököknek

Exponenciális és logaritmusos kifejezések, egyenletek

Összeállította: dr. Leitold Adrien egyetemi docens

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Függvények

1. Határozzuk meg, hogy mikor egyenlő egymással a következő két mátrix: ; B = 8 7 2, 5 1. Számítsuk ki az A + B, A B, 3A, B mátrixokat!

Tartalom. Nevezetes affin transzformációk. Valasek Gábor 2016/2017. tavaszi félév

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉP SZINT Koordináta-geometria

Direct3D pipeline. Grafikus játékok fejlesztése Szécsi László t03-pipeline

Vektorok összeadása, kivonása, szorzás számmal, koordináták

KOVÁCS BÉLA, MATEMATIKA I.

Grafikonok automatikus elemzése

Geometria 1 normál szint

Síkbeli egyenesek. 2. Egy egyenes az x = 1 4t, y = 2 + t parméteres egyenletekkel adott. Határozzuk meg

5. előadás. Skaláris szorzás

Geometria brute force tárolása

Máté: Számítógépes grafika alapjai

Transzformációk, amelyek n-dimenziós objektumokat kisebb dimenziós terekbe visznek át. Pl. 3D 2D

ANALÍZIS II. Példatár

Analitikus térgeometria

2. ELŐADÁS. Transzformációk Egyszerű alakzatok

Bevezetés a CGI-be. 1. Történelem

Síkbeli egyenesek Egy egyenes az x = 1 4t, y = 2 + t parméteres egyenletekkel adott. Határozzuk meg

A számítógépes grafika alapjai kurzus, vizsgatételek és tankönyvi referenciák 2014

KOORDINÁTA-GEOMETRIA

Számítási feladatok a Számítógépi geometria órához

Matematika 11 Koordináta geometria. matematika és fizika szakos középiskolai tanár. > o < szeptember 27.

16. tétel Egybevágósági transzformációk. Konvex sokszögek tulajdonságai, szimmetrikus sokszögek

TÉRINFORMATIKAI ALGORITMUSOK

Transzformációk. Grafikus játékok fejlesztése Szécsi László t05-transform

Feladatok a koordináta-geometria, egyenesek témaköréhez 11. osztály, középszint

TÉRINFORMATIKAI ALGORITMUSOK

Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma) Megoldások

5 1 6 (2x3 + 4) 7. 4 ( ctg(4x + 2)) + c = 3 4 ctg(4x + 2) + c ] 12 (2x6 + 9) 20 ln(5x4 + 17) + c ch(8x) 20 ln 5x c = 11

Matematika (mesterképzés)

MATEMATIKA ÉRETTSÉGI TÍPUSFELADATOK MEGOLDÁSAI KÖZÉPSZINT Koordináta-geometria

Bevezetés a programozásba. 12. Előadás: 8 királynő

1. Szabadvektorok és analitikus geometria

Valasek Gábor Informatikai Kar. 2016/2017. tavaszi félév

Az egyenlőtlenség mindkét oldalát szorozzuk meg 4 16-al:

Átírás:

Tartalom Hajder Levente hajder@inf.elte.hu Eötvös Loránd Tudományegyetem Informatikai Kar 2017/2018. II. félév 1 Emlékeztető 2 Vágás 3 Raszterizálás Inkrementális képszintézis Tartalom 1 Emlékeztető Inkrementális elv A transzformációk szemszögéből végignéztük a grafikus szerelőszalagot Lényegében egy pont útját követtük végig, a transzformációkon át a képernyőig Most az inkrementális képszintézis szerelőszalagját vizsgáljuk tovább 2 Vágás 3 Raszterizálás

Vágás Vágás az ablakra A vágás során a nézeti csonkagúlán kívül geometriai elemeket szűrjük ki A nézeti csonkagúla határozza meg a színterünknek azt a részét, amely majd leképeződik a képernyőre (ld. múlt óra) Miért érdemes egyáltalán vágni? Degenerált esetek kiszűrése (ld. pl. múlt óra középpontos vetítés) Ne számoljunk feleslegesen (amit úgyse látunk, ne számoljuk sokat) Pont vágás: (x, y) R 2. Akkor tartjuk meg a pontot, ha (x, y) [x min, x max ] [y min, y max ]. Megoldás: a határoló egyenesekkel vágás (ha tengelypárhuzamosak: csak összehasonlítás) Szakasz vágás: a szakasznak csak azokat a pontjai akarjuk megtartani, amik benne vannak [x min, x max ] [y min, y max ]-ban. Megoldás: az ablak négy élével, mint négy félsíkkal vágjuk a szakaszt. Poligon vágás: a poligonból egy új poligont akarunk csinálni, ami nem lóg ki az ablakból. Megoldás: A poligon minden oldalát (mint szakaszt) vágjuk. Tartalom Pontok vágása 1 Emlékeztető 2 Vágás 3 Raszterizálás Itt most pontokat vágunk egyenesre, síkra Azaz, azt akarjuk meghatározni, hogy a bemeneti pont az egyenes vagy sík normálisával megegyező irányban fekszik-e az egyenes/sík pontjaihoz képest ( előtte van-e). Ami mögötte van, nem kell nekünk ha rajta fekszik, azt is tartsuk még meg Síkra 3D-ben vágunk a nézeti csonkgúla 6 sík előtti rész (6 féltér metszete) Egyenesre 2D-ben a képernyőn a monitorra kerülő rész 4 egyenes előtti rész (4 félsík metszete)

Az egyenes normálvektoros egyenlete a síkban Pont vágása pont-normálvektoros egyenesre Az egyenes megadható egy P(p x, p y ) pontjával és egy, az egyenes irányára merőleges n = [n x, n y ] T 0 normálvektorral: Az egyenes pontjai azon Q(x, y) pontok, amelyek kielégítik a egyenletet. X P, n = 0 (x p x )n x + (x p x )n x = 0 Az X P, n < 0 és X P, n > 0 az egyenesünk által meghatározott két félsík egyenlete. Feladat: adott p pont és egy e egyenes (p 0 pontjával és n normálvektorával, n = 1) a síkban. Vágjuk a pontot az e egyenesre! Megtartjuk, ha: p p 0, n 0 Ilyenkor a skaláris szorzat eredménye az egyenes egy pontjából az adott pontba mutató vektor előjeles vetülete a normálisra n = 1 előjeles távolság az egyenestől Pont-egyenes távolsága Pont-egyenes távolsága

Pont vágása vonalkoordinátás egyenesre A sík normálvektoros egyenlete Használjuk ki, hogy a vágásnál már homogén koordinátákban dolgozik a rendszer! Feladat: adott ˆp pont homogén koordinátás alakja és egy e egyenes e vonalkoordinátáival, úgy, hogy e 2 1 + e2 2 + e2 3 = 1 Megtartjuk, ha: e ˆp 0 A sík megadható egy P(p x, p y, p z ) pontjával és a síkra merőleges n = [n x, n y, n z ] T normálvektorával: X P, n = 0 Félterek: X P, n < 0, X P, n > 0 Pont vágása síkra Tartalom 1 Emlékeztető Pont-normálisal adott sík esetén megtartjuk a pontot, ha: p p 0, n 0 Sík-koordinátás (s) megadás esetén (ha s 2 1 + s2 2 + s2 3 = 1) megtartjuk a pontot, ha: s ˆp 0 2 Vágás 3 Raszterizálás

Szakasz vágása félsíkra Szakasz vágása félsíkra A szakasz p és q végpontjait vágjuk az e egyenes és normálisa által meghatározott félsíkra! Az előbb látott módon végezhetjük a vágást! Az eredmény viszont most bonyolultabb egy kicsit Szakasz vágása félsíkra Szakasz vágása félsíkra

Szakasz vágása félsíkra - új kezdőpont! Szakasz vágása félsíkra Szakasz vágása félsíkra Tartalom 1 Emlékeztető 2 Vágás 3 Raszterizálás

Szakasz vágása félsíkra Szakasz vágása - nehézségek Csak azt a speciális esetet nézzük, amikor a vágó egyenes párhuzamos valamelyik tengellyel. (x 1, y 1 ) (x 2, y 2 ) szakasz egyenlete: Vágó egyenes: pl. x = x min x(t) = x 1 + t(x 2 x 1 ) y(t) = y 1 + t(y 2 y 1 ) Megoldás: x min = x 1 + t(x 2 x 1 ) t = x min x 1 x 2 x 1 Metszéspont: x = x min, y = y 1 + x min x 1 x 2 x 1 (y 2 y 1 ) Eredmény kezelése: t 0 vagy t 1 nincs is igazi vágás Kivételek: tengelyekkel párhuzamos szakaszok vágása Képernyőre vágásnál is rengeteg eset: négy félsík, két végpont, mindkettő eshet bárhova Feladat: Kell-e vágni? Melyik félsík(ok)ra kell vágni? Triviálisan bent/kint van-e a szakasz? Megoldás: Cohen-Sutherland vágás Cohen-Sutherland vágás Cohen-Sutherland vágás A képernyő széleit reprezentáló egyenesekkel osszuk kilenc részre a síkot! Mindegyik síkrészhez rendeljünk egy 4 bitből álló bit-kódot: TBRL Számítsuk ki ezt a kódot a szakasz végpontjaira! T = 1, ha a pont az képernyő fölött van, különben 0 B = 1, ha a pont az képernyő alatt van, különben 0 R = 1, ha a pont az képernyőtől jobbra van, különben 0 L = 1, ha a pont az képernyőtől balra van, különben 0 code = Top, Bottom, Right, Left

Cohen-Sutherland vágás Cohen-Sutherland vágás code = (y > y max, y < y min, x > x max, x < x min ) Vizsgáljuk a két végpont bit-kódjait, code a -t és code b -t! Ha code a OR code b == 0: a szakasz egésze (mindkét végpontja) az ablakban van megtartjuk. Ha code a AND code b!= 0: a szakasz az ablak valamelyik oldalán (fölül, alul, jobbra, balra), kívül van eldobjuk. Különben vágni kell: az 1-es bitek adják meg, hogy melyik félsíkra, utána újra számoljuk a bit-kódokat, és az új szakasszal újrakezdjük az algoritmust. code a OR code b == 0: Cohen-Sutherland vágás Cohen-Sutherland vágás code a AND code b!= 0: Különben:

Tartalom 1 Emlékeztető 2 Vágás 3 Raszterizálás Feladat Adott egy vágandó és egy vágó poligon. Keressük azt a poligont, amit a vágandóból kapunk, ha csak a vágó poligonba tartozó részeit vesszük. Röviden: keressük a kettő közös részét. Sutherland-Hodgman poligonvágás Legyen p tömb a bemeneti-, q a kimeneti-poligon csúcsainak tömbje! Legyen n a csúcsok száma, és p[0] = p[n]! Vágás egyenesre: Ha p[i] bent van az alablakban, és p[i + 1] is: adjuk hozzá p[i]-t a q-hoz. Ha p[i] bent van az alablakban, de p[i + 1] nincs: adjuk hozzá p[i]-t a q-hoz, számítsuk ki p[i], p[i + 1] szakasz metszéspontját a vágó egyenessel, majd ezt is adjuk hozzá q-hoz. Ha p[i] nincs bent az alablakban, de p[i + 1] benne van: számítsuk ki p[i], p[i + 1] szakasz metszéspontját a vágó egyenessel, és ezt adjuk hozzá q-hoz. Ha p[i] nincs bent az alablakban, és p[i + 1] sincs: SKIP Sutherland-Hodgman poligonvágás - Pszeudó-kód PolygonClip(in p[n], out q[m], in line) { m = 0; for( i=0; i < n; i++) { if (IsInside(p[i])) { q[m++] = p[i]; if (!IsInside(p[i+1])) q[m++] = Intersect(p[i], p[i+1], line); } else { if (IsInside(p[i+1])) q[m++] = Intersect(p[i], p[i+1], line); } } }

Sutherland-Hodgeman: konkáv poligonok Sutherland-Hodgeman: konkáv poligonok Konkáv poligonokra átfedő éleket hoz létre. Konkáv poligonokra átfedő éleket hoz létre. Sutherland-Hodgeman: konkáv poligonok Sutherland-Hodgeman: konkáv poligonok Konkáv poligonokra átfedő éleket hoz létre. Konkáv poligonokra átfedő éleket hoz létre.

Sutherland-Hodgeman: konkáv poligonok Sutherland-Hodgeman: konkáv poligonok Konkáv poligonokra átfedő éleket hoz létre. Konkáv poligonokra átfedő éleket hoz létre. Sutherland-Hodgeman: konkáv poligonok Sutherland-Hodgeman: konkáv poligonok Konkáv poligonokra átfedő éleket hoz létre. Konkáv poligonokra átfedő éleket hoz létre.

Sutherland-Hodgeman: poligonra vágása poligonnak Mikor vágjunk? A vágópoligon minden élére vágunk, az előző vágás eredmény éllistáját felhasználva kiindulásként Projektív transzformáció előtt a vágósíkok világtérbeli megadásával (mik az egyenletei?) NPKR-ben (projektív trafó után, homogén osztás előtt) a homogén koordináták ellenére ez a legegyszerűbb! Transzformált 3D térben (homogén osztás után) vetítési síkon átmenő objektumok... Tartalom Szakasz rajzolás 1 Emlékeztető 2 Vágás 3 Raszterizálás Egyik leggyakrabb primitív Fontos, hogy szépen tudjuk rajzolni Mégjobb, ha gyorsan is Jason Thielke, jasonthielke.com

Hogyan rajzolunk szakaszt? Adott a két végpont. Hogyan rajzolunk szakaszt? Adott a két végpont. Hogyan tudjuk összekötni őket? Hogyan rajzolunk szakaszt? Adott a két végpont. Hogyan tudjuk összekötni őket? Csak miniatűr téglalapjaink vannak (amiket pixelnek nevezünk). Hogyan rajzolunk szakaszt? Adott a két végpont. Hogyan tudjuk összekötni őket? Csak miniatűr téglalapjaink vannak (amiket pixelnek nevezünk).

Hogyan rajzolunk szakaszt? Adott a két végpont. Hogyan tudjuk összekötni őket? Csak miniatűr téglalapjaink vannak (amiket pixelnek nevezünk). Szakasz megadása (sokadszor) Végpontok: (x 1, y 1 ), (x 2, y 2 ) Tfh. nem függőleges: x 1 x 2. Szakasz egyenlete: y = mx + b, x [x 1, x 2 ] m = y 2 y 1 x 2 x 1 b = y 1 mx 1 Naív algoritmus Naív algoritmus def l i n e 1 ( x1, y1, x2, y2, draw ) : m = f l o a t ( y2 y1 ) / ( x2 x1 ) x = x1 y = f l o a t ( y1 ) while x<=x2 : draw. p o i n t ( ( x, y ) ) x += 1 y += m m = float(y2-y1)/(x2-x1) nem pontos

Naív algoritmus Naív algoritmus m = float(y2-y1)/(x2-x1) nem pontos y += m a hiba gyűlik y-ban m = float(y2-y1)/(x2-x1) nem pontos y += m a hiba gyűlik y-ban Naív algoritmus Naív algoritmus m = float(y2-y1)/(x2-x1) nem pontos y += m a hiba gyűlik y-ban draw.point((x,y)) int-eket vár, lassú a konverzió m = float(y2-y1)/(x2-x1) nem pontos y += m a hiba gyűlik y-ban draw.point((x,y)) int-eket vár, lassú a konverzió csak m < 1-re működik helyesen

Javítsuk az algoritmust 1. Javítsuk az algoritmust 1. def l i n e 2 ( x1, y1, x2, y2, draw ) : m = f l o a t ( y2 y1 ) / ( x2 x1 ) x = x1 y = y1 e = 0.0 while x<=x2 : draw. p o i n t ( ( x, y ) ) x += 1 e += m i f e >= 0. 5 : y += 1 e = 1.0 Jó: Mindig eltalálja a végpontokat Jó: Egyenletesebben lép az y irányban. Rossz: Még mindig használunk float-okat Naív: Javítás: Javítsuk az algoritmust 2. Javítsuk az algoritmust 3. def l i n e 3 ( x1, y1, x2, y2, draw ) : x = x1 y = y1 e = 0.5 while x<=x2 : draw. p o i n t ( ( x, y ) ) x += 1 e += i f f l o a t ( y2 y1 ) / ( x2 x1 ) e >= 0. 0 : y += 1 e = 1.0 def l i n e 4 ( x1, y1, x2, y2, draw ) : x = x1 y = y1 e = 0.5 ( x2 x1 ) while x<=x2 : draw. p o i n t ( ( x, y ) ) x += 1 e += y2 y1 i f e >= 0. 0 : y += 1 e = ( x2 x1 )

Javítsuk az algoritmust 4. Javítsuk az algoritmust 4. def l i n e 5 ( x1, y1, x2, y2, draw ) : x = x1 y = y1 e = (x2 x1 ) while x<=x2 : draw. p o i n t ( ( x, y ) ) x += 1 e += 2 ( y2 y1 ) i f e >= 0: y += 1 e = 2 ( x2 x1 ) Ez a Bresenham algoritmus (egyik speciális esete) Külön gyűjtjük a hibát e-ben Nem használunk float-okat Tetszőleges meredekségű szakaszokra általánosítható. Bresenham algoritmus Bresenham algoritmus Nyolcadokra kéne felbontani a síkot, mindegyik külön eset. (Előzők végig: jobbra-le) El kell döntenünk, hogy x 2 x 1 vagy y 2 y 1 a nagyobb (merre meredekebb a szakasz). Ha y 2 y 1 a nagyobb, cseréljük fel x i y i, és rajzolásnál is fordítva használjuk! Ha x 1 > x 2, akkor csere: x 1 x 2, y 1 y 2. Az e hibatagot y 2 y 1 -nal növeljük minden lépésben y-nal y 2 y 1 előjele szerint haladunk.

Teljes Bresenham algoritmust 1. def Bresenham ( x1, y1, x2, y2, draw ) : steep = abs ( y2 y1)>abs ( x2 x1 ) i f steep : x1, y1 = y1, x1 x2, y2 = y2, x2 i f x1>x2 : x1, x2 = x2, x1 y1, y2 = y2, y1 Dy = abs ( y2 y1 ) i f y1<y2 : Sy = 1 else : Sy = 1 Teljes Bresenham algoritmust 2. x = x1 y = y1 e = (x2 x1 ) while x<=x2 : i f steep : draw. p o i n t ( ( y, x ) ) else : draw. p o i n t ( ( x, y ) ) x += 1 e += 2 Dy i f e >= 0: y += Sy e = 2 ( x2 x1 ) Tartalom Háromszög raszterizáció 1 Emlékeztető 2 Vágás 3 Raszterizálás A háromszög oldalait tudjuk vágni - most töltsük ki a belsejét! Ha egy meghatározott bejárási irányban adtuk meg az összes háromszög csúcsát, tudunk félsíkokat adni (tudjuk irányítani az éleket) u.i. ha (t x, t y ) az irányvektora az oldalnak, akkor ( t y, t x ) egy normális lesz Minden pixelre menjünk végig a képernyőn és nézzük meg, hogy a háromszög oldalai által meghatározott síkok jó oldalán van-e!

Háromszög raszterizáció Háromszög raszterizáció - okosabban Háromszög raszterizáció Háromszög raszterizáció Lehetne még okosabban is csinálni, de: gyakorlatban ez a brute-force megközelítés nagyon jól alkalmazható! Nem egy rögzített értékkel akarunk kitölteni, a hanem a csúcsokban adott értékeket akarjuk interpolálni. Felhasználásai: szín (Gouraud-árnyalás), textúra koordinták, normálvektorok Legyen a felület egy pontja p = αp 1 + βp 2 + γp 3, az α, β, γ baricentrikus koordinátákkal adott. Ekkor bármilyen más értéket is végig tudunk interpolálni ugyan így: c = αc 1 + βc 2 + γc 3 Ez az úgy nevezett Gouraud interpoláció (nem véletlenül)

Háromszög kitöltés 1. Háromszög kitöltés 2. f o r a l l x : f o r a l l y : α, β, γ = b a r y c e n t r i c ( x, y ) i f α [0, 1] and β [0, 1] and γ [0, 1] : c = αc 1 + β c 2 + γ c 3 draw. p o i n t ( ( x, y ), c ) Gyorsítás: felesleges minden x, y-t vizsgálni, elég a háromszöget tartalmazó téglalapon végig menni. Inkrementálissá tétel: Most még lassú, nem használjuk, ki hogy sorban megyünk x-en, y-on. Milyenek is ezek az f -ek? Mind f (x, y) = Ax + By + C alakú. Ekkor f (x + 1, y) = f (x, y) + A, ill. f (x, y + 1) = f (x, y) + B Megvalósítás: házi feladat Tartalom Flood-fill elárasztásos kitöltés 1 Emlékeztető 2 Vágás 3 Raszterizálás Tetszőleges, már raszterizált poligon kitöltésére alkalmas. Bemenet: raszter kép + annak egy pontja Brute-force: a megadott pontból kiindulva rekurzívan haladunk: Az aktuális pont színe megegyezik a kiindulási pont színével? Nem: megállunk; Igen: átszínezzük, és minden szomszédra újrakezdjük az algoritmust.

Flood-fill szomszédságok Négy szomszéd: fent, lent, jobbra, balra Nyolc szomszéd: az előző négy + a sarkak Rekurzió nagyon durva: gyakorlatban ennél okosabb algoritmusok is vannak: aktív éllista stb. (Haladó Grafika)