Szerző |
Üzenet |
Lazi
Mr. AmiCon
|
# Elküldve: 2010. Feb. 12. 23:07
Hi!
Nem kifejezetten Amiga programozasi gond, inkabb altalanos. Tukrozodo, hullamzo viz feluletet szeretnek valos idoben letrehozni. Van egy flash effect demo itt, ami tokeletes lenne: http://www.flash-filter.net/water-reflection-effect-online-demo.phtml
Ha tudnatok barmi informaciot az effect mukodeserol osszatokk meg velem. (Weblink, forras, elmelet barmi johet.)
|
Chain-Q
Divatamigás
|
# Elküldve: 2010. Feb. 13. 09:06
A "hullamzo viz" az egyik legregibb bitmap-torzitos demoeffekt. Az altalad linkelt Flashes verzio ket reszbol all. Egyreszt, fog egy duplan szinuszos kepletet, es mikozben fejreallitja a fent lathato bitmapot, a forras bitmap Y koordinatajat eltolja a fenti kepletbol kapott ertekkel. Majd minden frame-ben a szinusz kezdo ertekeit folyamatosan noveli. Igy kapja a hullamzast, nagyjabol. Igazabol hogy mennyire elethu lesz a hullamzas, csak a szinuszos keplet bonyolultsagan mulik, az elv teljesen ugyanaz. A trukk egyebkent egy A500-on akar hardverbol is megvalosithato, copperrel, annyira egyszeru...
A masodik lepesben pedig ezt az igy kapott bitmapot megfeleloen sulyozva elszinezi. Erre megint csak megvannak a megfelelo kepletetek, amiket most had ne kelljen fejbol... Nagyjabol az elv itt meg arra hasonlit, mintha feketebe vagy feherbe fade-elnel el egy kepet, es "feluton" megallnal. Csak nem fekete/feher, hanem egy RGB ertek a "celszin" emiatt a keplet kisse bonyolultabb, de nem veszes meg igy sem.
|
rachy
Tag
|
# Elküldve: 2010. Feb. 13. 14:21
Az elszinezest sima sulyozott atlagolassal a legegyszerubb megoldani:
uj pixel szin = sulytenyezo * eredti_pixel_szine + (1-sulytenyezo) * celszin
Kulon el kell vegezni mindharom RGB osszetevore, a sulytenyezo [0..1] mindket oldalarol zart valos intervallumban van. (Lehet egesz szamokkal is, akkor el kell meg osztani a sulytenyezo maximalis ertekevel, illetve nyilvan a maximumbol kell kivonni a sulytenyezot.)
|
Lazi
Mr. AmiCon
|
# Elküldve: 2010. Feb. 13. 19:07
Koszonom, meglassuk mire jutok. Sajnos copper nem jatszik, mert nincs a celgepben. :)
|
AliveMOon
Tag
|
# Elküldve: 2010. Feb. 16. 00:19 - Szerkesztve: alivemoon
A cooper a dma-t manipulálta, CPU-ban egy kicsit modosított a copy ciklus forrás pointerét kell manipulálni.
struct COLOR4 { U1 r,g,b,a; } U4 w = 320, h = 240; COLOR4 *p_src, *p_dst;
for( U4 y = 0; y < h; y++ ) { for( U4 x = 0; x < w; x++ ) { off_y = w * h * (( cos(time+(PI2*y/h)) + 1.0f ) / (2.0f*2.0f) + y/(h*2.0f)); off_x = w * (( sin(time+(PI2*x/w)) + 1.0f ) / (2.0f*2.0f) + x/(w*2.0f)); p_dst[w*y+x] = p_src[ off_y + off_x ]; }
} Mondjuk ez elég durva megközelítés, de így van egy teljes hullám, jóbban kell osztani a szögfügvényeket akkor enyhébb a hullám
|
Lazi
Mr. AmiCon
|
# Elküldve: 2010. Feb. 21. 22:44 - Szerkesztve: lazi
Eddigi eredmenyemet felraktam ide: kezdobetu.hu/temp/water.zip Van benne os4,mos,win,mac. (A zip el****a a protection biteket, az javitando, elnezest.) Ha megtennetek, hogy velemenyezitek azert halas lennek.
Ami egyenlore megy: egy sima sin hullam, valtozo amplitudoval es hullamhosszal. A grafikan van egy blur es fekete fele vannak huzva a szinek. A tukorkep y iranyban torzitva van. Tobb parameterrel probalkoztam es nekem az tetszik, ahol mar interferal a tukorkep (a szokozzel ugrik teljes hullamra).
Charlie, errol a "duplan szinuszos" kepletrol adnal valami tovabbi infot?
AliveMOon: Koszi, azt meg elemzem majd :)
EDIT: Most nezem, a felirattal ellentetben pocen a bal alt+enter a teljes kepernyo
|
rachy
Tag
|
# Elküldve: 2010. Feb. 21. 23:17
Meg esetleg megprobalhatnad azt, hogy terben a hullamok egyre nagyobbak legyenek. Ez nagyjabol ugy valosithato meg, hogy az az eredeti szinusz bemenethez hozzaadsz egy Y tengely pozicioval aranyos erteket.
|
Lazi
Mr. AmiCon
|
# Elküldve: 2010. Feb. 21. 23:51
Rachy: Az megvolt, de a merteket novelve valoban jobban nez ki. Koszi!
|
AliveMOon
Tag
|
# Elküldve: 2010. Feb. 22. 00:04
A mélységnek megfelelően a frekvenciát kell növelni, tehát ami meszebb van az szélesebb látvány több hulámmal.
|
rachy
Tag
|
# Elküldve: 2010. Feb. 22. 09:03
@AliveMoon
Ezt irtam en is. Hozzaadod az Y koordinatat a szinusz bemenetehez aranyositva -> noveled a frekvenciat.
|
AliveMOon
Tag
|
# Elküldve: 2010. Feb. 22. 14:50 - Szerkesztve: alivemoon
Quoting: rachy Hozzaadod az Y koordinatat a szinusz bemenetehez aranyositva
Össze adás nem túl pontos, hogy a frekvencia növekedjen szorozni kell és nem az időt, mert akkor meszebb gyorsabban hullámzik, mint közelebb, hanem történetesen a fenti példában az (PI2*y/h) tagot.
Bár azt is lehet, hogy két hulámot számolsz folyamatosan és w1*y/h + w2*(1-y/h). w1 és w2 - 0 és 1 közé szaturálva, a soraimba van egy ilyen szaturácio rejtve (sin()+1.0f)/2.0f igy a sin szélső értékei 0 és 1 között vannak és a procikban is van rá külön utasítás, úgy tudoma c-fordító felismeri és egy utasítással megoldja.
|