úloha 046: Animace kamery pro ray-tracing

Úkolem je implementovat animovanou kameru do paprskového zobrazovače (IRayScene). Kamera by měla být schopna se v čase plynule posunovat i otáčet směr pohledu.
Ideální by bylo navrhnout nějaký jednoduchý skriptovací systém, pomocí kterého by se dala kamerová animace definovat. Textové skripty by se daly snadno editovat a do zobrazovací aplikace načítat.

Kamera: de facto je to generátor paprsků, splňující interface ICamera. Pro účely animace budeme muset přidat ještě implementaci interface ITimeDependent (pro obecnou závislost objektu na čase). Celá RT scéna je uzavřena do objektu IRayScene, v našem případě již class RayScene : AnimatedRayScene, tj. nastavování času pro celou scénu je implementováno, vy musíte jen nahradit statickou kamerou vaší speciální implementací class AnimatedCamera.

Předek: při implementaci je vhodné vycházet z šablony AnimatedCamera, je tam již připravena metoda setTime(), do které můžete doplnit změnu stavu kamery v závislosti na čase. Nezapomeňte tu novou kameru použít - v konstruktoru RayScene(). Pozn: můj kod ve třídě AnimatedCamera implementuje kameru, která umí "oblétávat" scénu po kruhové dráze, pohled je stále zaměřen do jednoho bodu.

Náměty: je potřeba si vybrat nějakou metodu hladké interpolace posunutí (translace) a orientace kamery. Pro translaci bych doporučil některou z Hermitovských interpolačních křivek (např. Catmull-Rom spline), pro orientaci kvaterniony (obojí si můžete přečíst v prezentaci hwmath.pdf).
Implementace: některé křivky jsou mj. v jazyce C implementovány v repository ogl, stejně tak kvaterniony. Kvaterniony máme též v knihovně OpenTK, která se již v našich projektech používá.
Dejte si pozor, aby váš kód byl re-entrantní, protože se bude pouštět v paralelním prostředí! (již tento náš projekt 046cameranim používá paralelní výpočet jednotlivých snímků animace ve více vláknech).

Co modifikovat: ve zdrojovém souboru RayTracingAnim.cs modifikujte třídu class AnimatedCamera.
Ve scéně tuto novou kameru použijte (konstruktor).
Navrhněte nějakou zajímavou animaci kamery, která by váš kód dobře demonstrovala. Data animace (skript) můžete vložit do programu.

Co odevzdat: musíte poslat zdrojový soubor RayTracingAnim.cs. Navíc mi napište, pro jaký časový interval máte data animace navržena. U této úlohy ocením, když vyrobíte video a uploadnete ho např. na YouTube.

Animations ukázky animace kamerou

TERMÍN: do 20. 5. 2012

BODY: základ 25 bodů

PROJEKT: 046cameranim

ZDROJOVÝ SOUBOR: RayTracingAnim.cs


[Cvičení NPGR004]  [Návody k zápočtům v C#]  [Přednášky a semináře]  [Odkazy na demonstrace]

Valid XHTML 1.1 Copyright (C) 2012 J.Pelikán, last change: $Date: 2013-11-22 23:48:14 +0100 (Fri, 22 Nov 2013) $
Send comments/requests to pepca.at.cgg.mff.cuni.cz