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

Podobné dokumenty
Android OpenGL. Práce s texturami

Textury. Petr Felkel, Jaroslav Sloup a Vlastimil Havran

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

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

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

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

Připravil: David Procházka. Shadery

Textury. Petr Felkel, Jaroslav Sloup a Vlastimil Havran

Programování shaderů GLSL

Reflections, refractions, interreflections

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

3D počítačová grafika na PC Josef Pelikán, MFF UK Praha

Programovatelné shadery a jazyk Cg. Petr Kmoch

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

Android OpenGL. Pokročilé shadery

13 Barvy a úpravy rastrového

Téma: Vektorová grafika. Určete pravdivost následujícího tvrzení: "Grafická data jsou u 2D vektorové grafiky uložena ve voxelech."

- obvyklejší, výpočetně dražší - každé písmeno je definováno jako zakřivený nebo polygonální obrys

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

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

Připravil: David Procházka. Projekce

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

Textura a mapovací funkce Způsoby aplikace textury Použití textury pro prostorovou modifikaci povrchu Mipmapping Literatura.

KATEDRA INFORMATIKY. Demonstrace OpenGL v prostředí LispWorks

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

Omezení barevného prostoru

1. Nastavení dokumentu

NPGR019. Geometry & tessellation shaders. MFF UK Praha. Vykreslování v OpenGL Tessellation shaders Geometry shaders Literatura

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

Programování grafiky ÚVOD

Programování grafiky ÚVOD

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

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

Úvod do počítačové grafiky

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

IVT. Rastrová grafika. 8. ročník

Připravil: David Procházka. Základy OpenGL

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

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

Ing. Jan Buriánek. Katedra softwarového inženýrství Fakulta informačních technologií České vysoké učení technické v Praze Jan Buriánek, 2010

Surfels: Surface Elements as Rendering Primitives

Algoritmizace prostorových úloh

Jazyk C# (seminář 9)

PB001: Úvod do informačních technologíı

Úloha 1. Text úlohy. Vyberte jednu z nabízených možností: NEPRAVDA. PRAVDA Úloha 2. Text úlohy

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

Reprezentace bodu, zobrazení

TAM. Prezentace přednášek. Ústav počítačové grafiky a multimédií

Deformace rastrových obrázků

Počítačová grafika. OBSAH Grafické formy: Vektorová grafika Bitmapová (rastrová grafika) Barevné modely

Internetové publikování. Doc. Ing. Petr Zámostný, Ph.D. místnost: A-72a tel.: 4222, 4167 (sekretariát ústavu 111)

GPU RAYTRACER PRO OSG

State Space Search Step Run Editace úloh Task1 Task2 Init Clear Node Goal Add Shift Remove Add Node Goal Node Shift Remove, Add Node

VY_32_INOVACE_INF4_12. Počítačová grafika. Úvod

Obsah. Základy práce s rastry. GIS1-5. cvičení. ČVUT v Praze, Fakulta stavební, katedra mapování a kartografie

Návod na obsluhu vektorového obvodového analyzátoru R&S ZVL

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ BRNO UNIVERSITY OF TECHNOLOGY

. 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.

Mgr. Vlastislav Kučera Header, footer, navv, article, section, boxy, margin, padding, border

1. Rysy OpenGL. Popište, které grafické operace OpenGL umožňuje a které nikoli.

Rastrové digitální modely terénu

Výsledky = = width height 3 width height R + G + B ( )

9. Práce s naskenovanými mapami

Práce s binárními soubory. Základy programování 2 Tomáš Kühr

Úvod do jazyka C. Ing. Jan Fikejz (KST, FEI) Fakulta elektrotechniky a informatiky Katedra softwarových technologií

Rekurzivní sledování paprsku

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

Reprezentace 3D modelu

Datové formáty grafiky, jejich specifika a možnosti využití. L u b o š T o m e š e k U M T M a n a ž e r s k á i n f o r m a t i k a 2015/ 16

7 Transformace 2D. 7.1 Transformace objektů obecně. Studijní cíl. Doba nutná k nastudování. Průvodce studiem

BPC2E_C08 Parametrické 3D grafy v Matlabu

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

Rastrový obraz Barevný prostor a paleta Zmenšení barevného prostoru Základní rastrové formáty

Základy 3D modelování a animace v CGI systémech Cinema 4D C4D

Zvyšování kvality výuky technických oborů

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

Stru ný obsah. Úvod do Microsoft.NET Kapitola 1: Vývoj her a ízený kód...15

OKEŠ/MISYS. TISKY v systému KOKE. příprava tisku nastavení programu postupy při tisku problémy WKOKEŠ - TISKY.

int ii char [16] double dd název adresa / proměnná N = nevyužito xxx xxx xxx N xxx xxx N xxx N

InD PS PDF. Vytvoření korektního InD dokumentu

Realistické zobrazení terénu

8 Třídy, objekty, metody, předávání argumentů metod

Název: VY_32_INOVACE_PG3315 Umisťování textur pomocí modifikátoru UVW Map. Vzdělávací oblast / téma: 3D grafika, počítačová grafika, 3DS Max

STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST

Úpravy rastrového obrazu

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

Představení a srovnání grafických procesorů ATI RV770 a NVIDIA G(T)200

Filtr do AviSynthu. titulky

Základy OpenGL Josef Pelikán CGG MFF UK Praha. OpenGL / 34

Synchronizace dvou pohybů - posuvného ve směru osy x a totačního kolem osy z. scena.pov. anim.ini #include colors.inc

Funkce grafiky na webu. Primární grafická informace Fotografie Schémata Diagramy Loga Bannery

Bitmapová grafika: Vrstvy - interakce (režimy prolnutí)

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

PŘETĚŽOVÁNÍ OPERÁTORŮ

Webové stránky. 6. Grafické formáty pro web. Datum vytvoření: str ánk y. Vytvořil: Petr Lerch.

Počítačová grafika 1. Úvod do grafiky, základní pojmy. Rastrová grafika.

Vektorové grafické formáty

Rastrová grafika. body uspořádané do pravidelné matice

kamerou. Dle optických parametrů objektivu mohou v získaném obraze nastat geometrická

Programování v jazyce C pro chemiky (C2160) 3. Příkaz switch, příkaz cyklu for, operátory ++ a --, pole

Transkript:

27. listopadu 2013, Brno Připravil: David Procházka Texturování Počítačová grafika 2

Obsah přednášky Strana 2 / 37 Obsah přednášky 1 Obsah přednášky 2 Texturování 3 Multum In Parvo 4 Modulace textury ve fixed pipeline 5 Modulace textury v shaderu 6 Multitexturování 7 Průhlednost 8 Shrnutí

Obsah přednášky Strana 3 / 37 Obsah přednášky Dnes se naučíme jak se vytváří textury a jakým způsobem je můžeme aplikovat na objekty ve scéně.

Texturování Strana 4 / 37 Obsah přednášky 1 Obsah přednášky 2 Texturování 3 Multum In Parvo 4 Modulace textury ve fixed pipeline 5 Modulace textury v shaderu 6 Multitexturování 7 Průhlednost 8 Shrnutí

Texturování Strana 5 / 37 Textura Textura je v případě OpenGL matice přirozených čísel. U 2D textury je to např. GLubyte texture[texturewidth][textureheight][4]. Poslední parametr představuje RGBA komponenty. OpenGL přímo nepodporuje načítání PNG/JPEG, atp. Od toho jsou různé nástavby a samozřejmě vlastní kód.

Texturování Strana 6 / 37 Obecný postup texturování 1 Vytvořím (nahraji) texturu. 2 Informuji OpenGL o uložení bytů v textuře (glpixelstorei). 3 Vytvořím texturovací objekt, např.: glgentextures(1, &texturename); glbindtexture(gl TEXTURE 2D, texturename); 4 Nastavím chování textury (gltexparameter*). 5 Nahraji data do aktuálního texturovacího objektu (glteximage*d). 6 Zapnu texturování (glenable(gl TEXTURE *D)) 7 Zvolím metodu aplikace textury (gltexenv*).

Texturování Strana 7 / 37 2D textura Definice 2D textury void glteximage2d(glenum target, GLint level, GLint internalformat, GLsizei w, GLsizei h, GLint border, GLenum format, GLenum type, const GLvoid *texels) target budeme nastavovat na GL TEXTURE 2D, level specifikace úrovně textury u mipmapy, jinak 0, internalformat struktura dat v tex. obj. (např. GL RGB), width šířka specifikované textury, height výška specifikované textury, border zastaralý parametr, nastavit na 0, format formát dat v předávaném poli (např. GL RGB), type typ předávaných hodnot (např. GL UNSIGNED BYTE), texels pole s definovanými hodnotami.

Texturování Strana 8 / 37 Možné hodnoty parametrů internalformat: GL RGB, GL RGBA, GL RGB8, GL RGBA8, GL RGBA32F, GL DEPTH COMPONENT. format: GL RGB, GL RGBA, GL BGR, GL BGRA, GL RED, GL GREEN, GL BLUE, GL ALPHA, GL DEPTH COMPONENT. type: GL UNSIGNED BYTE, GL BITMAP, GL BYTE, GL UNSIGNED SHORT, GL SHORT, GL UNSIGNED INT, GL INT, GL HALF FLOAT, GL FLOAT, GL UNSIGNED BYTE 3 3 2 (8-bit integer, R3, G3, B2), aj.

Texturování Strana 9 / 37 3D textura Definice 3D textury void glteximage3d(glenum target, GLint level, GLint internalformat, GLsizei w, GLsizei h, GLsizei depth, GLint border, GLenum format, GLenum type, const GLvoid *texels) Stejné významy jako u 2D. depth hloubka (třetí rozměr matice).

Texturování Strana 10 / 37 Umístění textury na objekt Existuje příkaz gltexcoord, který umožňuje připojení textury k vrcholu objektu v im. mode. U VBO však rozšíříme pouze definici vrcholu o souřadnice textury a aktivujeme příslušné pole. 1 struct Vertex { 2 GLint position [ 3]; 3 GLfloat color [ 3]; 4 GLfloat normal [ 3]; 5 GLfloat texturecoord [ 2]; 6 }; 7... 8 static Vertex vertices [] = { 9 {{0,0,0}, {1.0, 0.0, 0.0}, {0,0, -1}, {0.0,0.0}},... 10... 11 gltexcoordpointer (2, GL_FLOAT, sizeof ( Vertex ), ( void *) 12 glenableclientstate ( GL_TEXTURE_COORD_ARRAY );

Texturování Strana 11 / 37 Souřadnice textury 2D textura je dána čtveřicí bodů, které představují její vrcholy. 2D textura má bod [0,0] v levém dolním rohu a [1,1] v pravém horním rohu. Souřadnice vrcholů tedy nabývají hodnot 0 a 1. Pokud použijeme vyšší číslo, znamená to, že se bude textura opakovat (2 = 2x). Souřadnice textur jsou označovány písmeny s, t, r a q.

Texturování Strana 12 / 37 Transformace textury Na texturu lze aplikovat maticové operace transformační maticí 4x4 glmatrixmode(gl TEXTURE). Transformace se aplikují ještě před nanesením na objekt. Lze také použít maticový zásobník glpushmatrix() a glpopmatrix().

Texturování Strana 13 / 37 Nastavení umístění textury Umístění textury void gltexparameter{i f}[v](glenum target, GLenum name, TYPE param) target bude v našem případě GL TEXTURE 2D, name je volba strany (šířka (s), výška (t), hloubka (r)) GL TEXTURE WRAP S, GL TEXTURE WRAP T, GL TEXTURE WRAP R, param je GL CLAMP TO EDGE (přichytit), GL REPEAT (opakovat), GL MIRRORED REPEAT (opakovat zrcadlově).

Texturování Strana 14 / 37 Filtrování textury Filtrování textury (stejný příkaz jako u mapování) void gltexparameter{i f}[v](glenum target, GLenum name, TYPE param) Problém: Texely a pixely objektu obvykle nejsou stejně velké, je nutný přepočet. name param GL TEXTURE MAG FILTER GL NEAREST, GL LINEAR GL TEXTURE MIN FILTER GL NEAREST, GL LINEAR GL NEAREST MIPMAP NEAREST GL NEAREST MIPMAP LINEAR GL LINEAR MIPMAP NEAREST GL LINEAR MIPMAP LINEAR

Texturování Strana 15 / 37 Filtrování textury vysvětlení parametrů GL TEXTURE MAG FILTER co dělat při zvětšení. GL TEXTURE MIN FILTER co dělat při zmenšení. GL NEAREST nejbližší soused (rychlé). GL LINEAR lineární interpolace (pěkné). Uvedené varinaty jsou jedniné možné, pokud nepoužíváme mipmapy. Výchozí nastavení pro GL TEXTURE MIN FILTER je GL NEAREST MIPMAP LINEAR je potřeba mít nagenrovánu mipmapu, jinak se textura nezobrazí!

Multum In Parvo Strana 16 / 37 Obsah přednášky 1 Obsah přednášky 2 Texturování 3 Multum In Parvo 4 Modulace textury ve fixed pipeline 5 Modulace textury v shaderu 6 Multitexturování 7 Průhlednost 8 Shrnutí

Multum In Parvo Strana 17 / 37 Multum In Parvo Při zmenšování textur dochází k nepříjemným artefaktům, moiré, atp. Lineární interpolace problém částečně reší, ale výrazně ovlivňuje výkon. Lze používat FSAA Full Scene AntialiAsing, nicméně také spomaluje (nastavení grafiky). Řešením je uložení textury ve více rozlišeních - MIP mapa. Zmenšené verze textury jsou vždy čtvrtinové velikosti. Pro jejich ukládání používáme parametr level u glteximage2d(). Práce s MIP mapami je označována jako práce s Level Of Detail (LOD). Aby nedocházelo ke skokovité změně velikosti, tak se interpolují hodnoty mezi vygenerovanými velikostmi.

Multum In Parvo Strana 18 / 37 Multum In Parvo obrázek

Multum In Parvo Strana 19 / 37 MIP mapa příklad uložení textur do TO 1 glteximage2d ( GL_TEXTURE_2D, 0, 3, 64, 64, 0, GL_RGB, 2 GL_ UNSIGNED_ BYTE, texture0 ); 3 glteximage2d ( GL_TEXTURE_2D, 1, 3, 32, 32, 0, GL_RGB, 4 GL_ UNSIGNED_ BYTE, texture1 ); 5 glteximage2d ( GL_TEXTURE_2D, 2, 3, 16, 16, 0, GL_RGB, 6 GL_ UNSIGNED_ BYTE, texture2 ); 7 glteximage2d ( GL_TEXTURE_2D, 3, 3, 8, 8, 0, GL_RGB, 8 GL_ UNSIGNED_ BYTE, texture3 ); 9 glteximage2d ( GL_TEXTURE_2D, 4, 3, 4, 4, 0, GL_RGB, 10 GL_ UNSIGNED_ BYTE, texture4 ); 11 glteximage2d ( GL_TEXTURE_2D, 5, 3, 2, 2, 0, GL_RGB, 12 GL_ UNSIGNED_ BYTE, texture5 ); 13 glteximage2d ( GL_TEXTURE_2D, 6, 3, 1, 1, 0, GL_RGB, 14 GL_ UNSIGNED_ BYTE, texture6 );

Multum In Parvo Strana 20 / 37 MIP mapa uložení do jednoho souboru

Multum In Parvo Strana 21 / 37 Multum In Parvo automatické generování Automatické generování textur do MIP mapy int glubuild2dmipmaps(glenum target, GLint internalformat, GLint width, GLint height, GLenum format, GLenum type, void *texels) Vytvoří automaticky hierarchii MIP map a zavolá glteximage2d(). Parametry mají stejný význam jako u glteximage2d. Existují i varianty pro 1D a 3D (+ height). Vrací 0 v případě úspěchu.

Multum In Parvo Strana 22 / 37 Multum In Parvo filtrace GL NEAREST MIPMAP NEAREST vybrán nejbližší texel z nejbližší větší nebo menší textury. Nejrychlejší, ale nejhorší. GL NEAREST MIPMAP LINEAR vybrány dva nejbližší texely z obou textur a lineární interpolace. Odstraní skokové změny v obraze při výběru jiné dvojice textur z mipmapy. GL LINEAR MIPMAP NEAREST billineární interpolaci nejbližších texelů v jedné textuře. Při zmenšování nebo zvětšování tělesa mohou nastat skokové změny. GL LINEAR MIPMAP LINEAR interpolace pro výpočet barev texelů v obou texturách a poté se výsledná barva spočte další interpolací. Nejlepší.

Modulace textury ve fixed pipeline Strana 23 / 37 Obsah přednášky 1 Obsah přednášky 2 Texturování 3 Multum In Parvo 4 Modulace textury ve fixed pipeline 5 Modulace textury v shaderu 6 Multitexturování 7 Průhlednost 8 Shrnutí

Modulace textury ve fixed pipeline Strana 24 / 37 Modulace textury Nastavení modulace textury void gltexenv{if}(glenum taget, GLenum pname, TYPE param) nastaví aktuální texturovací funkci. Význam parametrů je popsán v tabulce níže. Přípustné jsou uvedené kombinace parametrů + některé další. target pname param GL TEXTURE ENV GL TEXTURE ENV MODE GL DECAL GL REPLACE GL MODULATE GL BLEND GL ADD GL COMBINE GL TEXTURE ENV COLOR RGBA pole pro blend

Modulace textury ve fixed pipeline Strana 25 / 37 Nastavení modulace textury parametry GL DECAL texely budou nanášeny na vykreslovaný povrch bez úprav. GL BLEND vykreslované texely jsou míchány s předem zadanou barvou. Musíme definovat barvu. GL MODULATE vykreslované texely čtené z rastrové textury jsou modulovány podkladovou barvou.

Modulace textury v shaderu Strana 26 / 37 Obsah přednášky 1 Obsah přednášky 2 Texturování 3 Multum In Parvo 4 Modulace textury ve fixed pipeline 5 Modulace textury v shaderu 6 Multitexturování 7 Průhlednost 8 Shrnutí

Modulace textury v shaderu Strana 27 / 37 Textura v shaderu Záleží pouze na tom, jak texturu přičteme k původní barvě povrchu. Lze: přičítat, násobit, přepsal... 1 # version 130 2 uniform sampler2d texture0 ; 3 in vec2 texcoord0 ; 4 out vec4 outcolor ; 5 6 int main ( void ){ 7... 8 color = ambient +( diffuse + specular )* attenuation ; 9 outcolor = color * texture ( texture0, texcoord0. st ); 10 }

Multitexturování Strana 28 / 37 Obsah přednášky 1 Obsah přednášky 2 Texturování 3 Multum In Parvo 4 Modulace textury ve fixed pipeline 5 Modulace textury v shaderu 6 Multitexturování 7 Průhlednost 8 Shrnutí

Multitexturování Strana 29 / 37 Mutitexturování V OpenGL lze pracovat s více, než jednou text. jednotkou. To umožní kombinování textur na povrch objektů. Následně stačí na úrovni shaderu kombinovat hodnoty textur podle potřeby: 1 # version 130 2 uniform sampler2d texture0 ; 3 uniform sampler1d texture1 ; 4 in vec4 color ; 5 in vec2 texcoord0 ; 6 in float texcoord1 ; 7 out vec4 outcolor ; 8 9 void main ( void ) { 10 outcolor = color * texture ( texture0, texcoord0. st) 11 * texture ( texture1, texcoord1.s) 12 }

Multitexturování Strana 30 / 37 Aktivace více text. jednotek 1 // aktivace vice texturovacich jednotek 2 glactivetexture ( GL_ TEXTURE0 ); 3 glbindtexture ( GL_ TEXTURE_ 2D, m_ grasstexid ); 4 5 glactivetexture ( GL_ TEXTURE1 ); 6 glbindtexture ( GL_ TEXTURE_ 1D, m_ heighttexid ); 7 8... 9 // odeslani vice textur do shaderu 10 m_glslprogram -> senduniform (" texture0 ", 0); 11 m_glslprogram -> senduniform (" texture1 ", 1); Počet dostupných text. jednotek je dobré testovat pomocí: 1 int maxunits ; 2 glgetintegerv ( GL_ MAX_ TEXTURE_ UNITS, & maxunits );

Průhlednost Strana 31 / 37 Obsah přednášky 1 Obsah přednášky 2 Texturování 3 Multum In Parvo 4 Modulace textury ve fixed pipeline 5 Modulace textury v shaderu 6 Multitexturování 7 Průhlednost 8 Shrnutí

Kompletní seznam možností viz specifikace. Pro nás důležité: GL SRC ALPHA, GL DST ALPHA, GL ONE MINUS SRC ALPHA, GL ONE MINUS DST ALPHA Průhlednost Strana 32 / 37 Blending Blending umožňuje tvorbu průhledných povrchů. Aktivujeme pomocí: glenable(gl BLEND); Následně musíme vybrat metodu míchání původní barvy pixelu ve framebufferu s novou: glblendfunct(); void glblendfunct(glenum sf, GLenum df) Uvedené parametry představují source a destination factor. Tj. čísla mezi 0 a 1, kterými se násobí nová, resp. původní barva. Source je obvykle označována nová barva, destination hodnota již uložená v frame bufferu.

Průhlednost Strana 33 / 37 Alpha testing Někdy je vhodné zcela průhledné části objektů vypustit (díry v plotu) Ve fragment shaderu lze snadno testovat, zda daný pixel vůbec do f.b. vykreslovat: 1 # version 130 2 uniform sampler2d texture0 ; 3 in vec2 texcoord0 ; 4 out vec4 outcolor ; 5 6 int main ( void ){ 7 outcolor = texture ( texture0, texcoord0. st ); 8 if ( outcolor.a <0.1){ 9 discard ; 10 } 11 }

Průhlednost Strana 34 / 37 Neúplná průhlednost

Shrnutí Strana 35 / 37 Obsah přednášky 1 Obsah přednášky 2 Texturování 3 Multum In Parvo 4 Modulace textury ve fixed pipeline 5 Modulace textury v shaderu 6 Multitexturování 7 Průhlednost 8 Shrnutí

Shrnutí Strana 36 / 37 Rady glhint(gl PERSPECTIVE CORRECTION HINT, GL NICEST); nastavuje kvalitu interpolace (jiné volby GL DONT CARE a GL FASTEST)

Shrnutí Strana 37 / 37 Kontrolní otázky Co je to texturovací objekt? Pokud má textura velikost 128x128, jaké budou velikosti jejích mipmap? Jaký je výchozí mód přepočtu velikosti při aplikaci textur?