Back to top

Paprotka - nieme kino

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