Nie przypuszczałem, że na stare lata zacznę robić karierę w branży filmowej... a jednak! I choć żona nie daje mi szans w Hollywood, mam zaszczyt zaprezentować mój pierwszy, niemy film - 30 sekundowy obraz, pt.: "Paprotka", mam nadzieję, że się będzie podobał!
Kombinowałem od jakiegoś czasu jak tu w najprostszy sposób, z fraktalami, przejść od "statycznej" grafiki, do "dynamicznej" akcji... Wreszcie coś tam się udało wykombinować - rozwiązanie nie jest idealne, jeszcze jest dość niedopracowane, ale na zrobienie pierwszego filmiku wystarczyło :) Pomysł polega na małej modyfikacji metody rysującej fraktal - wartości skalowania grafiki przekazywane są jako parametr wywołania, to pozwala wykorzystać metodę do wielokrotnego wykonania - tworzenia klatek filmu, dla minimalnych zmian w skalowaniu wykresu funkcji. Do tego dodajmy metodę obliczającą skalowanie dla kolejnych klatek:
public double[] getParams(int i) { // start - od takiej skali zaczynamy double[] a = {-3,0,3,10}; // 12 klatek/s * 30 sek int iter = 12 * 30; // stop - na takiej skali kończymy double[] b = {-0.1,5,0.1,5.5}; // aktualne skalowanie double[] res = {0,0,0,0}; // wyliczamy skalowanie dla aktualnej klatki if(i <= iter) { res[0] = a[0] - (((a[0]-b[0])/iter) * i); res[1] = a[1] - (((a[1]-b[1])/iter) * i); res[2] = a[2] - (((a[2]-b[2])/iter) * i); res[3] = a[3] - (((a[3]-b[3])/iter) * i); } else res = null; return res; }
i pętlę główną tworzącą kolejne klatki filmu:
int i = 0; // jeżeli ciągle mamy jakieś klatki do narysowania, to pobierz skalowanie dla danej klatki i... while((params = f.getParams(i+1)) != null) { // wylicz fraktal BufferedImage image = f.draw(params); // zapisz klatkę zapisz(image, outfilename + "-" + i++); // info o zapisanej klatce System.out.print( "."); }
w wyniku otrzymamy mnóstwo plików graficznych - klatek filmu, teraz wystarczy je tylko "połączyć" w film wykorzystując np. avconv:
avconv -r 12 -i klatka-%d.png -b:v 1000K film.mp4
i można wrzucać na youtube! :)
Dla zainteresowanych, pełne kody dostępna są na javaforge: http://www.javaforge.com/scm/dir/268686/trunk/trunk/open
Strona mojego projektu związanego z fraktalami: http://luka.sh/projekty/fraktale
Wykorzystany w filmie fraktal, paprotkę, można "spotkać" również na: http://luka.sh/fraktale/f06