Počítačová grafika Vyplňování souvislé oblasti Jana Dannhoferová (jana.dannhoferova@mendelu.cz) Ústav informatiky, PEF MZLU. Které z následujících tvrzení není pravdivé: a) Princip interpolace je určení souřadnic pixelů a jejich barevné hloubky, které reprezentují tvar základních grafických prvků b) Princip interpolace využívá souřadnic pixelů a barvy pixelů k vyjádření rastrových dat vektorovým způsobem c) Princip interpolace je stanovení polohy a hodnoty pixelů, které nejlépe nahradí zadanou křivku d) Princip interpolace využívá souřadnic pixelů a barevné hloubky k vyjádření vektorových dat rastrovým způsobem. Jedním z algoritmů, který se používá při vykreslování úsečky na monitoru je: a) Digitální diferenciální analyzátor (algoritmus DDA) b) Algoritmus nejkratších polocest c) Šifrovací algoritmus RSA d) Algoritmus slepé koleje. Pro kresbu celé kružnice stačí vypočítat souřadnice bodů: a) Jednoho kvadrantu b) Dvou kvadrantů c) Jednoho oktantu d) Dvou oktantů. Pro počítačovou grafiku má největší význam křivka zadaná: a) Implicitně b) Parametricky c) Explicitně d) Ve tvaru spojité funkce. Stav, kdy vzdálenost uzlů nemusí být např. u křivek NURBS konstantní, vyjadřujeme slovem: a) nespojitý b) nehomogenní c) neuniformní d) neracionální Oblast Metody podle reprezentace hranice obecný prvek pro kreslení plošných obrazců (vždy uzavřená) definice oblasti souvisí s popisem její hranice: geometricky určená hranice je zadána pomocí posloupnosti bodů definujících mnohoúhelník nebo pomocí jedné či více navazujících křivek (příp. jako průnik poloprostorů) základní metodou je řádkové hranice nakreslená v rastru (v obrazové paměti) tvar hranice může být libovolný nutno znát buď barvu hranice nebo barvu vnitřní oblasti (příp. barvu vně oblasti) základní metodou je semínkové a) řádkové b) semínkové Úloha oblasti A) Vyplňování geometricky určené hranice je rozdělena na dvě části: ) nalezení vnitřních bodů algoritmicky složitější ) obarvení vnitřních bodů použito může být: prázdná oblast (empty, void, hollow) jedna barva (solid fill) šrafování (hatch fill) opakovaně nanášený vzorek (pattern tilling) interpolace barvy geometricky zadaná hranice se může protínat (které body budou vnitřní?) a) paritní b) vnitřní c) obtočení bodu hranicí d) více hranic
Paritní polygonální oblasti je přirozené, nejjednodušší a nejběžnější odpovídá intuitivnímu pohledu na hranici jako entitu oddělující vyplněný a nevyplněný prostor pro vnitřní bod platí, že libovolná polopřímka z něj vedená protne lichý počet hran oblasti (lichá x sudá parita) základní metody: paritní řádkové rozklad na trojúhelníky Paritní řádkové nebo tzv. rozkladovými řádky každým řádkem rastru je vedena pomyslná vodorovná čára a jsou hledány její průsečíky s hranicemi oblasti nalezené průsečíky na jedné čáře se seřadí dle souřadnic x dvojice těchto průsečíků definují úsečky ležící uvnitř oblasti 7 8 Metoda řádkového Metoda řádkového Pro každý řádek y:. vytvoř seznam průsečíků x i řádku y se všemi hraničními úsečkami u i. uspořádej seznam průsečíků podle souřadnic x i. vykresli vodorovné úseky mezi lichými a sudými průsečíky v seznamu. zruš seznam průsečíků y B C D A G 8 x E F BC CD, EF FG BC CD, EF FG BC CD, (DE), EF FG AB? BC FG AB FG AB (GA) - FG 9 nutnost předzpracování jednotlivých hraničních úseček vynechání vodorovných hraničních úseček systematické zkrácení všech hran (vede ke snížení počtu průsečíků, funkčnost zůstane zachována) y B C D A G 8 x E F y B B A C D E 8 x 0 F G Paritní řádkové Inverzní celkový postup: ) Pro všechny hraniční úsečky ověř: a) je-li vodorovná, vynech ji (případně vykresli) b) uprav orientaci shora dolů a zkrať ji o ve směru y c) aktualizuj mezní souřadnice celé hranice y max a y min ) Pro y od y min do y max proveď: a) nalezni průsečíky hran s řádkem y b) uspořádej všechny průsečíky podle souřadnice x c) vykresli úseky mezi lichými a sudými průsečíky ) Vykresli hranici oblasti (je-li třeba) nevyžaduje řazení průsečíků šablona univerzální pomocná paměť (stencil buffer) vhodná pro ukládání dočasných hodnot pro různé algoritmy stala se běžnou součástí grafických akcelerátorů (rozměry mívá totožné s velikostí obrazovky) část paměti, ve které je prováděno oblasti (inverováním/negací hodnot v šabloně) pixel obrazové paměti = bit v šabloně (vyplněno/nevyplněno)
Inverzní Inverzní každá hraniční úsečka je zpracována samostatně (pro každou souřadnici y hraniční úsečky je vykreslena vodorovná čára vedoucí od bodu na úsečce s odpovídající souřadnicí x k bodu s maximální souřadnicí x celé hranice, příp. celé obrazovky) po zpracování první úsečky je takto vyplněn lichoběžník (zleva omezený touto úsečkou a zprava svislou čárou o souřadnici x = x max ) další hraniční úsečky způsobí smazání části tohoto lichoběžníku, případně jeho doplnění o nové vyplněné oblasti ) Vyčisti šablonu ) Pro každou nevodorovnou hranu: a) zkrať hranu o jeden pixel zdola a rasterizuj hranu b) nalezni řádkovým rozkladem její pixely [x,y] c) invertuj pixely ve vodorovném úseku [x,y] [x max,y] Plotové Plotové časově úspornější plot myšlená svislá čára, která může protínat i vnitřek oblasti výsledkem je obecně nižší počet pixelů, které je třeba invertovat Pro všechny hrany dělej: Pro každou horizontální řádku, která protíná hranu v bodě [x,y ]: jestliže průsečík je vlevo od plotu, pak komplementuj vš. pixely, jejichž střed leží vpravo od [x,y ] a vlevo od plotu jinak komplementuj všechny pixely, jejichž středy leží vpravo od plotu a vlevo od [x,y ] 7 Šrafování rozšířeno především v technických aplikacích v praxi se uplatňuje šrafování pod určitým úhlem (např. ) (vodorovné šrafování + transformace otáčení) otočení všech hraničních úseček oblasti o úhel - aplikování algoritmu vodorovného šrafování vykreslení každého k-tého řádku před vykreslením vypočítané vodorovné úseky otočíme zpátky o úhel a teprve pak zobrazíme Šrafování pomocí přerušovaných čar při šrafování přerušovanými čárami může dojít k nežádoucímu optickému jevu 8 kreslení zahájené od levého okraje vodorovného úseku vytváří při pohledu z dálky siluetu (kopíruje levou hranici oblasti) odstranění: úprava algoritmu (šrafování nezávislé na tvaru a umístění oblasti) 9
Vyplňování vzorem Pinedův algoritmus opakované šrafování téže oblasti pod různými úhly vzor je umístěn nezávisle na poloze hranice oblast je považována za výřez, kterým uživatel nahlíží na nekonečný vzor v pozadí příklad vyplnění trojúhelníku definovaného pomocí orientovaných přímek (průnik polorovin) hranová funkce: E(x,y) = (x X).dY (y Y).dX E(x,y)>0, pak (x,y) je vpravo E(x,y)=0, pak (x,y) leží na hraně E(x,y)<0, pak (x,y) je vlevo někdy je žádoucí, aby se vzor pohyboval spolu s oblastí 0 Pinedův algoritmus příklady strategií procházení rovinnou oblastí min/max obrat na hranici plot/paralelní vyhodnocení B) Vyplňování hranice nakreslené v rastru hranice není geometricky jasně určena (všechny informace se získávají čtením z obrazové/rastrové paměti) metody jsou obecně nazývány semínkové (seed fill) semínko vybraný vnitřní bod oblasti od semínka se rozšiřuje prohledávání obrazové paměti a nalezeným vnitřním bodům se nastaví nová barva směr prohledávání a úzce souvisí s charakterem hranice a s tím, co považujeme za její vnitřek rozlišujeme tyto vnitřní oblasti: -spojitá (-souvislá) oblast 8-spojitá (8-souvislá) oblast (většina systémů zpracovává 8-spojitou hranici a -spojitou oblast) Semínkové Semínkové každému typu oblasti odpovídá jiný typ hranice pro ohraničení 8-spojité oblasti musíme použít -spojitou hranici (problém vyplnění bodů i za touto hranicí) a) -spojitá oblast ohraničená 8-spojitou hranicí b) 8-spojitá oblast ohraničená -spojitou hranicí při semínkovém postupujeme od zadaného semínka a zkoumáme, zda jeho sousední body patří k vnitřku oblasti příslušnost je ovlivněna testovanou vlastností základní varianty: hraniční (testovaný bod je vnitřní, má-li jinou barvu, než je zadaná barva hranice) záplavové (lavinové) (testovaný bod je vnitřní, má-li stejnou barvu jako zadané semínko tzv. přebarvování)
Semínkové hraniční Semínkové záplavové vyplnění až k hranici dané barvy přebarvení pixelů dané barvy 7 Semínkové záplavové Semínkové záplavové -souvislá oblast 8-souvislá oblast 8 9 Řádkové semínkové metoda, která snižuje počet přístupů do obrazové paměti používá zásobník, ve kterém jsou uchovány souřadnice jen několika vnitřních bodů vyplňované oblasti ) Vlož uživatelem zadané semínko do zásobníku ) Dokud není zásobník prázdný: a) vyjmi semínko o souřadnicích [x,y] ze zásobníku b) nalezni hranici x L a x R na řádku y v nejbližším okolí bodu [x,y] c) nakresli úsečku [x L,y] [x R,y] d) na (vyšší) úsečce [x L,y + ] [x R,y + ] hledej souvislé vnitřní úseky a pro každý z nich vlož do zásobníku souřadnice jednoho vnitřního bodu e) na (nižší) úsečce [x L,y ] [x R,y ] hledej souvislé vnitřní úseky a pro každý z nich vlož do zásobníku souřadnice jednoho vnitřního bodu 0 Řádkové semínkové
Ořezávání D objektů Ořezávání v rovině Jana Dannhoferová (jana.dannhoferova@mendelu.cz) Ústav informatiky, PEF MZLU ořezávací algoritmy jsou specializovány na: test polohy bodu ořezání úsečky ořezání oblasti speciální postupy osově orientované okno umožňuje použít jednoduché testy porovnáváním příslušné souřadnice s hraniční hodnotou u obecně orientované hranice je vhodné použít rovnici hraniční přímky: F(x,y) = a * x + b * y + c = 0 a testovat pozici bodu P=[x p,y p ] pomocí testu F(x p,y p ) > 0 (leží uvnitř) F(x p,y p ) = 0 (leží na hranici) F(x p,y p ) < 0 (leží mimo) Cohen-Sutherland Ořezávání polygonů metoda ořezávání úsečky obdélníkovým oknem algoritmus označuje krajní body úseček pomocí hraničních kódů možné polohy úsečky vůči oknu: kód(p) kód(q) = -celá úsečka leží uvnitř kód(p) kód(q) -celá úsečka leží mimo okno kód(p) kód(q) = -úsečku je třeba oříznout zahrnuje v sobě úlohu ořezání úseček podle hranice (chceme-li pouze obrys n-úhelníku, pak stačí ořezávat hrany samostatně jako úsečky) pro ořezání polygonů podle okna se používají: Cohen-Sutherland (ořezání každé hrany polygonu podle celého okna) Sutherland-Hodgman (postupně ořezává polygon podle jednotlivých hranic) Sutherland-Hodgman Literatura používá se pro ořezání vyplněných polygonů ořezává postupně podle každé hrany pravoúhlého okna pro zjednodušení se ořezává pořád podle stejné hrany a polygon se po každém ořezu otočí o 90 Beneš, B., Felkel, P., Sochor, J., Žára, J. Moderní počítačová grafika. Computer Press: Brno, 00. Beneš, B., Sochor, J., Žára, J. Algoritmy počítačové grafiky. ČVUT: Praha, 99. Sochor, J.: Základy počítačové grafiky. FI MU: Brno, 00. 7