Programování grafiky ÚVOD - cvut.cz · 2004 - OpenGL 2.0 - programovatelnost pomocí tzv....
Transcript of Programování grafiky ÚVOD - cvut.cz · 2004 - OpenGL 2.0 - programovatelnost pomocí tzv....
![Page 1: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/1.jpg)
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
![Page 2: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/2.jpg)
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
![Page 3: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/3.jpg)
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/
PGR
![Page 4: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/4.jpg)
Ukázky semestrálních prací
PGR
![Page 5: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/5.jpg)
Dělení počítačové grafiky dle účelu [Karlík]
2D grafika • DTP – noviny, časopisy• Grafická uživatelská rozhraní- GUI• Výkresová dokumentace
3D grafika [Karlík]• Vizualizace• Filmová grafika• Realtime grafika - hry• …
PGR http://www.cs.utah.edu/npr/
![Page 6: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/6.jpg)
Vizualizace
Reklama, vizualizace produktů, architektury – jediný obrázek Fotorealismus x photoshop Dlouhý čas na obrázek (dny až týdny)
PGR
[Karlík]
![Page 7: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/7.jpg)
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]
![Page 8: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/8.jpg)
Realtime grafika
Malý počet polygonů (hrubá dutá slupka tělesa) Rasterizace, 30+ FPS, ~20ms na obrázek GPU Fake
PGR
[Karlík]
![Page 9: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/9.jpg)
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
![Page 10: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/10.jpg)
Geometrické modelování x zobrazování
Modelování – často komplexní plochyZobrazování – trojúhelníky ve 3D (teselace)
PGR
![Page 11: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/11.jpg)
Textury
PGR
![Page 12: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/12.jpg)
Základ syntézy obrazu
PGR
![Page 13: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/13.jpg)
Problém viditelnosti
PGR
![Page 14: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/14.jpg)
Negeometrické vlastnosti objektů
PGR
![Page 15: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/15.jpg)
Různá kvalita syntetizovaného obrazu(obrázky fy PIXAR)
Polygonální model – drátové zobrazení Polygonální model –drátové zobrazení s viditelností
PGR
![Page 16: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/16.jpg)
Různá kvalita syntetizovaného obrazu(obrázky fy PIXAR) II
Polygonální model – konstantní stínování Polygonální model – interpolované stínování
Mapování textur Stíny
PGR
![Page 17: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/17.jpg)
Vztah počítačové grafiky a vidění
Vymezení pojmu
Počítačová grafikatransformace dat z objektového (3D) do obrazového prostoru (2D)
Počítačová geometriezpracování geometrických a topologických dat v objektovém prostoru
Zpracování obrazuZpracování nestrukturovaných rastrových obrázků (zlepšování kvality obrazu, vyhledávání obrysů, ..)
Počítačové viděníNa základě analýzy obrazu se hledají objekty a vztahy mezi objektyv objektovém prostoru.
obrazový prostorobjektový
prostor
zpracování obrazu
počítačová grafika
počítačové vidění
počítačová geometrie
PGR
![Page 18: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/18.jpg)
Velmi hrubý pohled na grafický HW
PGR
HOST
CPUMEM
Grafika
GPUVIDEOMEM
Monitor
CPU dodá dataGrafika je zpracuje a uloží do paměti obrazu
Z paměti obrazu se posílají do monitoru
![Page 19: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/19.jpg)
Host
Připraví data • balíky vrcholů + konektivita• textury
Připraví programy pro GPU -„shadery“ Pošle vše na grafickou kartu Nastaví stav OpenGL Posílá příkazy – kresli
Obsluhuje interakci s uživatelem (klávesnice, myš)
Řídí animace, …PGR
HOST
CPUMEM
C/C++OpenGL
![Page 20: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/20.jpg)
Grafika
PGR
Grafika
GPUVIDEOMEM
Přijímá data a nastavení od hosta• Ukládá je do své grafické paměti• Je to hierarchie pamětí
Videopaměť – cache L1, L2 – registry …
60x za sekundu • Smaže obrazovou paměť • „vykreslí obraz“
Pracuje paralelně• Po vrcholech, primitivech, fragmentech• Spouští na ně shadery
GLSL
![Page 21: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/21.jpg)
Obrazová paměť
PGR
Grafika
GPUVIDEOMEM
Obrazová paměť = framebuffer Ukládá vykreslený obraz
Má více vrstev: Barvu, hloubku, … Čte se z ní obraz do monitoru
- 60x za sekundu
Problémy • propustnosti (bandwidth), • současného čtení, • latence paměti (=>cache),…
![Page 22: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/22.jpg)
Problém propustnosti sběrnice
PGR
HOST
CPUMEM
Grafika
GPUVIDEOMEM
Monitor
Omezený datový tok~8 GB/s
(PCI Express v 2.0, 16 linek)
Video~0,3 GB/s
(1920x1080, 60FPS)
Dat ke generování obrazu je mnohem více:Geometrie (300 mil. tr., 50FPS => 10.2 GB/s , Textury,…
=> Maximum dat předem na grafickou kartu a na ní grafické výpočty
![Page 23: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/23.jpg)
Typické zřetězení grafických operací –graphics pipeline
PGR [http://open.gl/drawing]
![Page 24: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/24.jpg)
Typické zřetězení grafických operací –graphics pipeline
PrimitiveAssembly
and Rasterization
FragmentProcessing
Fragment operations
VertexData
PixelData
Vertexprocessing
TextureStore
PGR
![Page 25: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/25.jpg)
Architektura grafického systému
Grafický HW se vyvíjel „od konce“ ~1991 První byl HW rasterizátor (pixelů je nejvíc) 1999 Poté geometrie (vertex processing)
– HW transform & lighting (T&L) - GeForce 256– fix-pipeline byla omezením
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
![Page 26: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/26.jpg)
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
![Page 27: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/27.jpg)
Grafická rozhraní, knihovna OpenGL, GLUT
![Page 28: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/28.jpg)
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, …
PGR
![Page 29: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/29.jpg)
Co je OpenGL?
minimální knihovna geometrická primitiva
(body, úsečky, trojúhelníky, pásy troj.…) obrazová primitiva
(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
![Page 30: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/30.jpg)
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
![Page 31: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/31.jpg)
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
![Page 32: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/32.jpg)
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,…)
![Page 33: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/33.jpg)
Knihovny kolem OpenGL (3)
Správa oken / GUI GLUT FreeGLUT SDL …
PGR
![Page 34: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/34.jpg)
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í
Podrobněji zpracováno na:http://en.wikipedia.org/wiki/OpenGL
PGR
![Page 35: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/35.jpg)
OpenGL 3.1, březen 2009
PGR
FragmentShader Blending
VertexData
PixelData
VertexShader
TextureStore
PrimitiveSetup and
Rasterization
![Page 36: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/36.jpg)
OpenGL 3.2, srpen 2009
PGR
FragmentShader Blending
VertexData
PixelData
VertexShader
TextureStore
GeometryShader
PrimitiveSetup and Rasterizati
on
![Page 37: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/37.jpg)
OpenGL 4.1, březen 2010
PGR
PrimitiveSetup and
Rasterization
FragmentShader Blending
VertexData
PixelData
VertexShader
TextureStore
GeometryShader
TessellationControlShader
TessellationEvaluation
Shader
![Page 38: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/38.jpg)
Kontext a profily OpenGL
Profily (context profiles)• Od verze > 3.0 • Určují verzi OpenGL a množinu použitelných příkazů• Dva typy profilu „core“ a „compatible“
PGR
Context Type Profile Description
Fullcore
Všechny funkce dané verze OpenGL (i ty, označené jako zavržené, ale bez zrušených funkcí)
compatible Všechny funkce ze všech předchozích verzí OpenGL (full v OpenGL 3.0)
Forward Compatible
core Pouze nezavržené funkce dané verze OpenGL
compatible Není podporován
![Page 39: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/39.jpg)
Syntaxe příkazů v OpenGL
Konstanty („Constants“) Velká písmena, prefix GL_ Například: GL_COLOR_BUFFER_BIT, GL_DEPTH_TEST
Datové typy Malá písmena s prefixem GL Například: GLfloat, GLbyte
Volání procedur a funkcí: Malá písmena, první velké, prefix gl Například: glCreateProgram()
gl<command name>[<num> <type> [v]]( parameter(s) );
př. glUniform1f( index, 5.8f);
double attrib_array[3] = {1.0, 5.0, 6.0};glUniform3fv (index, attrib_array);
prefix glPočet parametrů
- celé číslo
suffix
Datový typparametrů
(další slajd)Parametry
oddělené čárkou
“v” pokud je parametrem ukazatel do pole
PGR
![Page 40: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/40.jpg)
Datové typy parametrů příkazů
Suffix Datový typ Datový typ v ANSI C OpenGL definice
b 8bit integer signed char GLbytes 16bit integer short GLshorti 32bit integer long GLint, GLsizei
f 32bit float float GLfloat, GLclampfd 64bit float double GLdouble, GLclampd
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
![Page 41: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/41.jpg)
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
![Page 42: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/42.jpg)
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
![Page 43: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/43.jpg)
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
![Page 44: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/44.jpg)
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
![Page 45: 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](https://reader031.fdocuments.net/reader031/viewer/2022012916/5fc264950cc3146c330fe2e1/html5/thumbnails/45.jpg)
OpenGL odkazy
http://www.opengl.org/dokumentace, odkazy na programy,…
http://www.khronos.org/vývoj, schvalování implementací (OpenGL compliant)
http://www.sgi.com/licence pro HW
Ondřej Karlík - Corona renderer: Making of production-ready renderer in 3dsMAX, Přednáška, Speciální seminář z počítačové grafiky, 20. 10. 2011
PGR