Úkolem je zkonstruovat nějaké zajímavé těleso pomocí trojúhelníkové sítě (triangle-mesh) v prostředí obsahujícím implementaci "Corner-table". Konstrukce by měla být algoritmická, tj. "geometrie" (polohy vrcholů v prostoru) i "topologie" (napojení vrcholů do trojúhelníků) by měly být dány algoritmem. Výsledkem je korektní reprezentace tělesa v paměti, kterou lze pro kontrolu nakreslit a uložit na disk v OBJ formátu.
Jako základ může posloužit projekt 057scene z repository
grcis.
Je připravena aplikace, která umí 3D scénu načíst ze souboru (Wavefront OBJ) nebo
ji vygenerovat algoritmem (zde se uplatní Váš kód). Scéna se poté zobrazí jednoduchou čárovou kresbou
bez viditelnosti ("Wireframe"). Výsledný obrázek (bitmapu) resp. 3D scénu
půjde uložit na disk (PNG formát resp Wavefront OBJ).
Pro konstrukci Vašeho tělesa budete modifikovat předem založenou
třídu Construction nacházející se ve zdrojovém souboru
Construction.cs. Konstrukční metoda se jmenuje Construction.AddMesh().
Nezapomeňte pro hladké plochy nastavit normálové vektory ve vrcholech sítě!
Respektujte transformační matici m, kterou musíte transformovat
všechny vkládané vrcholy i jejich normálové vrcholy.
Při řešení můžete použít též projekt 038 Trackball,
kde je implementováno vykreslování pomocí OpenTK (OpenGL), interaktivní otáčení 3D scénou,
vytváření více instancí vaší scény, apod.
Další kompatibilní projekt je 086shader obsahující navíc pokročilejší zobrazení
se stínováním, tak lze otestovat nastavení normálových vektorů..
Do všech zmíněných projektů můžete vložit beze změny Váš zdrojový soubor Construction.cs.
Platónská tělesa (stěny složené pouze z trojúhelníků, tj. musíte je triangulovat),
graf funkce dvou proměnných, apod.
Inspiraci můžete najít v pěkné knížce
Atlas geometrie, např. 3.8 až 3.10, 6.
Dostanete objekt 3D scény SceneBrep, do kterého budete těleso přidávat, dále instanční matici transformace Matrix4 a textový parametr pro volbu varianty konstrukce (např. typ tělesa, pokud jich implementujete více). Nezapomeňte, že Vaše funkce Construction.AddMesh() může být vyvolána opakovaně. V žádném případě neinicializujte objekt scény, při každém volání prostě přidejte novou instanci Vašeho tělesa (se zadanou instanční transformační maticí).
Pro jednodušší ladění máte možnost zadat iniciální hodnotu textového parametru param formuláře - k tomu slouží funkce InitParams().
Po vytvoření 1 až 8 instancí Vašeho tělesa se spustí procedura CheckCornerTable(), která prověří topologii vytvořeného modelu. Pokud se v hlášení o počtu chyb objeví nenulové číslo, měli byste si na textové konzoli ("Output" ve Visual Studiu) zkontrolovat, které nekonzistence byly nalezeny.
Odevzdat do: 14. 1. 2018
Základ: 6 bodů (jednoduché těleso),
dalších až 8 bodů: bonus za zajímavá tělesa
Visual Studio projekt: 038trackball nebo 086shader nebo 057scene (modifikovaný zdrojový soubor lze vložit beze změny do každého z nich)
Modifikujte a odevzdejte soubor: Construction.cs
Do funkce InitParams() napište své jméno!
Copyright (C) 2010-2017 J.Pelikán, last change: 2019-05-09 17:52:59 +0200 (Thu, 09 May 2019)