Úkolem je zkonstruovat 3D křivku, která "vyplňuje prostor", je však ji třeba sestavit jako povrchový model složený z trojúhelníků. Konstrukce musí být algoritmická, tj. "geometrie" (polohy vrcholů v prostoru) i "topologie" (napojení vrcholů do trojúhelníků) musí být výsledkem práce Vašeho algoritmu. Požadována je korektní reprezentace tělesa v paměti, kterou lze pro kontrolu nakreslit, vystínovat a uložit případně na disk v PLY formátu.
© Michael Bader
Jako základ slouží projekt 086shader 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í v mnoha různých
módech (čárová kresba, viditelnost bez stínování nebo i s ním, povrchová textura..).
Výslednou 3D scénu půjde uložit na disk (Stanford PLY).
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 stínování 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 jen vykreslování pomocí OpenGL s interaktivním otáčením 3D scénou, bez pokročilejšího stínování. I do tohoto projektu můžete vložit beze změny Váš zdrojový soubor Construction.cs.
Můžete čerpat z následujících zdrojů:
Space-Filling
Curves in 3D (přednáška Michaela Badera) nebo
Stránka s odkazy
Aubrey Jaffer (několik odkazů na články).
Google search (3D SFC images).
Dostanete objekt 3D scény SceneBrep, do kterého budete křivku (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í).
Křivku byste měli reprezentovat jako "potrubí", aby se dala pěkně zobrazit a vystínovat. Klouby (kolena) spojující jednotlivé válcové úseky implementujte jako části rotačního tělesa toroid. Je třeba použít vhodnou jemnost reprezentace válcových i toroidálních úseků, pro složitější křivku můžete zvolit jednodušší reprezentaci jednotlivých komponent a naopak.. Naprogramujte si na jednotlivé komponenty procedury!
Je možná i alternativa - použití pravoúhlých tvarů (ne oblých). Tj. potrubí se čtvercovým / obdílníkovým průřezem. V takovém případě byste neměli sdílet vrcholy sousedních stěn, ale naopak je duplikovat, aby každá stěna měla svoji vlastní normálu.
Pro jednodušší ladění máte možnost zadat iniciální hodnotu textového parametru param
formuláře - k tomu slouží funkce InitParams() (jako obvykle zde vyplňte i své
jméno do parametru name).
Nakonec odevzdejte zdrojový soubor s vhodným nastavením řetězce param!
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: 8. 1. 2017
Základ: 10 bodů (jedna varianta křivky, bez parametrizace),
dalších až 6 bodů: bonus za parametrizaci, varianty a pěkný vzhled při stínování
Visual Studio projekt: 086shader nebo 038trackball (modifikovaný zdrojový soubor lze vložit beze změny do obou z nich)
Modifikujte a odevzdejte soubor: Construction.cs
Do komentáře na první řádce napište své jméno!
V posledním parametru funkce InitParams() rovněž vraťte své celé jméno!
Copyright (C) 2010-2016 J.Pelikán, last change: 2019-05-09 17:52:59 +0200 (Thu, 09 May 2019)