Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
C/C++
Generování ohně
27. února 2002, 00.00 | Máte rádi jednoduché prográmky, které generují líbivé grafické efekty? Já taky. Nedávno jsem si stáhl jeden, který generoval oheň a mně se zalíbil. Měl jednu vadu, byl strašně pomalý. Tento tutoriál vám ukáže jak vytvořit dva druhy ohně.
Máte rádi jednoduché prográmky, které generují líbivé grafické efekty? Já taky. Nedávno jsem si stáhl jeden, který generoval oheň a mně se zalíbil. Měl jednu vadu, byl strašně pomalý. Tento tutoriál vám ukáže jak vytvořit dva druhy ohně. Zdrojový kód si můžete stáhnout ZDE.
Nejdřív teorie, jak to vůbec funguje. Jedeme řádek po řádku a výsledná barva pixelu se spočítá jako průměr barev 3 sousedních pixelů o řádek níže + jednoho o dva níže. Mohlo by to vypadat asi takhle: pixel[x][y]=(pixel[x-1][y+1]+pixel[x][y+1]+pixel[x+1][y+1]+pixel[x][y+2]) /4. Na obrázku to je dobře vidět: P1=(P2+P3+P4+P5)/4.
Pokud ste již zkoušeli dělat něco s pixelama pomocí funkcí GetPixel(..) a SetPixel(..), tak ste zjistili, že to je neskutečně pomalé, proto jsem použil paletu a buffer ve kterém mám uloženy indexy barev. Tento buffer zkopíruji do surfacu a ten zobrazím.
Výsledný efekt závisí na použité paletě barev. Já použil přechod z černé přes červenou až do žluté, ale pokud si chcete vytvořit plamen modrý, tak není problém a paletu si vytvoříme podobnou, akurát s použitím modré barvy místo žluté a červené. Používám paletu uloženou jako bitmapu, protože se tak jednoduše načítá a dobře se upravuje pokud nejsme spokojeni s výsledkem.
Dvě důležité proměnné jsou: WORD Paleta[256] - sem se uloží pod index jednotlivé barvy
WORD buffer[vyska+1][sirka+1] - použijeme ho pro výpočty
Vytvoření palety:
|
Nejprve si na poslední dva řádky dáme náhodně pixlíky, které nám poslouží jako palivo pro ohýnek. Po vypočtení indexů barev v surfacu zkopírujeme buffer do surfacu.
Výpočet dalšího framu:
|
Počítání indexů a kopírování do surfacu provádíme ve smyčce a na obrazovce nám hoří krásný ohýnek.
Diskuse k článku
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007