Zobrazovací řetězec a obrazová paměť, operace s fragmenty

Podobné dokumenty
Zobrazovací řetězec a obrazová paměť, operace s fragmenty

Základní techniky zobrazování Josef Pelikán, MFF UK Praha

Reflections, refractions, interreflections

Výpočet vržených stínů

Reprezentace 3D modelu

Připravil: David Procházka. Projekce

Zobrazování a osvětlování

Fakulta informačních technologíı. IZG cvičení 6. - Zobrazování 3D scény a základy OpenGL 1 / 38

Hierarchický model Josef Pelikán CGG MFF UK Praha. 1 / 16

Připravil: David Procházka. Vertex Buffer Objects

Pokročilé techniky Josef Pelikán, MFF UK Praha

Souřadnicové prostory

Úvod Typy promítání Matematický popis promítání Implementace promítání Literatura. Promítání. Pavel Strachota. FJFI ČVUT v Praze

Geekovo Minimum. Počítačové Grafiky. Nadpis 1 Nadpis 2 Nadpis 3. Božetěchova 2, Brno

Zobrazování těles. problematika geometrického modelování. základní typy modelů. datové reprezentace modelů základní metody geometrického modelování

Text úlohy. Která barva nepatří do základních barev prostoru RGB? Vyberte jednu z nabízených možností: a. Černá b. Červená c. Modrá d.

1. Vektorové algoritmy jejich výstupem je soubor geometrických prvků, např.

Vyplňování souvislé oblasti

Třída DrawingTool. Obrázek 1: Prázdné okno připravené pro kreslení

Transformace (v OpenGL) příklady a knihovna GLM

Textury v real-time grafice Josef Pelikán, MFF UK Praha Josef.Pelikan@mff.cuni.cz

27. listopadu 2013, Brno Připravil: David Procházka

Watkinsův algoritmus řádkového rozkladu

Jana Dannhoferová Ústav informatiky, PEF MZLU

Připravil: David Procházka. Vykreslování grafických primitiv

ak. rok 2013/2014 Michal Španěl,

Barvy a barevné modely. Počítačová grafika

Programování grafiky ÚVOD

Fakulta informačních technologíı. Rendering Seminář 1. 1 / 28

Základy programování shaderů v OpenGL Část 2 - přenos dat

Reprezentace 3D scény

. Grafika a plovoucí prostředí. Zpracování textů na počítači. Ing. Pavel Haluza, Ph.D. ústav informatiky PEF MENDELU v Brně haluza@mendelu.

SPIRIT Nové funkce. SOFTconsult spol. s r. o., Praha

Osvětlování a stínování

8. VIDITELNOST. Cíl Po prostudování této kapitoly budete umět. Výklad. P i O M. a A. b A. 8. Viditelnost

B4B35OSY: Operační systémy

Programování grafiky ÚVOD

11 Zobrazování objektů 3D grafiky

Algoritmizace a programování

Počítačová grafika SZŠ A VOŠZ MERHAUTOVA 15, BRNO

9 Prostorová grafika a modelování těles

Bloky, atributy, knihovny

Deskriptivní geometrie I zimní semestr 2017/18

Multimediální systémy. 11 3d grafika

Rekurzivní sledování paprsku

MRBT M8. VIDITELNOST OBJEKTŮ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ. Bc. MARTIN MAŠTERA

Katedra informatiky, Univerzita Palackého v Olomouci. 27. listopadu 2013

Základy programování shaderů v OpenGL Část 2 - přenos dat

Co je grafický akcelerátor

Text úlohy. Vyberte jednu z nabízených možností:

Struktura scény. Petr Felkel Katedra počítačové grafiky a interakce, ČVUT FEL místnost KN:E-413 (Karlovo náměstí, budova E)

Návod k použití softwaru Solar Viewer 3D

Modely prostorových těles

Pokročilé osvětlovací techniky Josef Pelikán, MFF UK Praha

1.1. Spuštění ArchiCADu Práce s projektem Pracovní plocha 19

Úvod do počítačové grafiky

Práce na počítači. Bc. Veronika Tomsová

Algoritmy výpočetní geometrie

Surfels: Surface Elements as Rendering Primitives

Kde se používá počítačová grafika

5.1.4 Obrazy těles ve volném rovnoběžném promítání II

DATOVÉ FORMÁTY GRAFIKY, JEJICH SPECIFIKA A MOŽNOSTI VYUŽITÍ

Transformace (v OpenGL)

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

3D akcelerátory historie a architektura

TECHNICKÉ KRESLENÍ A CAD. Přednáška č.6

Fergusnova kubika, která je definována pomocí bodu P1, vektoru P1P2, bodu P3 a vektoru P3P4

Připravil: David Procházka. Shadery

Hardware pro počítačovou grafiku NPGR019

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Zobrazování barev Josef Pelikán CGG MFF UK Praha.

1. Paleta History (Historie)

nástroj pro výběr - obdélník, elipsa... nástroj pro přesun - přesun výběru, vrstev a vodítek nástroj laso - vytváření výběru od ruky

5 Přehled operátorů, příkazy, přetypování

Monochromatické zobrazování

13 Barvy a úpravy rastrového

Digitální učební materiály ve škole, registrační číslo projektu CZ.1.07/1.5.00/

Počítačová grafika letem světem

Android OpenGL. Pokročilé shadery

Android OpenGL. Práce s texturami

Zobrazovací jednotky a monitory

Hardware pro počítačovou grafiku NPGR019

Úvod Některé algoritmy pro řešení viditelnosti Literatura. Řešení viditelnosti. Pavel Strachota. FJFI ČVUT v Praze. 11. dubna 2012

Knihovna CanvasLib TXV první vydání prosinec 2014 změny vyhrazeny

PRINCIPY POČÍTAČOVÉ GRAFIKY metodický list č. 1

5.1.4 Obrazy těles ve volném rovnoběžném promítání II

Přerušovací systém s prioritním řetězem

Inovace a zkvalitnění výuky prostřednictvím ICT Design a vzhledové vlastnosti webových stránek Vlastnosti CSS pro pozicování Ing.

Comenius Logo. Princip programování. Prostředí Comenius Logo

LEKCE 6. Operátory. V této lekci najdete:

Aplikované úlohy Solid Edge. SPŠSE a VOŠ Liberec. Ing. Aleš Najman [ÚLOHA 28 NÁSTROJE EDITACE ]

Vyhledávání. doc. Mgr. Jiří Dvorský, Ph.D. Katedra informatiky Fakulta elektrotechniky a informatiky VŠB TU Ostrava. Prezentace ke dni 12.

Připravil: David Procházka. Knihovna GLUT

Popis výukového materiálu

Hydroprojekt CZ a.s. WINPLAN systém programů pro projektování vodohospodářských liniových staveb. HYDRONet 3. Modul TERÉN

umenugr JEDNOTKA PRO VYTVÁŘENÍ UŽIVATELSKÝCH GRAFICKÝCH MENU Příručka uživatele a programátora

Textury. Petr Felkel, Jaroslav Sloup a Vlastimil Havran

VYUŽITÍ POČÍTAČOVÉ GRAFIKY

Malířův algoritmus Josef Pelikán CGG MFF UK Praha. 1 / 15

Digitální učební materiál

Transkript:

Zobrazovací řetězec a obrazová paměť, operace s fragmenty Petr Felkel Katedra počítačové grafiky a interakce, ČVUT FEL místnost KN:E-413 na Karlově náměstí E-mail: felkel@fel.cvut.cz S použitím materiálů Bohuslava Hudce, Jaroslava Sloupa a úprav Vlastimila Havrana Poslední změna: 16.2.2015

Zobrazovací řetězec tok dat (data flow) Obrázek převzat od Davida Ambrože 2

Od vrcholu k fragmentu Obrázek převzat od Davida Ambrože 3

Od vrcholu k fragmentu Po průchodu vertex shaderem vstupují vrcholy do fixní části zobrazovacího řetězce sestavení primitiva (primitive assembly) ořezání do pohledového jehlanu (clipping) převod z homogenních souřadnic (Divide-by-W) umístění na obrazovku (Viewport) Rasterizace a interpolace (Rasterizer) Pak následuje fragment shader V něm se spočítá výsledná barva fragmentu Fragment jsou všechna data adresovaná souřadnicemi jednoho konkrétního pixelu, viz dále. 5

Od vrcholu k fragmentu [Gortler] 6

Ořezání (clipping) Ořezání odstraní geometrii mimo pohledový jehlan (viewing frustrum) - top, bottom, left, right, near, far Šetří se tím rasterizace a výpočty (nepočítá se to, co není vidět) Vznikají nové vrcholy [www.willamette.edu] Odstraní se části primitiv za kamerou 7 [http://techpubs.sgi.com]

Odstranění části primitiv za kamerou Trojúhelník z boku Vrchol za kamerou chybně správně Vykreslujeme totiž fragmenty mezi průměty koncových bodů Dělení překlopí oba vrcholy do stejné průmětny správně po ořezání 8

Ve kterých souřadnicích ořezávat? V souřadnicích kamery? => Ne, ještě neproběhla projekce. V normalizovaných souřadnicích? => Ne, již došlo k překlopení (proběhlo dělení ) V ořezových souřadnicích (clip-space) => ANO ještě nedošlo k dělení, trojúhelník je ve 4D Pozice i atributy nových vrcholů se počítají v ořezových souřadnicích a lineárně interpolují z původních vrcholuů 9

Eliminace odvrácených (Backface culling) U uzavřených těles (watertight) nikdy nevidíme odvrácenou stěnu Vrcholy zadáváme proti směru hodinových ručiček (ccw) Pak stačí vyřadit plošky s odvrácenou normálou [flylib.com] back face = if(. ) front back 10

Viewport Matice transformace záběru (pracoviště) viz předn. 05 1 2 0 0 2 0 2 0 2 0 0 1 1 2 2 0 0 0 1 1 Normalizované souřadnice zařízení [x d y d z d ] t 1 1 Souřadnice formátu na obrazovce [x w y w z w ] t screen w 1-1 -1 1-1 o y viewport 11 x y h 0

Pixel coordinates y ová souřadnice okna 3.0 2.0 1.0 levý dolní roh okna Souřadnice pixelu = souřadnice jeho levého dolního rohu - pixel (x, y) pokrývá plochu mezi x,y a x+1, y+1 region occupied by a pixel (2, 1) 0.0 0.0 1.0 2.0 3.0 X-ová souřadnice okna 12

Rasterizace 13

Zobrazovací řetězec tok dat (data flow) Obrázek převzat od Davida Ambrože 14

Obrazová paměť framebuffer dříve 3.3 Součásti (vrstvy, roviny) obrazové paměti akumulační (accum.) šablona (stencil) hloubka (depth) minimum barva (AUXi) barva (BACK-LEFT) barva (FRONT-LEFT) barva (BACK-RIGHT) barva (FRONT-RIGHT) Pixel v různých rovinách obrazové paměti 15

Obrazová paměť framebuffer nyní 4.0 Součásti (vrstvy, roviny) obrazové paměti minimum šablona (stencil) hloubka (depth) barva (BACK-LEFT) barva (FRONT-LEFT) barva (BACK-RIGHT) barva (FRONT-RIGHT) Pixel v různých rovinách obrazové paměti 16

Paměť barvy - color buffer (1) Barva RGB(A) Kreslí se do ní viditelné šablona (stencil) hloubka (depth) barva (BACK-LEFT) barva (FRONT-LEFT) neviditelné barva (BACK-RIGHT) barva (FRONT-RIGHT) Pixel v různých rovinách obrazové paměti 17

Paměť barvy - color buffer (2) Minimální konfigurace OpenGL - FRONT_LEFT Stereo, double buffer - podporován? glgetbooleanv( GL_STEREO, &b ); glgetbooleanv( GL_DOUBLEBUFFER, &b ); šablona (stencil) hloubka (depth) barva (BACK-LEFT) barva (FRONT-LEFT) barva (BACK-RIGHT) barva (FRONT-RIGHT) Výběr, kam se kreslí barva fragmentů gldrawbuffer( GLenum mode ); // jedna paměť GL_NONE, nekreslí se nic GL_FRONT_LEFT, GL_FRONT_RIGHT, GL_BACK_LEFT, GL_BACK_RIGHT, jedna paměť gldrawbuffers(glsizei n, const GLenum * bufs); // n pamětí multiple rendering targets GL_COLOR_ATTACHMENTn pro FBO (framebuffer object) 18

Paměť barvy - color buffer (3) Barva v BACK bufferu RGB(A), Kreslí se do ní na pozadí (není vidět) Přepíná se s FRONT bufferem glutswapbuffers () šablona (stencil) hloubka (depth) barva (BACK-LEFT) barva (FRONT-LEFT) barva (BACK-RIGHT) barva (FRONT-RIGHT) Výběr roviny na kreslení Mono: gldrawbuffer(gl_back_left); // GL_BACK Stereo: gldrawbuffer(gl_back_left); cameral();draw(); gldrawbuffer(gl_back_right);camerar();draw(); Výběr zdroje pro čtení glcopypixels() glreadbuffer(gl_back_left); 19

Paměť hloubky depth buffer (1) Hloubka (depth-, Z-buffer) vzdálenost oko-pixel typické použití: viditelnost (vzdálenější pixel je přepsán bližším) akumulační(accum.) šablona (stencil) hloubka (depth) barva (AUXi) barva (BACK-LEFT) barva (FRONT-LEFT) Blízká tělesa zakrývají vzdálená tělesa Bližší fragmenty překreslí ty vzdálenější Fragmenty, které jsou dále se zahodí (stejně by nebyly vidět) Lze řešit viditelnost bez paměti hloubky? [ from Wikipedia ] 20

Paměť hloubky depth buffer (2) Hloubka (depth) šablona (stencil) hloubka (depth) barva (BACK-LEFT) barva (FRONT-LEFT) barva (BACK-RIGHT) barva (FRONT-RIGHT) Nastavení v programu při výběru kontextu glutinitdisplaymode( GLUT_DEPTH ); glenable( GL_DEPTH_TEST ); // zapnutí hloubkového testu gldepthmask( GL_TRUE ); // povolení aktualizace Použití viz dále glclear(. GL_DEPTH_BUFFER_BIT ); // smazání DrawObjectsInTheScene(); 21

Pamět hloubky depth buffer (3) void gldepthfunc( GLenum func ) func funkce pro porovnávání (novéz fragmentu s uloženouz pixelu) GL_NEVER, GL_LESS, GL_EQUAL, GL_LEQUAL, GL_GREATER, GL_NOTEQUAL, GL_GEQUAL, a GL_ALWAYS void glenable( GL_DEPTH_TEST ); // zapnutí hloubkového testu void gldepthmask( GLboolean flag ) // povolení aktualizace paměti flag - význam // hloubky GL_FALSE zápis zakázán GL_TRUE zápis povolen void gldepthrange( GLclampd znear, GLclampd zfar ) transformace do z-ových souřadnic okna normalizované souřadnice z -1, 1 znear => 0, zfar => 1!!! => z okna 0, 1 - rozsah jako barva 22

Šablona - stencil Se šablonou bez šablony [Sulaco] [O Reilly] 23

Šablona - stencil Šablona (stencil) lze označit pixely, kam se smí / nesmí kreslit jedna či více bitových rovin (bitplane) pomocí masky se zvolí bitová rovina přímo se nekreslí (dle paměti barvy) používá se ve víceprůchodových algoritmech pro speciální efekty: obtisky (decals), získání obrysu (outlining), odrazy (v zrcadle, ve vodě), šablona (stencil) hloubka (depth) barva (BACK-LEFT) barva (FRONT-LEFT) a zobrazování CSG modelů (constructive solid geometry). barva (BACK-RIGH barva (FRONT-RIGHT 24

Zobrazovací řetězec tok dat (data flow) Obrázek převzat od Davida Ambrože 25

Počet bitových rovin - bitplanes Color buffer: [r,g,b,a] = [8, 8, 8, 8] bits Depth buffer: depth = 24 bits Stencil buffer: 8 bits Auxiliary color buffers: 4 Double buffer: supported Stereo: not supported Inicializace v GLUTu glutinitdisplaymode( GLUT_RGB // only RGB, no alpha GLUT_DEPTH // depth buffer GLUT_STENCIL // stencil buffer GLUT_DOUBLE // double buffer(front + back) ); 26

Mazání pamětí (buffers) pro vykreslování Smazání vybraných pamětí void glclear( GLbitfield mask ); mask které paměti smazat GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, GL_STENCIL_BUFFER_BIT, 27

Mazání pamětí Nastavení mazací hodnoty pro jednotlivé roviny void glclearcolor( GLclampf red, GLclampf green, GLclampf blue, GLclampf alpha ); void glcleardepth( GLclampd h ); void glclearstencil( GLint s ); Hloubka h je z intervalu <0,1>. Implicitní hodnota h = 1.0 ~ zfar Ostatní parametry mají implicitní hodnotu 0, resp 0.0f. 28

Maskování zápisu do obrazové paměti Do paměti se zapíše, jen pokud je to povoleno maskou Nastavení masky (true zapisuje, false ne) void glcolormask( GLboolean red, GLboolean green, GLboolean blue, GLboolean alpha ); void gldepthmask( GLboolean flag ); void glstencilmask( GLuint mask ); Implicitně všechny na GL_TRUE a GLuint na samé jedničky 29

Zobrazovací řetězec tok dat (data flow) Obrázek převzat od Davida Ambrože 30

Testování fragmentů Po rasterizaci víme, které fragmenty vznikly, jakou mají barvu, hloubku, případně i další informace - normálu, vektor ke světlu, (fragmenty = možné budoucí pixely s hloubkou, barvou, ) Fragment musí projít ještě řadu testů a operací Test. na konci je obrazová paměť (color, depth, stencil) povolí či zakáže daný fragment může změnit hodnotu příslušné paměti test hloubky = aktualizuje hloubku pixelu test šablony = změní hodnotu v šabloně 31

Testování fragmentů a operace s fragmenty Enable/Disable Scissor test šablona (stencil) hloubka (depth) barva (BACK-LEFT) barva (FRONT-LEFT) barva (BACK-RIGHT) barva (FRONT-RIGHT) 32

Testování fragmentů a operace s fragmenty 1. Výstřižek (Scissor test) 2. Test šablony (Stencil test) 3. Test hloubky (Depth test) 4. Míchání (Blending) 5. Logické operace 3 testy 2 operace 33

1. test: Výstřižek (scissor test) (1) Enable/Disable Scissor test šablona (stencil) hloubka (depth) barva (BACK-LEFT) barva (FRONT-LEFT) barva (BACK-RIGHT) barva (FRONT-RIGHT) 34

1. test: Výstřižek (scissor test) (2) Kreslení pouze do obdélníkové oblasti okna rychlá verze šablony (stencil) Update changed part of the screen only void glscissor( GLint x, GLint y, y h w x, y dolní levý roh w, h šířka a výška GLsizei w, GLsizei h ) x glenable( GL_SCISSOR ); 35

3. test Hloubkový test (depth test) (1) Enable/Disable Scissor test šablona (stencil) hloubka (depth) barva (BACK-LEFT) barva (FRONT-LEFT) barva (BACK-RIGHT) barva (FRONT-RIGHT) 36

3. test Hloubkový test (depth test) (2) Pro každý pixel uložena vzdálenost k oku if( depth_test_passes ) propusť pixel a nahraď hloubku novou hodnotou Režimy paměti hloubky (zbuffer) Test vypnut gldisable( GL_DEPTH_TEST ); Test zapnut glenable( GL_DEPTH_TEST ); povolena aktualizace zbufferu gldepthmask( GL_TRUE ); zakázána aktualizace zbufferu gldepthmask( GL_FALSE ); 37

3. test Hloubkový test (depth test) (3) Pro každý pixel uložena vzdálenost k oku (ke kameře) if( depth_test_passes ) { // depth < stored_depth propusť fragment if( DEPTH_MASK true ) nahraď novou hodnotou z //update stored_depth=dep } else { // depth test failed if( DEPTH_TEST enabled ) zadrž fragment else propusť fragment neměň uloženou hodnotu Z } 38

2. test: Šablona (stencil test) (1) Enable/Disable Scissor test šablona (stencil) hloubka (depth) barva (BACK-LEFT) barva (FRONT-LEFT) barva (BACK-RIGHT) barva (FRONT-RIGHT) 39

2. test: Šablona (stencil test) (2) Stencil test Porovná referenční hodnotu ref s hodnotou pixelu v šabloně s Podle výsledku porovnání (true / false) propustí či nepropustí fragment - glstencilfunc() a modifikuje obsah šablony - glstencilop() porovnává jen bity které mají 1 v masce mask - glstencilmask() Modifikace závisí i na testu hloubky (depth test) Tři různé kombinace -> tři modifikující operace fail porovnání neuspělo zfail porovnání uspělo, neuspěl test hloubky (vzadu, zakryto) zpass porovnání uspělo, uspěl test hloubky (nebo je zakázán) (vpředu) glenable(gl_stencil_test) Povolí test i modifikaci šablony glstencilmask(gluint mask) Maskování jen některých bitů 40

2. test: Šablona (stencil test) (3) Funkcionalita nad fragmenty je následující: fragment Stencil test Nastavena funkcí: glstencilfunc(glenum func, GLint ref, GLuint mask) sfail Depth test (z-test) zfail zpass Aktualizace stencil bufferu dána funkcí: glstencilop(sfail, zfail, zpass) 41

2. test: Šablona (stencil test) (4) void glstencilfunc( GLenum func, GLint ref, GLuint mask ) Nastavuje porovnávání porovnávací funkci func GL_NEVER, GL_LESS, GL_LEQUAL, GL_GREATER, GL_GEQUAL, GL_EQUAL, GL_NOTEQUAL a GL_ALWAYS např.: GL_LESS => if( ref < pixelstencilvalue ) then true referenční hodnotu ref (default 0) = konstanta S ní se porovnává, nebo se zapíše do masky masku mask (samé 1) přesněji dolních s bitů odpovídá s bitům šablony bitový AND (&) určí bitové roviny k porovnání např.: GL_LESS => if( ref & mask) < ( stencil & mask) then true Porovnávácí funkce GL_LESS, GL_GREATER atd. 42

2. test: Šablona (stencil test) (5) void glstencilop( GLenum fail, GLenum zfail, GLenum zpass ) Nastavuje modifikující operace pro hodnoty ve stencil buffer funkce modifikující data ve stencil bufferu fail porovnání neuspělo zfail porovnání uspělo, neuspěl test hloubky zpass porovnání uspělo, uspěl test hloubky (nebo je zakázán) GL_KEEP (nemění šablonu) GL_ZERO (nastaví na 0) GL_REPLACE (nastaví na ref zadané glstencilfunc) GL_INCR, GL_INCR_WRAP (inkrementace šablony ) GL_DECR, GL_DECR_WRAP (dekrementace šablony ) GL_INVERT (inverze bitů) 43

2. test: Šablona (stencil test) (6) Příklad kreslení vymezené trojúhelníkem Červený trojúhelník se nakreslí a přitom naplní šablonu 1 Pak se kreslí zelený čtverec pouze tam, kde je v šabloně 1 (zbyde z něj jen zelená část bez rohů) Pak se kreslí modrý čtverec pouze tam, kde je v šabloně 0 (zbydou z něj jen modré rohy) glstencilfunc(gl_always, 1, 1); glstencilop(gl_keep, GL_KEEP, GL_REPLACE); drawredtriangle(); glstencilfunc(gl_equal, 1, 1); glstencilop(gl_keep, GL_KEEP, GL_KEEP); drawgreenpolygon(); glstencilfunc(gl_notequal, 1, 1); drawbluepolygon(); 44

2. test: Šablona (stencil test) (7) Příklad kreslení kosočtverce do a mimo něj hodnota 1 pro replace rovina č. 1 (maska) 1. inicializovat glclearstencil(0x0); glenable(gl_stencil_test); 2. naplnit šablonu jedničkami (kosočtverec na obrázku) vynulovat glclear(gl_stencil_buffer_bit); nastavit glstencilfunc (GL_ALWAYS, 0x1, 0x1) glstencilop(,gl_replace,gl_replace); nakreslit tvar drawstencil(); // kosočtverec, tvar šablony 3. Kreslit scénu glstencilop(gl_keep, GL_KEEP,GL_KEEP); glstencilfunc(gl_equal, 0x1, 0x1); // 1 drawbluesphere() // uvnitř šablony glstencilfunc(gl_notequal, 0x1, 0x1); // 0 drawtoriscene(); // mimo šablonu glstencilop( GLenum fail, GLenum zfail, GLenum zpass ) 45

2. test: Šablona (stencil test) (8) Vyplnění děr v uzavřených tělesech po oříznutí rovinou ( uzavření tělesa, aby nebylo vidět dovnitř) musí mít sudý počet přivrácených a odvrácených stěn -> XOR vynulovat šablonu glclearstencil(0x0); glclear(gl_stencil_buffer_bit); povolit update, invertovat (jednou 1, 2x bude 0, ) glenable(gl_stencil_test); glstencilfunc (GL_ALWAYS,, 0x1); glstencilop (, GL_INVERT, GL_INVERT); dokreslit čepice (všechny najednou) glstencilfunc (GL_NOTEQUAL, 0x0, 0x1); glstencilop( GL_KEEP, GL_KEEP,GL_KEEP); drawlargerectanglecap(); glstencilop( GLenum fail, GLenum zfail, GLenum zpass ) 46

4. operace: Míchání barev (blending) (1) Enable/Disable Scissor test šablona (stencil) hloubka (depth) barva (BACK-LEFT) barva (FRONT-LEFT) barva (BACK-RIGHT) barva (FRONT-RIGHT) 47

4. operace: Míchání barev (blending) (2) míchání nové barvy s barvou v obrazové paměti v režimu RGBA viz následující přednáška 48

5. Logické operace (1) Enable/Disable Scissor test šablona (stencil) hloubka (depth) barva (BACK-LEFT) barva (FRONT-LEFT) barva (BACK-RIGHT) barva (FRONT-RIGHT) 49

5. Logické operace (2) Logické operace Zdroj S D f (S,D) Zdroj S - bit fragmentu Cíl D - bit pixelu barevné paměti (color buffer) Cíl Hodnoty cíle a zdroje 0 a 1 f(z,d) má 16 možných kombinací 16 módů zápisu Výběr logické operace (módu zápisu) void gllogicop(glenum mód) Povolení / zákaz aplikace logické operace glenable(gl_logic_op) gldisable(gl_logic_op); 50

5. Logické operace (3) Logické operace mezi barvou RGBA fragmentu a barvou uloženou v barevné paměti (colorbuferu) 16 operací (módů) S = source, D = destination operationcode meaning operationcode meaning 0 GL_CLEAR 0 8 Gl_AND S D 1 GL_COPY S 9 GL_OR S D 2 GL_NOOP D 10 GL_NAND (S D) 3 GL_SET 1 11 GL_NOR (S D) 4 GL_COPY_INVERT S 12 GL_XOR S xor D 5 GL_INVERT D 13 GL_EQUIV ( S xor D) 6 GL_AND_REVERSE S D 14 GL_AND_INNVERTED S D 7 GL_OR_REVERSE S D 15 GL_OR_INVERTED S D 51

Shrnutí Zobrazovací řetězec Část od sestavení primitiv po rasterizaci Součásti obrazové paměti na co se používají jak se mažou a jak se do nich zapisuje Testy a operace s fragmenty provádí se po výpočtu pozice a barvy fragmentu určí, jestli se fragment dostane na obrazovku šablona, test hloubky, 52

Zobrazovací řetězec dnes probrané části Obrázek převzat od Davida Ambrože 53