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.
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