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

Podobné dokumenty
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. Vertex Buffer Objects

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

Připravil: David Procházka. Shadery

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

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

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

Programování grafiky ÚVOD

Programování grafiky ÚVOD

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

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

Android OpenGL. Práce s texturami

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

Android OpenGL. Pokročilé shadery

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

Co je grafický akcelerátor

Programování v C++ 1, 5. cvičení

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

Programovatelné shadery a jazyk Cg. Petr Kmoch

Nvidia CUDA Paralelní programování na GPU

Textury. Petr Felkel, Jaroslav Sloup a Vlastimil Havran

Surfels: Surface Elements as Rendering Primitives

Pokročilé architektury počítačů

Základy programování shaderů v OpenGL část 1 program

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

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

<surface name="pozadi" file="obrazky/pozadi/pozadi.png"/> ****************************************************************************

Reflections, refractions, interreflections

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

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Programování shaderů GLSL

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

Základy programování (IZP)

GIS Geografické informační systémy

Základy programování (IZP)

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Programování v C++ 3, 3. cvičení

Webové služby a XML. Obsah přednášky. Co jsou to webové služby. Co jsou to webové služby. Webové služby a XML

Architektura grafických ip pro Xbox 360 a PS3

Programování v C++ 1, 6. cvičení

PREPROCESOR POKRAČOVÁNÍ

Teoretické minimum z PJV

BAKALÁŘSKÁ PRÁCE. Trojrozměrná závodní hra s podporou hraní po síti David Konečný

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

Rád bych poděkoval Ing. Davidu Ambrožovi za jeho cenné rady a připomínky a za ochotu po celou dobu vedení mé diplomové práce.

Rastrová reprezentace

Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

GPGPU. Jan Faigl. Gerstnerova Laboratoř pro inteligentní rozhodování a řízení České vysoké učení technické v Praze

KATEDRA INFORMATIKY. Demonstrace OpenGL v prostředí LispWorks

XNA Game Studio 3.1. Tomáš Herceg Microsoft Most Valuable Professional Microsoft Student Partner

Jazyk C# a platforma.net

Úvod do programovacích jazyků (Java)

Masivně paralelní zpracování obrazu v prostředí systému VisionLab Liberec Roman Cagaš, rc@mii.cz

GPU RAYTRACER PRO OSG

Západočeská univerzita v Plzni Fakulta aplikovaných věd Katedra informatiky a výpočetní techniky. haptického pera

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

Programování v Javě I. Únor 2009





Michal Krátký. Úvod do programovacích jazyků (Java), 2006/2007

Lubomír Dobrovolský, DOB113

Android OpenGL. Vykreslování terénu

Programování v Javě I. Leden 2008

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

Dynamické datové struktury I.

3D ANIMACE POSTAVY V POČÍTAČOVÉ GRAFICE ANIMATION OF 3D CHARACTER IN COMPUTER GRAPHICS


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

PB161 Programování v jazyce C++ Přednáška 9

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

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

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

GPU A CUDA HISTORIE GPU CO JE GPGPU? NVIDIA CUDA

RADIOSITA NA GPU FAKULTA INFORMAČNÍCH TECHNOLOGIÍ BRNO UNIVERSITY OF TECHNOLOGY

Úvod Třídy Rozhraní Pole Konec. Programování v C# Hodnotové datové typy, řídící struktury. Petr Vaněček 1 / 39

FAKULTA INFORMAČNÍCH TECHNOLOGIÍ

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

PB161 Programování v jazyce C++ Přednáška 5

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

GIS Geografické informační systémy

Řešíme úlohu zpracování velkého množství dat. Data jsou symetrická, úloha je dobře paralelizovatelná

GPU a CUDA. Historie GPU. Co je GPGPU? Nvidia CUDA

Vývoj počítačové grafiky

Řešíme úlohu zpracování velkého množství dat. Data jsou symetrická, úloha je dobře paralelizovatelná. Propaganda výrobců grafických karet:

Programování v C++ 1, 14. cvičení

Programování v C++ 2, 4. cvičení

Úvod do GPGPU J. Sloup, I. Šimeček

Hardware pro počítačovou grafiku NPGR019

SOUBORY, VSTUPY A VÝSTUPY POKRAČOVÁNÍ

PB161 Programování v jazyce C++ Přednáška 10

Reprezentace 3D scény

TECHNICKÁ UNIVERZITA V LIBERCI FAKULTA UMĚNÍ A ARCHITEKTURY. Studijní program: B8206 Výtvarná umění. Obor: Vizuální komunikace BAKALÁŘSKÁ PRÁCE

STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST

PB161 Programování v jazyce C++ Přednáška 9

-STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST

PB071 Programování v jazyce C Jaro 2015

Zobrazování terénů pomocí GPU

Transkript:

Rendering Seminář 1. Tomáš Milet, Tomáš Starka Ústav počítačové grafiky a multimédíı Fakulta informačních technologíı Vysoké učení technické Brno Rendering Seminář 1. 1 / 28

OpenGL OpenGL je architektura klient server Aplikace běží na CPU a využívá OpenGL pro přístup k GPU Rendering Seminář 1. 2 / 28

Reprezentace scény Povrchová reprezentace - vektorová data. Rendering Seminář 1. 3 / 28

Atlas textur http://www.scriptspot.com/3ds-max/scripts/ texture-atlas-generator Rendering Seminář 1. 4 / 28

Vy sledek Rendering Semina r 1. 5 / 28

Reprezentace scény OpenGL pracuje s vrcholy - Vertexy Jeden Vertex může obsahovat několik různých atributů (pozice, barva, čas, hmotnost, texturovací koordináty,...) Několik Vertexů tvoří jedno primitivum - bod, úsečka, trojúhelník,... Jeden Vertex obsahuje 5 atributu 1. atribut je složen ze 3 složek... Vertex Buffer Object (VBO) obsahuje seznam Vertexu Rendering Seminář 1. 6 / 28

VBO příklad float Data[]={0,0};//data, ktera budeme vkladat do bufferu GLuint VBO;//identifikator VBO glgenbuffers(1,&vbo);//vygenerujeme si identifikator glbindbuffer(gl_array_buffer,vbo);//aktivujeme a vytvorime VBO //alokujeme buffer a nahrajeme do nej data glbufferdata(gl_array_buffer,sizeof(data),data,gl_static_draw); Změna dat ve VBO. float*ptr;//ukazatel na data ptr=glmapbuffer(gl_array_buffer,gl_read_write);//ziskame jej ptr[0]=0.5;//nastavime hodnotu prvniho prvku glunmapbuffer(gl_array_buffer);//odmapujeme buffer Nebo pomoci glbuffersubdata. glbuffersubdata(gl_array_buffer, sizeof(float),//nahrajeme nova s offsetem jeden float sizeof(float),//nahrajeme jen jeden float Data);//data Rendering Seminář 1. 7 / 28

VAO - použití glvertexattribbinding(gluint attribindex,gluint bindingindex); Vertex Shader layout(location = 0) vec4 position; layout(location = 2)ivec2 gridid; layout(location = 7)float velocity; void main(){... } Vertex Array Object... States Buffer, Offset, Stride,Type, Size,... Buffer, Offset, Stride,Type, Size,...... Buffer, Offset, Stride,Type, Size,... glvertexattribformat(glunit bindingindex,glint size,glenum type, GLboolean normalized, GLuint relativeoffset); glbindvertexbuffer(gluint bindingindex, GLuint buffer, GLintptr offset, GLsizei stride); Rendering Seminář 1. 8 / 28

VAO - příklad použití Aplikace - inicializace glgenvertexarrays(1,&vao);//vygenerovani jmena VAO glbindvertexarray(vao);//aktivovani VAO //nyni nastavime buffery a atributy glgenbuffers(1,&vbo); glbindbuffer(gl_array_buffer,vbo); glbufferdata(gl_array_buffer,sizeof(data),data,gl_static_draw); glgenbuffers(1,&ebo); glbindbuffer(gl_element_array_buffer,ebo); glbufferdata(gl_element_array_buffer,sizeof(index),index,gl_static_draw); glbindbuffer(gl_array_buffer,vbo); glenablevertexattribarray(vpos); glvertexattribpointer(vpos,2,gl_float,gl_false,sizeof(float)*5, (GLvoid*)(sizeof(float)*0)); glenablevertexattribarray(vcol); glvertexattribpointer(vcol,3,gl_float,gl_false,sizeof(float)*5, (GLvoid*)(sizeof(float)*2)); glbindvertexarray(0);//deaktivujeme VAO po tomto bode uz jej neovlivnujeme Rendering Seminář 1. 9 / 28

Nahrání rastrových dat - Textur Textura je rastrový obrázek, který se namapuje na geometrii. V OpenGL je to objekt. //vytvoreni jmena textury glgentextures(1,&tcolor);//vygenerovani jmeno textury pro barvu glbindtexture(gl_texture_2d,tcolor);//navazeme a vytvorime texturu //nastaveni parametru textury gltexparameteri(gl_texture_2d,gl_texture_mag_filter,gl_nearest); gltexparameteri(gl_texture_2d,gl_texture_min_filter,gl_nearest); //alokace a nahrani dat na GPU glteximage2d(gl_texture_2d,0,//alokujeme misto GL_RGBA32F,//format ulozeni na GPU (4*float pro pixel) WIDTH,HEIGHT,0,GL_RGBA,//format ulozeni dan na CPU GL_UNSIGNED_BYTE,//typ dat na CPU Data);//data na CPU Rendering Seminář 1. 10 / 28

Shader - vytvoření shaderu //rezervace id shaderu GLuint shader = glcreateshader(type); //pripojeni zdrojaku k shaderu glshadersource(shader,1,&string,null); //kompilace zdrojaku glcompileshader(shader); Rendering Seminář 1. 11 / 28

Shader Program - vytvoření programu GLuint program = glcreateprogram(); glattachshader(program,shader);... gllinkprogram(program); Rendering Seminář 1. 12 / 28

Vykreslení gluseprogram(program); glbindtextureunit(unit,texture); gluniform4fv(...) glbindvertexarray(vao);//aktivujeme VAO gldrawelements(gl_triangles,6,gl_unsigned_int,null); glbindvertexarray(0);//deaktivujeme VAO Rendering Seminář 1. 13 / 28

Shader Object Shader je jedna část shader programu Pro shader je potřeba rezervovat id, nahrát do něj zdrojové soubory a zkompilovat Shadery je možné sdílet mezi vícero shader programy 6 typu shaderu pro každou programovatelnou část Rendering Seminář 1. 14 / 28

Shader - vytvoření shaderu GLint getshaderparam(gluint id,glenum pname){ GLint params; glgetshaderiv(id,pname,&params);//ziskani parametru shaderu return params; } GLuint createshader(gluint type,std::string source){ GLuint id = glcreateshader(type);//rezervace id shaderu const char*string=source.c_str(); glshadersource(id,1,&string,null);//pripojeni zdrojaku k shaderu glcompileshader(id);//kompilace zdrojaku GLboolean compilestatus = getshaderparam(id,gl_compile_status); if(!compilestatus){ GLuint length = getshaderparam(id,gl_info_log_length); if(length){ std::string info(length, ); glgetshaderinfolog(id,length,null,(glchar*)info.c_str());//ziskani logu std::cerr<<info<<std::endl; } gldeleteshader(id);//uvolneni id shaderu id = 0; } return id; } Rendering Seminář 1. 15 / 28

Shader Program Object Shader program reprezentuje kolekci shaderů Pro program je potřeba rezervovat id, připojit shadery a slinkovat Ne všechny části pipeline musí být přítomny Rendering Seminář 1. 16 / 28

Shader Program - vytvoření programu template<typename...> void attachshaders(gluint){} template<typename... ARGS> void attachshaders(gluint program,gluint shader,args...args){ glattachshader(program,shader); attachshaders(program,args...); } template<typename... ARGS> GLuint createprogram(args...shaders){ GLuint id = glcreateprogram(); attachshaders(id,shaders...); gllinkprogram(id); glvalidateprogram(id); GLboolean linkstatus; glgetprogramiv(id,gl_link_status,(glint*)&linkstatus); if(!linkstatus){ GLuint length; glgetprogramiv(id,gl_info_log_length,(glint*)&length); if(length){ std::string info(length, ); glgetprograminfolog(id,length,null,(glchar*)info.c_str());//ziskani logu std::cerr<<info<<std::endl; } gldeleteprogram(id); id=0; } return id; } Rendering Seminář 1. 17 / 28

Zdroje informací https://www.opengl.org/sdk/docs/man/ www.khronos.org/files/ opengl45-quick-reference-card.pdf http://www.opengl.org/documentation/glsl/ http://www.geeks3d.com/20140321/ opengl-approaching-zero-driver-overhead/ Rendering Seminář 1. 18 / 28

Konec Děkuji za pozornost Otázky? Rendering Seminář 1. 19 / 28