Cvičenia z predmetu Grafika v reálnom čase (Real-Time Graphics)
Zdroje
- Vývojové prostredia:
- Odporúčané: Visual C++ 2008 Express Edition with SP 1 (ISO)
- Prípadne pôvodná verzia Visual C++ 2008 Express Edition (ISO) bez SP
- Ak máte platný ISIC, môžete získať další SW od Microsoft v edíciách PROFESSIONAL či iných
- Alternatíva: v učebniach je ešte nainštalovaný Borland C++ Builder 5.0
- Alternatíva: multiplatformový Code::Blocks pre kompilátor GCC pod linux alebo s už "zabudovaným
" MinGW pod windows
- Knižnice:
- GLFW - na inicializáciu OpenGL, vytvorenie okna, manažovanie vstupu,... (open source)
- GLEW - na jednoduchú prácu s OpenGL rozšíreniami (open source)
- Dokumentácia:
- GLFW users Guide - príručka používateľa knižnice GLFW
- GLEW basic usage - základná práca s knižnicou GLEW
- OpenGL API quick reference card - "ťahák" k OpenGL API a OpenGL Shading Language
- OpenGL registry - podrobná špecifikácia OpenGL a jeho rozšírení
Cvičenie 1
- Príklad 1 - Vyskúšajte si :
- - Zmenu veľkosti okna (glfwOpenWindow)
- - Vyčistenie OpenGL bufferu farbou (glClear, glClearColor)
- - Výpis do konzoly ( fprintf(stderr,"..."); )
- - Výpis do hlavičky okna (glfwSetWindowTitle)
- - Počítanie FPS (glfwGetTime, glfwSetTime)
- - Načítanie vstupu z klávesnice a myši
- Priklad 2 - jednoduchý rendering - Vyskúšajte si :
- - Zmenu farby renderovaného štvoruholníka (glColor4f)
- - Zmenu pozícií vrcholov (glVertex2f)
- - Umiestnenie štvoruholníka/pozorovateľa (GL_MODELVIEW, glTranslatef)
- - Zmenu štvoruholníka na trojuholník (GL_QUADS, GL_TRIANGLES)
- - Nastavenie projekcie (GL_PROJECTION, glFrustum)
- Priklad 3 - jednoduché textúrovanie - Vyskúšajte si :
- - Zmenu textúrových súradníc (glTexCoord2f)
- - Zmenu pozícií vrcholov (glVertex2f)
- - Filrovanie textúr (glTexParameteri, GL_LINEAR, GL_NEAREST)
- - Poradie farebných kanalóv textúry v internej (GL_RGB8) a externej (GL_BGR_EXT) reprezentácii (glTexImage2D)
- Priklad 4 - základná práca s rozšíreniami - Vyskúšajte si :
- Multitexturing
- Priklad 5 - úvod do Shaders
Cvičenie 2
- Priklad 1 - Shaders pod Visual C++ 2008 - Vyskúšajte si :
- - Zmenu výslednej farby fragmentu (gl_FragColor = ...)
- - Prácu s vektormi - sčítanie, odčítanie, škálovanie (col = gl_FragCoord * ...)
- - Zamieňanie súradníc - swizzling (col = gl_FragCoord.xxzy)
- - "zahodenie" fragmentu (discard)
- - vetvenie - napr. ak pozícia fragmentu spíňa nejakú podmienku, fragment bude "zahodený"
- - pridať do fragment shaderu textúru (uniform sampler2D) a vytiahnuť z nej texely (texture2D) s textúrovými súradnicami (gl_TexCoord[...])
- - cyklus s viacnásobným vyťahovaním texelov z textúry - napr. zobraziť priemernú hodnotu 10-tich susedných texelov
- - korektné nastavenie uniform ( ...=glGetUniformLocation(..., "...");, glUniform1i(..., ...); )
- - multitexturing v shaderoch - čítanie s viacerých textúr a zmiešavanie načítaných hodnôt
- - nepriamy prístup do textúry - načítanú hodnotu z textúry A použiť ako textúrové súradnice do textúry B
- Priklad 2 - Geometria
Cvičenie 3
- Podkladový projekt pre Cvičenie 3 pod Visual C++ 2008 - Vyskúšajte si :
- - Pridať vertex shader
- - Preposielanie/Nastavovanie údajov z vertex shaderu do rasterizera
- - Pridať generovanú geometriu a renderovať ju cez Vertex Arrays
- - Dogenerovať zvyšné trojuholníky do mriežky
- - Nastaviť vo vertex shadery vrcholom rôzne súradnice Z
- - Vo vertex shadery "zvlniť" mriežku
- - Ofarbiť vrcholy mriežky na základe ich Z súradníc
- - Animované vlnenie
- - DÚ - Renderovať mriežku pomocou VBO [návod]
- - DÚ - Výpočet normál vo vrcholoch pre použitie lokálneho osvetlovacieho nodelu
- - DÚ - Výpočet lokálneho osvetlovacieho modelu vo vrcholoch (per-vertex lighting)
- - DÚ - Výpočet lokálneho osvetlovacieho modelu vo fragmentoch (per-fragment lighting)
Cvičenie 4
- Podkladový projekt pre Cvičenie 4 pod Visual C++ 2008 - Vyskúšajte si :
- - Načítať geometriu
- - Renderovať geometriu cez Vertex Arrays - pozície vrcholov aj textúrové súradnice
- - Renderovať geometriu pomocou VBO [návod]
- - Posielať textúrové súradnice do Renderingu cez Vertex Attribute [návod]
- - Posielať súradnice vrcholov do Renderingu cez Vertex Attribute (pozor, robíme pod OpenGL 2.0)
- - DÚ - Posielať súradnice normál vrcholov vo VBO do Renderingu cez Vertex Attribute [návod]
- - DÚ - Výpočet lokálneho osvetlovacieho nodelu (napr. Phong) vo vrcholoch (per-vertex lighting)
- - DÚ - Difúzny odraz svetla zo smerového zdroja
- - DÚ - Difúzny odraz svetla z bodového zdroja (nastaviť pozíciu zdroja svetla)
- - DÚ - Zrkadlový (specular) odraz z bodového zdroja
- - DÚ - Výpočet lokálneho osvetlovacieho modelu vo fragmentoch (per-fragment lighting)
Cvičenie 5 [aktualizované 29.3.2011 - opravené chybné dáta pre tangent a binormal]
- Podkladový projekt pre Cvičenie 5 pod MS VC++ 2008 Express, Borland C++ Builder 5 alebo Code::Blocks - Vyskúšajte si :
- - Posielať súradnice normál vrcholov vo VBO do renderingu cez Vertex Attribute [návod]
- - Výpočet lokálneho osvetlovacieho nodelu (napr. Phong) vo vrcholoch (per-vertex lighting)
- - Difúzny odraz svetla zo smerového zdroja
- - Difúzny odraz svetla z bodového zdroja (nastaviť pozíciu zdroja svetla)
- - Zrkadlový (specular) odraz z bodového zdroja
- - Výpočet lokálneho osvetlovacieho modelu vo fragmentoch (per-fragment lighting)
- - Gloss mapping - načítať gloss map textúru, preposlať do shaderu, použitie v shadery
- - Normal mapping - teória : vstupné dáta, výpočet v spoločnej báze
- - Načítať noraml map textúru, preposlať do shaderu
- - Posielať súradnice tangent a binormal vektorov vrcholov vo VBO do Renderingu cez Vertex Attribute
- - ModelView space normal mapping : Spracovať tangent, binormal a normal v shadery, pouziť normálu z normal map textúry pri výpočte lokalneho osvetlovacieho modelu
- - DÚ : Tangent space normal mapping (výpočet inverznej matice, použiť inverznú transformáciu)
Cvičenie 6
- Podkladový projekt pre Cvičenie 6 - Multiple render targets pod MS VC++ 2008 Express, Borland C++ Builder 5 alebo Code::Blocks - Vyskúšajte si :
- - Zrkadlový (specular) odraz z bodového zdroja
- - Výpočet lokálneho osvetlovacieho modelu vo fragmentoch (per-fragment lighting)
- Frame Buffer Objects (FBO)
- - vytvorenie a inicializácia (glGenFramebuffers)
- - vytvorenie dátových úložísk pre FBO (renderbuffer alebo textúra)
- - pripojenie dátových úložísk k FBO na príslušnú vrstvu (renderbuffer alebo textúru)
- - renderovanie do FBO (do jednej alebo viacerých vrstiev)
- - použitie údajov vydenderovaných do FBO
Cvičenie 7
- Podkladový projekt pre Cvičenie 7 pod MS VC++ 2008 Express - Vyskúšajte si :
- - pridať do FBO úložisko pre hlbky fragmentov
- - zobraziť obsah úložiska hĺbky fragmentov
- - pridať do FBO úložisko pre ďalšiu farebnú vrstvu
- - renderovanie do nového úložiska a jeho zobrazenie
- - renderovanie do dvoch farebných úložísk naraz
- - post-processing
Cvičenie 8
- Podkladový projekt pre Cvičenie 8 - shadow mapping pod MS VC++ 2008 Express alebo Code::Blocks - Vyskúšajte si :
- - funkcia na renderovanie jednoduchej geometrie bez shaderov
- - renderovanie jednoduchej geometrie bez shaderov z pozície svetla do FBO
- - získanie matice pre projekciu z pozície svetla
- - posielanie matice svetla do vertex shaderu
- - posielanie depth bufferu naplneného pri renderingu z pozície svetla do shaderu ako shadow mapu
- - výpočet súradnic pre vzorkovanie shadow mapy
- - vzorkovanie shadow mapy a jej vykreslenie
- - zmena výstupu vzorkovania shadow mapy
- - ošetrenie nepresnosti porovnávania hĺbok pri shadow mappingu
- - kompozícia osvetlenia a tieňa
Cvičenie 9 - collada loader
- Podkladový projekt pre Cvičenie 9 pod MS VC++ 2008 Express - Vyskúšajte si :
- - dokumentacia ku COLLADA
- - stiahnut kniznicu na citanie XML (napr. tinyXML), rozbalit a prilepit k projektu
- - spracovat collada subor "box.dae"
Cvičenie 10 - cube maps
- Podkladový projekt pre Cvičenie 10 pod MS VC++ 2008 Express - Vyskúšajte si :
- - načítať cubemap prostredníctvom funkcie loadTGACubeMap
- - poslať cubemap do shaderu
- - namapovať cubemap ako reflekciu na renderovaný model
- - namapovať cubemap ako refrakciu na renderovaný model
- - kompozícia reflekcie a refrakcie pomocou reflektancie a transmitancie, viď Fresnelove rovnice, prípadne použiť Schlickovu aproximáciu
Cvičenie 11 - volume rendering
- Podkladový projekt pre Cvičenie 11 pod MS VC++ 2008 Express - Vyskúšajte si :
- - načítať 3D textúru prostredníctvom funkcie loadRawTex3D, poslať ju do shaderov
- - vhodne použiť súradnice vrcholov geometrie na čítanie z 3D textúry
- - vypočítať pozíciu pozorovaťela vzhľadom na model (súradnice pozorovaťela v priestore modelu) a následne ich poslať do shaderu
- - v shadery zrátať vektor prechodu pohľadového lúča cez objem (teleso)
- - vzorkovať pozdĺž lúča hodnoty z objemu a vhodne ich kumulovať - maximum / integrácia
- - nastavitelná dĺžku vzorkovacieho kroku lúča
- - ohraničiť lúč hranicou objemu
|