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



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

Programování grafiky ÚVOD

KAPITOLA 13. Grafika a zvuk. Linux a grafika

Programování grafiky ÚVOD

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

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

Připravil: David Procházka. Knihovna GLUT

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

Co je grafický akcelerátor

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

Nvidia CUDA Paralelní programování na GPU

Application programming interface (API)

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

Pokročilé programování v jazyce C pro chemiky (C3220) 3D grafika v knihovně Qt

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

Architektura grafických ip pro Xbox 360 a PS3

Hardware pro počítačovou grafiku NPGR019

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

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

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

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

Programovatelné shadery a jazyk Cg. Petr Kmoch

Připravil: David Procházka. Shadery

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

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

Grafické karty s podporou DirectX 11 Quynh Trang Dao Dao007

Nvidia CUDA Paralelní programování na GPU

Počítače a grafika. Ing. Radek Poliščuk, Ph.D. Přednáška 3. z předmětu

Procesory nvidia Tegra

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

KATEDRA INFORMATIKY. Demonstrace OpenGL v prostředí LispWorks

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

Pokročilá architektura počítačů

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

GPU A CUDA HISTORIE GPU CO JE GPGPU? NVIDIA CUDA

Gymnázium Vysoké Mýto nám. Vaňorného 163, Vysoké Mýto

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

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

Srovnání alternativních implementací DirectX

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

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

Vytváříme dobré aplikace vykreslovače grafiky v programovém prostředí Control Web

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

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

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

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

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

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

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

IUJCE 07/08 Přednáška č. 1

Jazyk C# (seminář 6)

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

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

ČÁST 1. Základy 32bitového programování ve Windows

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

Výčtový typ strana 67

3D akcelerátory historie a architektura

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

Připravil: David Procházka. Projekce

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

Satori. Uživatelský manuál

UNIVERZITA PARDUBICE. Fakulta elektrotechniky a informatiky. Geneze grafických karet jako základní součásti PC Drahoslav Stejskal

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

Úvod, rozdělení CAD systémů Zhotoveno ve školním roce: 2011/2012 Jméno zhotovitele: Ing. Karel Procházka

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Desky Evb Display a Evb Keyboard

Android OpenGL. Práce s texturami

Embedded vývoj v Clutteru a Mx

GRAFICKÉ ADAPTÉRY. Pracovní režimy grafické karty

LYNX. Michal Útrata Business Unit Manager PC LYNX & PC components mutrata@edsystem.cz

VY_32_INOVACE_INF.19. Inkscape, GIMP, Blender

GIS Geografické informační systémy

ARCHITEKTURA AMD PUMA

Specifikace projektu Ocerus

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

PŘEDSTAVENÍ GRAFICKÉHO PROCESORU NVIDIA G200

Grafické adaptéry. Jan Vrzal, verze 1.0

VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

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

MS WINDOWS I. řada operačních systémů firmy Microsoft *1985 -? Historie. Práce ve Windows XP. Architektura. Instalace. Spouštění

GIS Geografické informační systémy

RETROSPEKTIVNÍ HRA PRO DVA HRÁČE S VESMÍRNOU TÉMATIKOU

Autodesk AutoCAD 2020

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

Základní informace. Operační systém (OS)

ATRAKTIVNÍ POČÍTAČE

Novinky. Autodesk Vault helpdesk.graitec.cz,

Aplikace pro srovna ní cen povinne ho ruc ení

2 Tvorba interaktivních grafických programů

B4B35OSY: Operační systémy

GIS Geografické informační systémy

Multiplatformní GUI toolkity

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

Informační Systém PINEL plus

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

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

Pokročilé architektury počítačů

STŘEDOŠKOLSKÁ ODBORNÁ ČINNOST

Algoritmizace a programování

OpenGL. referát na praktikum z informatiky. Daniel Čech

Transkript:

24. září 2013, Brno Připravil: David Procházka Základy OpenGL Počítačová grafika 2

Grafické knihovny Strana 2 / 25 Obsah přednášky 1 Grafické knihovny 2 Vykreslování rastrového obrazu 3 OpenGL aplikace 4 Shrnutí

Grafické knihovny Strana 3 / 25 Grafické knihovny a jejich význam Každý si může napsat svou grafickou knihovnu. Má však význam pouze tehdy pokud je podporována výrobci grafických karet. Dnes jsou běžně HW podporovány pouze Microsoft DirectX a OpenGL. Existují další knihovny/enginy, které jsou postaveny na OpenGL/DirectX (XNA, Open Inventor). Jejich účelem je usnadnit vývoj grafických aplikací. Tyto knihovny generují obvykle optimalizovaný OpenGL resp. DirectX kód. Jejich použití může zvýšit (ale nemusí!) výkon aplikace.

Grafické knihovny Strana 4 / 25 Význam hardwarové akcelerace

Grafické knihovny Strana 5 / 25 OpenGL API pro tvorbu 2D a 3D graf. aplikací (podobné Direct3D, DirectX je komplexnější), nezávislá na platformě nebo jazyku (DirectX je pouze pro Windows), OpenGL je procedurální, lze však vytvářet objektové aplikace (DirectX je plně objektový), vše je vykreslováno z graf primitiv (bod, linie, polygon, pixmapa, bitmapa), OpenGL je stavový stroj (pokud nastavíte, že plochy mají mít určitou barvu, bude to platit do odvolání), OpenGL používá knihovnu GLUT (OpenGL Utility Toolkit) pro tvobu GUI a zjednodušení některých operací, součástí OpenGL je GL Shanding Language (GLSL), který umožňuje provádět řadu operací na grafické kartě.

Grafické knihovny Strana 6 / 25 Velmi stručná historie OpenGL 1980: Iris GL Silicon Graphics, SGI stanice, 1992: OpenGL 1.0 Mark Segal and Kurt Akeley, 1997: OpenGL 1.1 práce s texturami, podpora GPU, 1998: OpenGL 1.2 další funkce pro texturování, 2001: OpenGL 1.3 překvapivě opět rozšíření texturování, 2002: OpenGL 1.4 HW stínování a opět textury, 2003: OpenGL 1.5 zejména Vertex Buffer Objects (VBOs) a zlepšení stínování, 2004: OpenGL 2.0 plnohodnotná podpora GPU (jazyk ARB počátek vertex a pixel shaders), začíná silná orientace na využití graf. karet, 2006: OpenGL 2.1 Pixel Buffer Objects, srgb textury a GL Shading Language 1.20.

Grafické knihovny Strana 7 / 25 Současnost OpenGL 2008: OpenGL 3.0 podporované karty: Radeon HD series; GeForce 8, 9, 100-series, 200-series, 300-series and 400-series očekáván objektový model, který nepřišel, pro zjednodušení budoucích verzí OpenGL byl představen seznam nedoporučovaných funkcí deprecation mechanism, přichází mimo jiné: GLSL 1.30, Vertex Array Objects, vylepšené, Framebuffer Objects a další funkce orientované na využití graf. hardwaru. 2009: OpenGL 3.1 nové funkce pro jednodušší vývoj, GLSL 1.40, řada zastaralých funkcí vyřazena ze specifikace (režim indexovaných barev, atp.), dostupné v rozšíření.

Grafické knihovny Strana 8 / 25 Současnost OpenGL (2) 2009: OpenGL 3.2 podporované karty: Radeon HD series; GeForce 8000, 9000, GT 100, GTX 200, GT 300 and GTX 400 series GLSL 1.50 a další zlepšovaní shaderů, 2010: OpenGL 3.3 specifikace vydána paralelně s OpenGL 4, řada ARB rozšíření, které umožňují funkcionalitu OpenGL 4 na starším HW (OpenGL 4 vyžaduje nový hardware), GLSL 3.30.

Grafické knihovny Strana 9 / 25 Současnost OpenGL (3) 2010: OpenGL 4.0 podporované karty: Nvidia GeForce GTX 400 series, ATI Radeon HD 5000 series, GLSL 4.00, další zlepšování výkonu a funkcionality shaderů, 2010: OpenGL 4.1 plná kompatibilita s OpenGL for Embedded Systems OpenGL ES 2.0 GLSL 4.10, další zlepšení výkonu a funkcionality, konkurence Direct3D 11. Podrobnosti na: http://en.wikipedia.org/wiki/opengl, http://www.opengl.org/documentation/specs/.

Grafické knihovny Strana 10 / 25 Khronos Group Od roku 1992 dohlíží na vývoj OpenGL Architecture Review Board (ARB), Od roku 2006 ARB součástí Khronos Group (http://www.khronos.org), Do KG se může přihlásit kdokoliv (několik úrovní členství, podmíněno poplatkem), promoted members: AMD, ARM, Apple, Epic Games, Ericsson, Freescale, Imagination, Intel, Nokia, NVIDIA, Qualcomm, Samsung, Sony, Texas Instruments. KG dohlíží na vývoj řady standardů: OpenGL, OpenCL, OpenGL ES, OpenGL SC (Safety Critical), COLLADA, WebGL 1, OpenKODE, OpenVG, OpenMAX, OpenSL ES, OpenWF, OpenML. 1 OpenGL ES 2.0 v rámci HTML 5

Grafické knihovny Strana 11 / 25 Některé knihovny doplňující OpenGL GLU doplňkové funkce pro OpenGL, GLUT The OpenGL utility toolkit, zastavený vývoj, freeglut open source varianta GLUTu, GLUI a GUI toolkit postavený na GLUTu, SDL The Simple DirectMedia Layer, GLee The OpenGL Easy Extension library, GLEW The OpenGL Extension Wrangler Library, GLM matematický toolkit postavený na GLSL.

Vykreslování rastrového obrazu Strana 12 / 25 Obsah přednášky 1 Grafické knihovny 2 Vykreslování rastrového obrazu 3 OpenGL aplikace 4 Shrnutí

Vykreslování rastrového obrazu Strana 13 / 25 Vykreslování scény Rendering pipeline (vykreslovací řetězec): Na vstupu jsou (vektorové a rastrové) objekty na výstupu je 2D rastr, framebuffer: pamět, do které OpenGL renderuje obraz, aby se vykreslování urychlilo, používají se 2 grafické buffery pro jeden grafický výstup obsah jednoho je zobrazován a do druhého je připravován další snímek, prof. grafické karty se 2 výstupy mají tedy 4 buffery (NVIDIA Quadro).

Vykreslování rastrového obrazu Strana 14 / 25 Vykreslování scény podrobněji 1 Konstrukce scény z graf. primitiv, 2 nastavení pozorovatele (view point), 3 výpočet barev objektů (explicitní nebo přenesená), 4 rasterizace scény, 5 přenos do framebufferu.

Vykreslování rastrového obrazu Strana 15 / 25 Vykreslování scény detailní schéma Prozatím není nutné chápat

OpenGL aplikace Strana 16 / 25 Obsah přednášky 1 Grafické knihovny 2 Vykreslování rastrového obrazu 3 OpenGL aplikace 4 Shrnutí

OpenGL aplikace Strana 17 / 25 Základní struktura OpenGL aplikace V hlavní funkci programu se zaregistrují funkce pro základní operace a ty se volají dle potřeby automaticky. Funkce se mohou jmenovat libovolně, povinné jsou pouze parametry. Každou funkci registrujeme příslušným příkazem (viz níže). Základní události jsou zejména: 1 změna velikosti okna glutreshapefunc(), 2 stisknutí klávesy na klávesnici glutkeyboardfunc(), 3 stisknutí tlačítka myši glutmousefunc(), 4 pohyb myší při stisknutém tlačítku glutmotionfunc(), 5 vypršení počítadla gluttimerfunc(). Po těchto událostech se obvykle volá funkce překreslení okna (zaregistrovaná pomocí glutdisplayfunc()).

OpenGL aplikace Strana 18 / 25 Základní struktura OpenGL aplikace 1 void display ( void ){ 2 // vykresleni obsahu okna 3 } 4 5 void init ( void ) { 6 glclearcolor (0.0, 0.0, 0.0, 0.0); 7... 8 } 9 10 int main ( int argc, char ** argv ){ 11 glutinit (& argc, argv ); // inicializace aplikace 12 glutinitdisplaymode ( GLUT_SINGLE GLUT_RGBA ); // rezim 13 glutinitwindowsize (640, 480); // definice okna 14 glutinitwindowposition (100, 100); 15 glutcreatewindow (" PG2 "); // vytvoreni okna 16 init (); // pocatecni nastaveni 17 glutdisplayfunc ( display ); // registrace funkce 18 glutmainloop (); // nekonecna smycka 19 return 0; // toto se nikdy neprovede 20 }

OpenGL aplikace Strana 19 / 25 Registrace funkce pro stisk klávesy 1 void onkeyboard ( unsigned char key, int x, int y){ 2 switch ( key ){ 3 case r : g_red =1.0; break ; 4 case g : g_green =1.0; break ; 5 case b : g_blue =1.0; break ; 6 } 7 glutpostredisplay (); // prikaz zneplatnujici obsah okna 8 } 9 10... 11 12 int main ( int argc, char ** argv ){ 13... 14 // registrace funkce pro stisk klavesy 15 glutkeyboardfunct ( onkeyboard ); 16 }

OpenGL aplikace Strana 20 / 25 Struktura OpenGL příkazů glcolor3f(0.0f, 1.0f,0.0f) Každý příkaz má prefix gl, glu, glut. Následuje název příkazu. Následuje počet a typ předaných parametrů (byte, short int, int, double, unsigned varianty předchozích). // priklady moznosti nastaveni barvy vykreslovani glcolor3f(0.0f, 1.0f, 0.0f) glcolor3i(0, 255, 0) glcolor4f(0.5f, 0.0f, 1.0f, 0.0f)

OpenGL aplikace Strana 21 / 25 Datové typy OpenGL Zavádíme kvůli přenositelnosti, ale lze používat i nativní typy GLbyte: 8b, b GLshort: 16b, s GLint: 32b, i GLint64: 32b, i64 GLfloat: 32b, f GLdouble: 64b, d... Existují i varianty bez znaménka (přirozená čísla) GLubyte: 8b, ub GLushort: 16b, us GLuint: 32b, ui

OpenGL aplikace Strana 22 / 25 Stavový automat 1 // zacni vykreslovat urcitou barvou 2 glcolor3f (0.0f, 1.0f, 0.0 f); 3 4 // zacny vytvaret vrcholy 5 glbegin ( typ_primitiva ); 6 glvertex3f (...); 7 glvertex3f (...); 8... 9 // konec vkladani vrcholu 10 glend (); 11 // zmen barvu vykreslovani 12 glcolor3f (1.0f, 1.0f, 0.5 f);

OpenGL aplikace Strana 23 / 25 Detekce chyby Pokud funkce enum glgeterror(void) vrátí NO ERROR, je vše v pořádku. Pokud v době od předchozího volání nastala chyba, vrátí jedna z následujích hodnot. GL INVALID ENUM prvek neodpovídá výčtovému typu, GL INVALID VALUE číselný parametr mimo rozsah, GL INVALID OPERATION operace není povolena, GL INVALID FRAMEBUFFER OPERATION objekt ve framebufferu není kompletní, GL STACK OVERFLOW, GL STACK UNDERFLOW obvykle u maticových operací, GL TABLE TOO LARGE generuje OpenGL imaging subset, GL OUT OF MEMORY zřejmé. Vhodné pravidelně kontrolovat!

Shrnutí Strana 24 / 25 Obsah přednášky 1 Grafické knihovny 2 Vykreslování rastrového obrazu 3 OpenGL aplikace 4 Shrnutí

Shrnutí Strana 25 / 25 Kontrolní otázky Jaký je rozdíl mezi DirectX, OpenGL, XNA a Open Inventorem? Jaká je základní struktura OpenGL aplikace? Jak zajistit reakci na stisk klávesy? Jaké parametry očekává příkaz glcolor3i()? Jak detekovat chybu v OpenGL aplikaci?