Hírek | Archívum | Fórum | IRC | Amiga | AmigaOS | FAQ | RSS

 - Fórumok - Regisztráció - Keresés - Statisztika - Szabályzat - Pegasos.hu fórum
forum.amigaspirit.hu / Fejlesztés / tukrozodes
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.

forum.amigaspirit.hu / Fejlesztés / tukrozodes
 
 

Powered by discussion forum software miniBB™ © 2001-2019