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