Programování grafiky ÚVOD Petr Felkel Katedra počítačové grafiky a interakce, ČVUT FEL místnost KN:E-413 (Karlovo náměstí, budova E) E-mail: [email protected]S použitím materiálů Bohuslava Hudce, Jaroslava Sloupa, Ondřeje Karlíka a Vlastimila Havrana Poslední změna: 3.3.2016
45
Embed
Programování grafiky ÚVOD - cvut.cz · 2004 - OpenGL 2.0 - programovatelnost pomocí tzv. „shaders“ 2008 - OpenGL 3.0 - zavedení dopředné kompatibility a možnosti zrušit
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Programování grafikyÚVODPetr Felkel
Katedra počítačové grafiky a interakce, ČVUT FELmístnost KN:E-413 (Karlovo náměstí, budova E)
E-mail: [email protected] použitím materiálů Bohuslava Hudce, Jaroslava Sloupa,
Ondřeje Karlíka a Vlastimila Havrana
Poslední změna: 3.3.2016
Cíle předmětu programování grafiky (PGR)
Porozumět základům počítačové grafiky
Umět naprogramovat interaktivní aplikace v OpenGL• Nezávislé na platformě
(PC / Mac / vestavné systémy / web,…)
PGR
Organizace
Přednášky• Teorie počítačové grafiky – základy pro grafické aplikace
běžící v reálném čase (real time)• Syntéza obrazu s použitím OpenGL od verze 3.1• Demonstrační příklady a kódy jednotlivých technik
Cvičení• Detaily o OpenGL a GLSL• Jednoduché úlohy• Semestrální projekt (program, web, prezentace)
Podrobnosti na webu předmětuhttps://cent.felk.cvut.cz/courses/PGR/
Reklama, vizualizace produktů, architektury – jediný obrázek Fotorealismus x photoshop Dlouhý čas na obrázek (dny až týdny)
PGR
[Karlík]
Filmová grafika
Obrovský rozsah dat (modely, textury,…) 24 obrázků / s, dlouhý výpočetní čas na obrázek (hodiny až dny) Umělecká kontrola nad výsledkem (ne vždy fotorealismus) RenderMan + studia vyvíjejí vlastní SW
PGR
[Karlík]
Realtime grafika
Malý počet polygonů (hrubá dutá slupka tělesa) Rasterizace, 30+ FPS, ~20ms na obrázek GPU Fake
PGR
[Karlík]
Obrázek• Omezené rozlišení
(Daný počet pixelů)• Zubaté okraje, artefakty• Nutno vyhlazovat
Obrázek, pixely a antialiasing
bez vyhlazování s vyhlazováním
PGR
Geometrické modelování x zobrazování
Modelování – často komplexní plochyZobrazování – trojúhelníky ve 3D (teselace)
2000 shadery => GPU lze programovat– dataflow architektura – výpočet se spustí, když dorazí data– na rozdíl od CPU, které je sériové, řízeno programem– data nevědí nic o sousedech
2006 unifikované procesory (streaming processor) ~2007 Použití GPU pro negrafické výpočty GPGPU
CUDA, CTM, OpenCL,…PGR
Hrubé schéma OpenGL se shadery
PrimitiveAssembly
and Rasterization
FragmentShader
Fragment operations
VertexData
PixelData
VertexShader
TextureStore
Každá aplikace definuje dva programy (tzv. shadery): vertex shader (VS)
program zapsaný v jazyku GLSL zpracovává každý vrchol
fragment shader (FS)program zapsaný v GLSL zpracovává tzv. fragment
OpenGL verze 3.1
Grafická rozhraní, knihovna OpenGL, GLUT
Co je OpenGL?
Grafická knihovna (Open Graphics Library)
• API = SW rozhraní k rastrovému grafickému HW• nezávislé na OS a na použitém HW• poskytuje nástroje na vykreslení 3D dat a textur do 2D• nestará se o okna, události, formáty souborů,…
• Odnože OpenGL WebGL – pro web OpenGL ES – pro mobily, navigace, …
(rastrové obrázky) – textury předává balíky dat grafické kartě (GPU)
• vrcholy primitiv - základem všech primitiv je bod • textury • programy (shadery)• zapíná a vypíná jednotlivé funkce
PGR
Výhody OpenGL
Jednoduchost Konzistentní implementace & design Rozsáhlá dokumentace Přenositelnost Další rozvoj je dán konsorciem firem Otevřenost a rozšiřitelnost!!
• výrobci HW mohou rozšiřovat funkcionalitu sami(viz GL Extensions)
• např. v Direct3D je všechno vydáno na „milost a nemilost“ Microsoftu, který jediný spravuje a aktualizuje Direct3D
PGR
Knihovny kolem OpenGL (1)
OpenGL
aplikační program
Aplikace závislá na operačním systému
Operační systém X, Win32, Mac O/S
ovladače
Courtesy Siggraph2004 Course 29
hardware (periferie, GPU,…)
PGR
Knihovny kolem OpenGL (2)
Správa oken, GUI
OpenGLOperační systém X, Win32, Mac O/S
ovladače
aplikační program
Courtesy Siggraph2004 Course 29
Aplikace nezávislá na operačním systému
PGR
hardware (periferie, GPU,…)
Knihovny kolem OpenGL (3)
Správa oken / GUI GLUT FreeGLUT SDL …
PGR
Evoluce OpenGL
1994 - OpenGL 1.0 - fixní proudové zpracování (“fixed pipeline”) 2004 - OpenGL 2.0 - programovatelnost pomocí tzv. „shaders“ 2008 - OpenGL 3.0 - zavedení dopředné kompatibility a možnosti
zrušit staré funkce 2009 - OpenGL 3.1 - kompletně odstraněno fixní proudové
zpracování, nutnost použití „shaders“ 2010 - OpenGL 4.0 - řízení teselace přímo na GPU, volání funkcí
(podprogramů), externí API, atd. 2014 - OpenGL 4.5 - podpora vícevláknových aplikací, robustnost,
emulace DX11, atd. 2016 – Vulkan 1.0 – portabilita desktopy - mobilní zařízení
ub 8bit unsigned int unsigned char GLubyte, GLbooleanus 16bit unsigned int unsigned short GLushortui 32bit unsigned int unsigned long GLunit, GLenum, GLbitfield
i64 64bit integer GLint64
ui64 64bit unsigned int
(long long, _int64)
GLunit64
PGR
OpenGL jako automat (state machine)
OpenGL je automat – v každém okamžiku má definován svůj vnitřní stav – proto ne stavový automat !!!
• Vnitřní stav je definován hodnotami vnitřních proměnných• Pokud je nezměníme, mají své iniciální hodnoty • Tyto proměnné lze nastavovat a ptát se na jejich hodnotu• Např. zapnutí hloubkového testu
PGR
Nastavení a získání hodnoty stavové proměnné
Nastavení stavu – logická hodnota glEnable(GL_MULTISAMPLE);glDisable(GL_MULTISAMPLE);
Získání stavubool glIsEnabled(GL_CULL_FACE);
Získání stavu jedné či více hodnot:glGetBooleanv(GLenum pname, GLboolean * params);glGetFloatv( GLenum pname, GLfloat * params);glGetIntegerv(GLenum pname, GLint * params);glGetDoublev( GLenum pname, GLdouble * params);
PGR
Zpracování chyb v OpenGL
OpenGL detekuje jen minimum z možných chyb Kontrola všeho by byla příliš časově náročná Zapamatuje si první chybu, která nastala Každá chyba má svůj vlastní číselný kód a jemu přiřazenou
symbolickou konstantu:• GL_NO_ERROR no problem, OK• GL_INVALID_ENUM enum value out of range.• GL_INVALID_VALUE numeric argument is out of range• GL_INVALID_OPERATION illegal operation in current state• GL_INVALID_FRAMEBUFFER_OPERATION
offending command for current state• GL_OUT_OF_MEMORY not enough memory to execute
the command
GLenum glGetError(void);
PGR
Zpracování chyb v OpenGL
OpenGL Debug extension Od OpenGL 4.3. v jádře Mechanismus nahrazující glGetError() Zavádí dva přístupy
• Frontu ladících zpráv (message log)• Mechanizmus zpětných volání pro vybrané chyby (callbacks)
PGR
OpenGL odkazy
http://www.opengl.org/dokumentace, odkazy na programy,…