Programování grafiky ÚVOD

Podobné dokumenty
Programování grafiky ÚVOD

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

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

Co je grafický akcelerátor

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

Nvidia CUDA Paralelní programování na GPU

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

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

Grafické karty. Autor: Kulhánek Zdeněk

GPU A CUDA HISTORIE GPU CO JE GPGPU? NVIDIA CUDA

Počítačová grafika 2 (POGR2)

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

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

Real Time programování v LabView. Ing. Martin Bušek, Ph.D.

Přednáška 1. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

Matematika v programovacích

Počítačová grafika 1 (POGR 1)

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

Přednáška. Vstup/Výstup. Katedra počítačových systémů FIT, České vysoké učení technické v Praze Jan Trdlička, 2012

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

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

Zobrazovací jednotky a monitory

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

Úvod do problematiky. Význam počítačové grafiky. Trochu z historie. Využití počítačové grafiky

AGP - Accelerated Graphics Port

ADT/ADS = abstraktní datové typy / struktury

C2115 Praktický úvod do superpočítání

PŘEDSTAVENÍ GRAFICKÉHO PROCESORU NVIDIA G200

DUM č. 14 v sadě. 31. Inf-7 Technické vybavení počítačů

Zobrazování a osvětlování

Úvod do problematiky. Význam počítačové grafiky. Trochu z historie. Využití počítačové grafiky

Nvidia CUDA Paralelní programování na GPU

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

GPGPU Aplikace GPGPU. Obecné výpočty na grafických procesorech. Jan Vacata

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

G R A F I C K É K A R T Y

Architektura grafických ip pro Xbox 360 a PS3

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

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Ing. Igor Kopetschke TUL, NTI

Profilová část maturitní zkoušky 2017/2018

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

11. Přehled prog. jazyků

udspt10r JEDNOTKA IMPLEMENTUJÍCÍ DISPLEJ VZDÁLENÉ VARIANTY TERMINÁLU TERM10 Příručka uživatele a programátora

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

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

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

Zobrazování terénu. Abstrakt. 1. Úvod. 2. Vykreslování terénu

Maturitní otázky z předmětu PROGRAMOVÁNÍ

Přednášky o výpočetní technice. Hardware teoreticky. Adam Dominec 2010

Reprezentace dat v informačních systémech. Jaroslav Šmarda

VYUŽITÍ KNIHOVNY SWING PROGRAMOVACÍHO JAZYKU JAVA PŘI TVORBĚ UŽIVATELSKÉHO ROZHRANÍ SYSTÉMU "HOST PC - TARGET PC" PRO ŘÍZENÍ POLOVODIČOVÝCH MĚNIČŮ

Grafické karty s podporou DirectX 11 Quynh Trang Dao Dao007

Autodesk AutoCAD Civil 3D

Základy jazyka C. Základy programování 1 Martin Kauer (Tomáš Kühr)

Osobní počítač. Zpracoval: ict Aktualizace:

Zpracování obrazu v FPGA. Leoš Maršálek ATEsystem s.r.o.

OBRAZU FAKULTA INFORMAČNÍCH TECHNOLOGIÍ BRNO UNIVERSITY OF TECHNOLOGY FACULTY OF INFORMATION TECHNOLOGY DEPARTMENT OF COMPUTER GRAPHICS AND MULTIMEDIA

Pokročilé architektury počítačů

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

Procesy a vlákna (Processes and Threads)

Pokročilé architektury počítačů

Algoritmizace a programování

Maturitní témata pro 1.KŠPA Kladno, s.r.o. Výpočetní technika

Virtuální přístroje. Matlab a Instrument Control Toolbox. J.Tomek, A.Platil

Windows a real-time. Windows Embedded

Srovnání alternativních implementací DirectX

Algoritmizace a programování

Prostředí pro výuku vývoje PCI ovladačů do operačního systému GNU/Linux

Strojový kód k d a asembler procesoru MIPS SPIM. MIPS - prostředí NMS NMS. 32 ks 32bitových registrů ( adresa registru = 5 bitů).

Úvod do Linuxu. SŠSI Tábor 1

SYSTÉMY NAČIPU MI-SOC

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

Připravil: David Procházka. Shadery

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

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

Přehled paralelních architektur. Dělení paralelních architektur Flynnova taxonomie Komunikační modely paralelních architektur

Profilová část maturitní zkoušky 2013/2014

Počítačová geometrie I

SEZNAM A VYSVĚTLENÍ VYBRANÝCH POJMŮ TÝKAJÍCÍCH SE PARAMETRŮ ZOBRAZOVACÍCH JEDNOTEK ELEKTRONICKÝCH SYSTÉMŮ

Obecné výpočty na GPU v jazyce CUDA. Jiří Filipovič

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

- kvalitní dokumentace k SW je vyžadovaným STANDARDEM. vzájemná provázanost SW (IS) ve velkých společnostech. aktuální přehledná srozumitelná

Opakování programování

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Bitové operátory a bitová pole. Úvod do programování 2 Tomáš Kühr

Operační systémy. Tomáš Hudec.

Controlweb. Úvod. Specifikace systému

Programovatelné automaty SIMATIC S7 a S5

monolitická vrstvená virtuální počítač / stroj modulární struktura Klient server struktura

Pár odpovědí jsem nenašla nikde, a tak jsem je logicky odvodila, a nebo jsem ponechala odpověď z pefky, proto je možné, že někde bude chyba.

Jan Nekvapil ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická

HW počítače co se nalézá uvnitř počítačové skříně

Analýza a Návrh. Analýza

Pohled do nitra mikroprocesoru Josef Horálek

Výpočetní technika. PRACOVNÍ LIST č. 7. Ing. Luděk Richter

Paralení programování pro vícejádrové stroje s použitím OpenMP. B4B36PDV Paralelní a distribuované výpočty

Autodesk AutoCAD 2018

Operační systémy. Jednoduché stránkování. Virtuální paměť. Příklad: jednoduché stránkování. Virtuální paměť se stránkování. Memory Management Unit

VÝPOČETNÍ TECHNIKA OBOR: EKONOMIKA A PODNIKÁNÍ ZAMĚŘENÍ: PODNIKÁNÍ FORMA: DENNÍ STUDIUM

Transkript:

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: felkel@fel.cvut.cz S použitím materiálů Bohuslava Hudce, Jaroslava Sloupa, Ondřeje Karlíka a Vlastimila Havrana Poslední změna: 6.10.2015

Cíle předmětu programování grafiky () 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, )

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ětu https://edux.fit.cvut.cz/courses/bi-/start

Ukázky semestrálních prací

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 http://www.cs.utah.edu/npr/

Vizualizace Reklama, vizualizace produktů, architektury jediný obrázek Fotorealismus x photoshop Dlouhý čas na obrázek (dny až týdny) [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 fototealismus) RenderMan + studia vyvíjejí vlastní SW [Karlík]

Realtime grafika Malý počet polygonů (hrubá dutá slupka tělesa) Rasterizace, 30+ FPS, ~20ms na obrázek GPU Fake [Karlík]

Vztah počítačové grafiky a vidění Vymezení pojmu počítačová grafika počítačová geometrie objektový prostor počítačové vidění obrazový prostor zpracování obrazu Počítačová grafika transformace dat z objektového (3D) do obrazového prostoru (2D) Počítačová geometrie zpracování a geometrických a topologických dat v objektovém prostoru Zpracování obrazu Zpracová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 objekty v objektovém prostoru.

Oblasti počítačové grafiky podrobně

Velmi hrubý pohled na grafický HW HOST Grafika Monitor CPU MEM GPU VIDEOMEM CPU dodá data Grafika je zpracuje a uloží do paměti obrazu Z paměti obrazu se posílají do monitoru

Velmi hrubý pohled na grafický HW CPU Grafika dodává data (balíky vrcholů + konektivita) smaže obrazovou paměť zpracuje data a generuje fragmenty některé fragmenty se stanou pixely (60x za sekundu) Obrazová paměť ukládá pixely je zároveň čtena modulátorem na monitor (60x za sekundu) Problémy propustnosti (bandwidth), současného čtení, latence paměti (=>cache),

Velmi hrubý pohled na grafický HW HOST Grafika Monitor CPU MEM GPU VIDEOMEM 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

Typické zřetězení grafických operací graphics pipeline [http://open.gl/drawing]

Typické zřetězení grafických operací graphics pipeline Vertex Data Pixel Data Vertex processing Texture Store Primitive Assembly and Rasterization Fragment Processing Fragment operations

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,

Hrubé schéma OpenGL se shadery Vertex Data Pixel Data Vertex Shader Texture Store Primitive Assembly and Rasterization Fragment Shader Fragment operations OpenGL verze 3.1 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

Obrázek, pixely a antialiasing Obrázek Omezené rozlišení (Daný počet pixelů) Zubaté okraje, artefakty Nutno vyhlazovat bez vyhlazování s vyhlazováním

Geometrické modelování x zobrazování Modelování často komplexní plochy Zobrazování trojúhelníky ve 3D (teselace)

Textury

Základ syntézy obrazu

Problém viditelnosti

Negeometrické vlastnosti objektů

Různá kvalita syntetizovaného obrazu (obrázky fy PIXAR) Polygonální model drátové zobrazení Polygonální model drátové zobrazení s viditelností Polygonální model konstantní stínování Polygonální model interpolované stínování

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

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ů,

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

Knihovny kolem OpenGL (1) Aplikace závislá na operačním systému aplikační program Operační systém X, Win32, Mac O/S OpenGL ovladače hardware (periferie, GPU, ) Courtesy Siggraph2004 Course 29

Knihovny kolem OpenGL (2) Aplikace nezávislá na operačním systému aplikační program Správa oken, GUI Operační systém X, Win32, Mac O/S OpenGL ovladače hardware (periferie, GPU, ) Courtesy Siggraph2004 Course 29

Knihovny kolem OpenGL (3) Správa oken / GUI GLUT FreeGLUT SDL

Výhody OpenGL Jednoduchost Konzistentní implementace & design Rozsáhlá dokumentace Přenositelnost Pro embedded systémy (OpenGL ES) i superpočítače 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

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. Podrobněji zpracováno na: http://en.wikipedia.org/wiki/opengl

OpenGL 1.0, rok 1994 Fixní zobrazovací řetězec ( fixed pipeline ), tj. neprogramovatelný Operace a jejich pořadí je zadrátované v HW Vydržel dlouho, až do roku 2004, po roce 2000 kritizován pro svoji nepružnost Vertex Data Vertex Transform and Lighting Primitive Setup and Rasterization Fragment Coloring and Texturing Blending Pixel Data Texture Store

OpenGL 2.0, rok 2004 Nové programovatelné bloky vertex shader a fragment shader Fixní proudové zpracování stále programově dostupné Vertex Data Pixel Data Vertex Transform and Lighting Texture Store Primitive Setup and Rasterization Fragment Coloring and Texturing Blending

OpenGL 3.0, 2008 větší změny OpenGL 3.0 zavádí deprecation model Metoda pro odstranění starých funkcionalit z jazyka OpenGL Zastaralé metody označeny jako zavržené deprecated Programátoři by je neměli používat, neboť budou v dalších verzích OGL z knihovny odstraněny Řetězec zpracování stejný jako verze 2.1 až do další verze OpenGL 3.1 (2009) Je definován typ kontextu plný a dopředně kompatibilní Typ kontextu Full Forward Compatible Popis Všechny funkce z aktuální verze OpenGL (včetně zavržených deprecated) Pouze nezavržené funkce (tj. kontext, podobný tomu, jak to bude v dalších verzích OpenGL)

OpenGL 3.1, březen 2009 OpenGL 3.1 odstranila fixní proudové zpracování Programy musí používat tzv. shadery (shaders) Maximum dat uloženo v paměti na GPU Data vrcholů s použitím buffer objects a vertex arrays Vertex Data Vertex Shader Primitive Setup and Rasterization Fragment Shader Blending Pixel Data Texture Store

OpenGL 3.2, srpen 2009 Nově geometrický procesor geometry shader A profily (context profiles) Určují verzi OpenGL a množinu použitelných příkazů Dva typy profilu: core and compatible Vertex Data Vertex Shader Geometry Shader Primitive Setup and Rasterizati on Fragment Shader Blending Pixel Data Texture Store

OpenGL 3.1 a 3.2 context profiles Context Type Profile Description Full Forward Compatible core compatible core compatible Všechny funkce dané verze OpenGL (i ty, označené jako zavržené, ale bez zrušených funkcí) Všechny funkce ze všech předchozích verzí OpenGL (full v OpenGL 3.0) Pouze nezavržené funkce dané verze OpenGL Není podporován

OpenGL 4.1, březen 2010 Další 2 programovatelné bloky tessellation-control a tessellation-evaluation shaders Vertex Data Vertex Shader Tessellation Control Shader Tessellation Evaluation Shader Geometry Shader Primitive Setup and Rasterization Fragment Shader Blending Pixel Data Texture Store

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() Datový typ parametrů (další slajd) suffix Parametry oddělené čárkou gl<command name>[<num> <type> [v]]( parameter(s) ); prefix gl př. gluniform1f( index, 5.8f); double attrib_array[3] = {1.0, 5.0, 6.0}; gluniform3fv (index, attrib_array); Počet parametrů - celé číslo v pokud je parametrem ukazatel do pole

Datové typy parametrů příkazů Suffix Datový typ Datový typ v ANSI C OpenGL definice b 8bit integer signed char GLbyte s 16bit integer short GLshort i 32bit integer long GLint, GLsizei i64 64bit integer (long long, _int64) GLint64 f 32bit float float GLfloat, GLclampf d 64bit float double GLdouble, GLclampd ub 8bit unsigned int unsigned char GLubyte, GLboolean us 16bit unsigned int unsigned short GLushort ui 32bit unsigned int unsigned long GLunit, GLenum, GLbitfield ui64 64bit unsigned int GLunit64

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

Nastavení a získání hodnoty stavové proměnné Nastavení stavu logická hodnota glenable(gl_multisample); gldisable(gl_multisample); Získání stavu bool 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);

Zpracování chyb v OpenGL GLenum glgeterror(void); 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

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 productionready renderer in 3dsMAX, Přednáška, Speciální seminář z počítačové grafiky, 20. 10. 2011