Úloha 022: Alternativní kamera (generátor paprsků)

Úkolem je implementovat alternativní generátor (kameru, interface ICamera) do našeho paprskového zobrazovače. Kameru začleňte do ukázkové scény a vyzkoušejte, můžete pro lepší demostraci vyrobit vlastní bohatší scénu.

Fish eye example

Základ

Jako základ poslouží projekt 048rtmontecarlo z repository grcis. Je připravena aplikace, která v jednoduchém okně zobrazuje obrázek spočítaný ray-tracingem. Definice scény je v kódu, tu budete muset pro testování Vaší nové kamery upravit (minimálně vyměnit tu kameru).
Pro doplnění Vaší implementace použijte zdrojový soubor MonteCarloRT.cs, do něj budete psát Váš nový kód a nakonec mi jej odevzdáte. I definici scény (CustomScene) tam najdete.

Detaily

Budete muset implementovat nějakou jinou, zajímavou projekci a zpřístupnit ji pro ray-tracing ve formě generátoru paprsků (interface ICamera). Budete se muset seznámit s následujícími komponentami ray-traceru:
  • ICamera - generátor primárních paprsků, obecný interface, ten musíte Vaším modulem splnit. Základem je metoda GetRay(), kterou bude volat každý, kdo potřebuje vygenerovat primární paprsek. Vlastnosti Width, Height a AspectRatio slouží k nastavování rozměrů obrazu (pokud je nastaven poměr AspectRatio, předpokládá se, že se změní výška obrazu, šířka bude naopak zachována).
  • StaticCamera - jednoduchá implementace kamery pro lineární perspektivu. Střed projekce, směr pohledu, Up vektor, horizontální zorné pole ve stupních.. Při Vaší implementaci se můžete touto třídou inspirovat.
  • RayScene - datový objekt obsahující všechny potřebné informace o vykreslované scéně. Do něj musíte zanést Vaši kameru a nahradit tak implicitní StaticCamera. Pro lepší předvedení schopností Vaší kamery by asi bylo vhodné obohatit některou ze standardních scén (viz RayCastingScenes.cs). Z nich můžete vycházet, ale Váš nový kód prosím okopírujte do MonteCarloRT.cs.
Pro jednodušší ladění máte možnost zadat iniciální hodnoty prvků formuláře do funkce InitializeScenes(). Ta bude zavolána jednou při startu aplikace.

Názorný přehled relevantních komponent objektového návrhu našeho ray-traceru najdete také v této prezentaci.

Náměty

Rybí oko - nelineární objektiv s velmi širokým zorným polem (pozor, zde budete asi muset využít možnosti vrátit hodnotu false z API funkce GetRay() - pro ty body v průmětně, pro které neexistuje zobrazovací paprsek..).
Válcová perspektiva - přímý výpočet širokoúhlého (panoramatického) obrázku, místo roviny se promítá do části pláště válce, v extrémním případě do celého 360° okolí kolem "fotoaparátu".
360/180 panorama - panorama obsahující kompletní pohled do 3D světa z místa pozorovatele. Pro použití v realtime/HDR počítačové grafice se používá jednoduché mapování [azimut,výška].
Všesměrová fotografie - existuje mnoho specíálních objektivů a snímacích systémů, můžete se některým inspirovat..

Co odevzdat

Musíte poslat upravený zdrojový soubor MonteCarloRT.cs. Zajímavá nastavení a polohy kamery začleňte do nových definic scén přístupných přes list-box v naší aplikaci. Připojte pár komentářů popisujících Váš přístup, čím jste se inspirovali, apod.

Termín

Odevzdat do: 8. 5. 2016

Body

Základ: 18 bodů (fungující generátor paprsků, minimálně jedna vlastní testovací scéna),
až 8 bodů: bonus za zajímavé projekce, jejich parametrizace apod.,
dalších až 5 bodů: bonus za zajímavé demonstrační scény..

Projekt

Visual Studio projekt: 048rtmontecarlo

Zdrojový soubor

Modifikujte a odevzdejte soubor: MonteCarloRT.cs
Do komentáře na první řádce napište své jméno!


Copyright (C) 2011-2016 J.Pelikán, last change: 2020-05-16 23:04:24 +0200 (Sat, 16 May 2020)