Ú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.
TERMÍN: do 20. 5. 2012
BODY: základ 25 bodů
PROJEKT: 046cameranim
ZDROJOVÝ SOUBOR: RayTracingAnim.cs
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