Úkolem je programem zkonstruovat 3D scénu, která je složena pouze z úseček (lomených čar). Dostanete k dispozici prostředí s implementovaným povrchovým modelem scény (B-rep) (může obsahovat i úsečky, což nyní využijeme). Aplikace umí scénu vykreslit a interaktivně s ní lze otáčet systémem Trackball.
Jako základ poslouží projekt 086shaders 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í pomocí GPU, můžete
zapnout stínování, pokud Vaše data budou obsahovat normálové vektory. Výsledný obrázek (bitmapu) resp. 3D scénu
půjde uložit na disk (jen pokud by byla složená z trojúhelníků – viz formát Wavefront OBJ).
Pro konstrukci Vaší scény budete muset modifikovat předem založenou
třídu Construction nacházející se ve zdrojovém souboru
Construction.lines.cs. Konstrukční metoda se jmenuje Construction.AddMesh().
Stínování není potřeba nastavovat, u úseček by bylo obtížné definovat normálové vektory!
Respektujte transformační matici m, kterou musíte transformovat
všechny vkládané vrcholy (Vector3.TransformPosition()) i jejich případné normálové vrcholy
(Vector3.TransformVector()).
Můžete přemýšlet o zobecnění nápadu, který jste měli při řešení úlohy
092.
Nebo naprogramujte nějakou pěknou prostorovou křivku
(ale ne prosím zobecněnou Lissajous křivku z pilotní implementace). Preferujeme
pěkné křivky, které půjde modifikovat pomocí textových parametrů.
Příklad akceptovatelného zobecnění je 3D varianta tzv. křivky Rose.
Pozor, musíte definici rozšířit o třetí složku souřadnic, třeba se Vám to nějak pěkně podaří.
...
Ve složce projektu 086shader jsou dva soubory generující scénu: Construction.lines.cs a Construction.cs - ten druhý se týká jiné úlohy. Před řešením z projektu (v okně Solution Explorer ve Visual Studiu) odeberte Construction.cs a přidejte Construction.lines.cs.
Dostanete objekt 3D scény SceneBrep, do kterého budete úsečky/lomené čáry přidávat, dále instanční matici transformace Matrix4 a textový parametr pro volbu varianty konstrukce (např. typ křivky/scény, 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šich objektů (respektujte 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().
Odevzdat do: 12. 1. 2020
Základ: 6 bodů (implementace nějakého vlastního nápadu nebo nějaké netriviální křivky podle literatury).
Bonus až 6 bodů za invenci, pěkné vybarvení, estetiku, apod.
Visual Studio projekt: 086shader
Modifikujte a odevzdejte soubor: Construction.lines.cs
Do funkce InitParams() napište své jméno!
Copyright (C) 2010-2020 J.Pelikán, last change: 2020-01-09 12:03:24 +0100 (Thu, 09 Jan 2020)