Vymyslete a implementujte animaci kreslenou pouze pomocí vodorovných a svislých úseček. Animace musí být počítána po jednotlivých snímcích ("off-line rendering"), nakonec vyrobíte video-soubor např. programem ffmpeg.
Jako základ poslouží projekt 110animation z repository grcis. Je připravena jednoduchá aplikace, která umí opakovaně pouštět vaši metodu Animation.DrawFrame() a výsledky zapisovat do jednotlivých PNG souborů. Výpočet se provádí v separátních vláknech, takže jej lze v případě potřeby zastavit tlačítkem Stop.
Pohyb nebo změna tvarů v rovině, 3D efekt byste museli sami napodobit vhodnou transformací (např. napodobením perspektivní projekce) a kreslením "odzadu-dopředu" (tzv. malířův algoritmus). Fantazii se meze nekladou, pouze musíte snímky animace kompletně nakreslit vaším programem a pomocí omezených prostředků třídy Canvas (jen H/V čáry, viz níže). To znamená, že mi odevzdáte zdrojový soubor, ze kterého půjde bez použití dalších nástrojů (až na encoding videa nebo doplnění zvukové stopy) animaci vyrobit.
Výstup musíte realizovat přes danou třídu Canvas, která má k dispozici následující API (shodné s úlohou 099):
Metoda Animation.DrawFrame() dostane údaje o čase (viz pilotní implementaci) a referenci na kreslicí objekt Canvas. Metoda má přes něj k dispozici i údaje určující velikost snímku. Dále dostanete textový parametr string param, kterým lze předávat další vhodné údaje z formuláře aplikace. Parametr param nemusíte ve své implementaci využívat. Pokud ano, navrhuji využít možností funkcí Util.ParseKeyValueList() a Util.TryParse() (pro většinu běžných datových typů). Viz pilotní implementace.
Nemůžete předpokládat nic o pořadí vykreslování jednotlivých snímků
animace. Jednotlivá vlákna výpočtu mohou kreslit snímky v libovolném
pořadí. Na začátku výpočtu animace (anebo před jednotlivým snímkem)
se spouští vaše metoda Animation.InitAnimation(), do ní můžete
dát případnou inicializaci globálních sdílených dat, apod.
Pokud budete potřebovat provést nějaký souhrnný výpočet (fyzikální/mechanickou
simulaci apod.), musíte jej umítit také do InitAnimation(). Výsledky
si ve vhodné formě uložte a kreslení jednotlivých snímků animace z nich potom
může čerpat (jen z globálního objektu číst, nedoporučuji ho měnit).
Inicializace parametrů formuláře:
Pro pohodlné ladění i pro odevzdání rozumného nastavení animace můžete modifikovat
inicializační proceduru Animation.InitParams().
Ta se zavolá vždy na začátku při inicializaci formuláře.
Je tam i parametr, přes který se vrací jméno autora, přepište si ho.
Viz např. tento návod. Binárku ffmpeg pro Windows si můžete stáhnout např. zde. Vytvořené video někde vystavte nebo nahrajte na YouTube a pošlete mi na něj odkaz. Nezapomeňte přiložit i zdrojový soubor Animation.cs.
Odevzdat do: 7. 1. 2018
Základ: 5 až 20 bodů podle zajímavosti a obtížnosti
Bonus: za výjimečné řešení
Visual Studio projekt: 110animation
Modifikujte a odevzdejte soubor: Animation.cs
Do funkce InitParams() napište své jméno!
Nezapomeňte poslat odkaz na výsledné video.
Hlasujte na stránce soutěže, do 21. 1. 2018.
Copyright (C) 2010-2018 J.Pelikán, last change: 2020-12-08 00:57:30 +0100 (Tue, 08 Dec 2020)