Náměty na grafické zápočty z C++ (NPGR041)

Náměty na zápočtové programy z předmětu NPRG041 (Programování v C++) - zájemci se mohou na detaily zeptat zadavatele. Zadavatel vám nebude dávat zápočty, pouze se může dohodnout s vámi a s vaším cvičícím na přesnější specifikaci úlohy a podmínkách udělení zápočtu (.. co je potřeba splnit).
Přesné formální postupy mohou být dohodnuty s přednášejícími - zde by se objevil výsledek.

Navrhovaná témata mohou být předmětem další dohody a upřesnění, berte je jen jako hrubý rámec.. Většina témat byla navržena s ohledem na to, aby se na nich dalo stavět rozumné zadání Ročníkového projektu a dále Bakalářské práce.

Velká většina zápočtových programů nepotřebuje velké předběžné znalosti z počítačové grafiky, předpokládáme samozřejmě zájem o věc a ochotu se něco nového naučit. Grafické vstupy a výstupy jsme se snažili omezit na minimum, z naší strany bude poskytnut jednoduchý návod (kuchařka), jak ten výstup udělat.

Témata:

Zobrazování drahokamů, Josef Pelikán (volné)
zobrazování speciální třídy 3D scén - důraz na přesné vyjádření reakce světla a povrchu tělesa. Průhledné materiály, lom světla, totální odraz.
Základ: scéna zadaná programem, základní ray-tracing, jednoduchý model odrazu/lomu
Rozšíření
Photon-mapping, Josef Pelikán (volné)
moderní metoda zobrazování 3D scén, která je principem velice jednoduchá (a podobná ray-tracingu). Úkolem by bylo implementovat v C++ základní třídy pro PM a podle dohody několik jednodušších variant zobrazení 3D scény. Úloha má velký potenciál rozšíření do budoucího ročnkového projektu, bakalářské nebo i diplomové práce.
Rozšíření
Kalkulátor (symbolický a grafický), Josef Pelikán (obsazeno: Markéta Popelová)
Běžné výpočty, proměnné, konstanty, výrazy, funkce, konstanty, apod. Skaláry, vektory, matice, ..
Základ: jenom textové zobrazení výsledků
Rozšíření
Modelování stromů a keřů, Josef Pelikán (obsazeno: Petr Jankovský)
Vytváření jednoduchých 3D modelů stromů a keřů, hlavně pro účely masového zobrazení (les). Parametrizace vzhledu, stáří, něco jako "biologické druhy"... Výstupem by měly být 3D modely v některém běžném formátu (viz OpenSceneGraph knihovna). Program může (ale nemusí) vytvořené stromy rovnou orientačně zobrazovat (opět třeba v OSG). Náměty pro generování: L-systémy, komponentový systém.
Kulečník nebo jiná 2D, 3D simulace, Josef Pelikán (obsazeno: Peter Zvirinský)
Simulace jednoduché fyzikální situace s grafickou prezentační vrstvou. Objektový návrh, poměrně snadná fyzika (mechanika), rendering pomoci OpenGL..
Základ: jen jednodušší simulace, popis scény (inicializace) natvrdo zadán programem, jednoduché zobrazení, bez interakce..
Rozšíření
Generování Sudoku, Fill-a-pix, Griddlers, Josef Pelikán (FillAPix: Adam Černý, ostatní volné)
Cílem je navrhnout systém pro [polo-]automatické generování zajímavých zadání pro populární hry na papíře typu Sudoku, Fill-a-pix, Griddlers, apod. Nejzajímavějším problémem je, jak ohodnotit "obtížnost" jistého zadání pro člověka-řešitele. Základní úloha by spočívala v ohodnocení obtížnosti předloženého zadání (Griddlers), vygenerování zadání dané obtížnosti (Sudoku) nebo vygenerování zadání na základě vstupu (Fill-a-pix). Grafické znázornění, tisk, interakce pro jednoduchou úpravu dat..
Rozšíření
Fyzikální stavebnice: pružiny, Petr Kmoch
Vykreslování a dynamická simulace fyzikální soustavy složené z těchto prvků:
- pohyblivé koule (fyzikálně: hmotné body)
- nepohyblivé rovinné plochy
- pružiny
Základ: 2D scéna zadaná programem, jednoduchá explicitní simulace, bez tření mezi tělesy (jen s odporem statického vzduchu).
Rozšíření
Fyzikální stavebnice: tuhá tělesa, Petr Kmoch
Vykreslování a dynamická simulace fyzikální soustavy složené z těchto prvků:
- pohyblivá tuhá tělesa (předdefinované tvary: koule, krychle, válec)
- nepohyblivé ohraničující roviny
Základ: scéna zadaná programem, jednoduchá explicitní simulace, bez tření mezi tělesy (jen s odporem statického vzduchu).
Rozšíření
I/O knihovna formátů .obj a .mtl, Petr Kmoch
Callbackový parser .obj a .mtl souborů, templatovaný strukturami pro jednotlivá primitiva (jako vrchol, stěna). Ukládání souborů z datových struktur, do kterých umí načítat.
Základ: OBJ bez křivek a ploch, MTL jen základní barvy. 2 default implementace: prázdné callbacky, načítání do pole vrcholů a indexů.
Materiály: OBJ formát, MTL formát.
Rozšíření
Skriptovatelná virtuální kamera, Petr Kmoch
Systém pro programové ovládání virtuální kamery ve 3D scéně. Cílem programu je umožnit programově definovaný průlet 3D scénou s volitelnou hladkostí pohybu (interpolace). Předpokládané použití je pro prezentační účely nebo v kombinaci se snímaním videa z obrazovky.
Základ: program zobrazuje jednoduchou statickou scénu, kamera řízená C++ programem s vlastním časovačem, omezený výběr interpolací
Rozšíření
Canvas, Václav Krajíček
Knihovna pro rastrové kreslení do bufferu v paměti.
Nastaví se kus paměti, formát pixelu, atd.
Tato funkcionalita je často součástí větších GUI knihoven.
Implementace základních funkcí pro kreslení (čáry, body, obdélníky).
Modularní návrh, snadno rozšiřitelné o nová kreslící primitiva.
Výstup na obrazovku, do souboru (některý existující formát).
Volitelně rozšířit o 3D rendering.
Může být velká knihovna, nebo light verze implementovaná celá v šablonách.
Možnost vykreslovat podle skriptu (vektorová grafika).
Light DICOM Reader, Václav Krajíček
Zjednodušená alternativa pro načítání DICOM souborů (medicínská 3D data).
Pouze načítání obrázků.
Cílem je i vylepšit návrh knihovny DCMTK (načítání přímo do dané paměti).
Nutné nastudovat standard a nebo existující implementace
Animační engine, Václav Krajíček
Návrh infrastruktury (datové struktury a algoritmy).
Cílem je efektivně updatovat stav objektů v hierarchii.
Jednoduchý výstup (žádné složité objekty)
Snadná rozšiřitelnost o nové objekty.
Možnosti: LOD, reentrantnost.
Simulace zvířátek, Václav Krajíček
Virtualní svět, virtuální agenti (zvířátka).
Svět je popsán geometricky (polygonální překážky, ...) ve 2D
Virtuální agenti se pohybují různě rychle, sledují své cíle, interagují.
Volitelně možnost persistence světa, generování světa, skriptování agentů, vizualizace
Možnost využití algoritmů pro plánování robotů.
Game engine, Václav Krajíček
Pro vážné zájemce
Zaměřit se na konkrétní typ hry (rpg, adventura, ...).
V podstatě jde o napsání jednoduché hry trochu obecněji (dají se přidávat lokace, akce, nepřátele, překážky, děj, grafika...)
Generátor bludiště, Václav Krajíček
Vytváření bludiště z předem daných součástí, které je možné např. rotovat.
Součásti na sebe mohou navazovat ale nesmějí se překrývat.
Pevně dané podmínky na celkovou velikost, počátek konec (nehledá se žádné optimální řešení).
Nemusí jít jen o bludiště chodeb, ale například kontinentů, planetárních systémů, kde platí jiné podmínky na návaznost.
Tic-Tac-Toe, Václav Krajíček
Pouze pro nadšeného zájemce o zpracování obrazu!
Konečným cílem je rozpoznávání stavu hry Tic-Tac-Toe z fotky.
Dílčí cíl: návrh modulárního zpracování (řetězec operací) vstupního rastrového obrázku. Plus např. pokus o rozpoznávání úseček a jejich vyznačení do obrázku (detekce hran + případná Houghova transformace).
Rozšíření
Generátor diagramů, Václav Krajíček
Je dán popis uzlů a vazeb, cílem je vygenerovat rovinné nakreslení.
Jeden typ tvaru uzlu, na vstupu je pevně dané umístění uzlů.
Rozšíření
Simulátor hodinového strojku, Václav Krajíček
Simulace a vizualizace soustrojí ozubených kol. Základ: mechanismus pevně daný ve zdrojáku, výsledky simulace se vypisují textově na terminál.
Rozšíření
GTK GUI pro spouštění unit testů frameworku CppUnit, Václav Krajíček
Test-driven programming je jedním z moderních způsobů programování. Cílem tohoto projektu je vytvořit frontend pro C++ knihovnu CppUnit pomocí multiplatformní GUI knihovny GTK. Z tohoto rozhraní bude možné spouštět jednotlivé nebo všechny test case vybraných test suites, generovat reporty o výsledcich, pouštět testy paralelně ve vláknech, soustředit se na podporu XP.
Primitivní vektorový editor, Jan Horáček
Jednoduchý 2D vektorový editor základních primitiv, musí umět vkládat primitiva (úsečky, polygony, některé kuželosečky), jednoduše editovat parametry (intuitivně například koncové body úseček, nebo zadáním parametrů do dialogu, například parametry kuželoseček), ukládat a nahrávat scény.
Primárním cílem je kvalitní objektový návrh pro editovatelná primitiva.
2D simulace pohlcování energie, Jan Horáček
Jednoduchá 2D scéna má nadefinováno pro každou stěnu kolik pohlcuje energie, kolik odráží zrcadlově a kolik odráží rovnoměrně (difuzně). Dále je ve scéně jeden či více zdrojů energie.
Cílem je simulovat pomocí velkého počtu paprsků (MonteCarlo) šíření energie ve scéně.


Detaily, rozšíření

Ray-casting implicitních ploch

Rekurzivní ray-tracing, vržené stíny, obecnější implicitní plochy, optimalizovaný výpočet průsečíku..
Později (ročníkový projekt, Bc. práce) je možné použít nějaký high-level jazyk pro GPU, paralelizace výpočtu na CPU, apod.
OOP: návrh scény a vnitřní struktury ray-traceru
Inspirace a literatura viz Oleg Fryazinov, Alexander Pasko: Interactive ray shading of FRep objects, WSCG'2008.

Zobrazování drahokamů

anti-aliasing, spektrální rendering, kaustiky, rozšíření o složitější optické jevy (polarizace). Bc.: další rozšiřování fyzikální věrnosti výsledku, urychlování, apod.
OOP: návrh scény a vnitřní struktury zobrazovače

Photon-mapping

RP až Bc: spektrální rendering, různé metody zobrazování fotonových map, složitější geometrie (tělesa), urychlování, apod. DP: viz např. náměty Jaroslava Křivánka.
OOP: návrh scény a vnitřní struktury zobrazovače, datová struktura fotonové mapy (např. KD-tree)

Kalkulátor (symbolický a grafický)

uživatelsky definované funkce, grafický výstup, grafy, interaktivní změna proměnných, různé typy zobrazení dat (systém pluginů), export výsledného obrázku, symbolické operace, scriptování, ..
OOP: vnitřní datové struktury, matematické objekty, zobrazení

Kulečník nebo jiná 2D, 3D simulace

složitější simulace, tření, složitější (3D) zobrazení, interaktivní ovládání, načítání vstupu (scény, situace) z disku, urychlování výpočtu, apod.
OOP: reprezentace scény, urychlovací datová struktura

Generování Sudoku, Fill-a-pix, Griddlers

možnost zobecněného generování, popis úlohy externími daty (pravidla), uživatelský komfort, data v databázi, interakce s herním serverem, herní server, apod.
OOP: reprezentace úlohy, modulární ohodnocovací funkce, grafická prezentace

Fyzikální stavebnice: pružiny

3D scéna, načítání scény z externího souboru, vykreslování fyzikálních veličin (síla, hybnost, ...)
Bc: Uživatelská interakce se simulací (myš), složitější integrační metody
OOP: reprezentace scény, struktura pro vyhledávání kolizí mezi tělesy

Fyzikální stavebnice: tuhá tělesa

načítání scény z externího souboru, vykreslování fyzikálních veličin (síla, hybnost, ...), tělesa libovolného tvaru (externí soubor)
Bc: Uživatelská interakce se simulací (myš, případně 3D haptické rozhraní), složitější integrační metody, tření
OOP: reprezentace scény, struktura pro vyhledávání kolizí mezi tělesy

I/O knihovna formátů .obj a .mtl

podpora dalších částí formátů OBJ a MTL, především textur
OOP: celá knihovna bude využívat objektový přístup C++ (šablony, virtuální metody)

Skriptovatelná virtuální kamera

řízení externím skriptem, spolupráce s "cizím" (řízeným jinou částí programu) časovačem a klávesnicí, spolupráce s obecnou kamerou pomocí pokročilých C++ metod (šablony).
Bc: Pokročilé/uživatelsky definovatelné interpolace, interaktivní zadávání uzlových bodů přímo ve scéně, vlastní výstup obrázků/videa
OOP: reprezentace skriptu animace, reprezentace interpolací, spolupráce s obecnou kamerou

Tic-Tac-Toe

Spolehlivé rozpoznávání úseček, jejich spojování úseček do sítě, hledání koleček a křížků, predikce z minulého stavu hry..

Generátor diagramů

Uzly mohou mít různý tvar, souřadnice uzlů nejsou dány, spojení se mohou křížit, ale pokud možno, co nejméně často. Pokud diagram nejde nakreslit, rozložení na jednodušší komponenty.
Smyslem je vygenerovat obrázek, ne hledat optimální řešení problému.

Simulátor hodinového strojku

Grafická prezentační vrstva, sestava konkrétního strojku uložena v externím souboru, volitelně je možné přidávat i jiné objekty (kyvadla, pružiny, ...).
Sestrojit pomocí programu "orloj"

GTK GUI pro spouštění unit testů frameworku CppUnit

Test-driven programming je jedním z moderních způsobů programování. Cílem tohoto projektu je vytvořit frontend pro C++ knihovnu CppUnit pomoci multiplatformní GUI knihovně GTK. Z tohoto rozhraní bude možné spouštět jednotlivé nebo všechny test case vybraných test suites, generovat reporty o výsledcich, pouštět testy paralelně ve vláknech, soustředit se na podporu XP.
Hotovou a funkční knihovnu uvolnit pod open-source licencí vlastního výběru.


[Computer Graphics Group]  [KSVI Web server]  [School of Informatics]

Valid XHTML 1.1 Copyright (C) 2008-2009 J.Pelikán, last change: $Date: 2009-11-08 00:18:20 +0100 (Sun, 08 Nov 2009) $
Send comments/requests to pepca.at.cgg.mff.cuni.cz