tr-demoscene
the scene => coding => teori => Konuyu başlatan: horselogy - 26.07.2009 19:59:06
-
http://www.pouet.net/screenshots/11765.gif şu ekran görüntüsündeki efekti yapmak istiyorum. 2 boyutlu dalgalanan su efekti. internette aradım ama bulamadım belki adını tam bilmediğimdendir. Bu efekt ne diye anılır? ve nasıl yapılır? şöyle kısa bir tarif alsam sanki yapıcam kendim :)
-
still image'dan tam olarak düşündüğüm efekt olup olmadığını anlamadım ama, tahmin ettiğim şeyse arkaplan olarak bir adet su görseli (üzerinde karanın yansımasıyla beraber) koyulup onun üzerine de scanline hareket ettirilerek yapılabiliyor sanırım.
-
e bu açıklama da çok basit oldu hiç birşey anlamadım :)
-
e bu açıklama da çok basit oldu hiç birşey anlamadım :)
peki, o aman şöyle bir link vereyim daha iyi anlaşılabilir http://ercanaltug.blogspot.com/2008/09/flash-maske-ile-su-efektleri.html
-
Abi yanlış hatırlamıyorsam o basit bir sinüs efekti idi ya. Aslında fredinin söylediği gibi ama verdiği örnekte dalga düz ilerliyor. Bu efektte sinüs dalgası şeklinde idi. Fakat ekranın ortasında daha küçük bir sinüs dalgası, ekranın altına indikçe sinüs dalgasının boyutu büyüyor. Yüzde %80 ihtimalle Anes %20 ihtimalle Spritus kodlamıştır efekti. Görürlerse onlar daha iyi açıklar sanırım.
-
selam;
efekti ben kodladım.
orjinal adı lake olan efektin yapısı da ragnor'un dediği gibi basit. efekt kabaca, resmi ekrana basan trace rutinin içinde y eksenine sinüs uygulayarak elde ediliyor diyebiliriz. fake kod ile izah edersek :
loop
{
n++
for x=1 to picWidth
{
for y=1 to picHeight
{
pixel (x, y, picture(x, [B]sin(y+n)[/B]))
}
}
}
koyu kısım olayın en önemli noktası. onu silip y yazsaydık ekrana sadece resmi düz basacaktı.
qbasic ile yazdığım çalışır örnek:
SCREEN 13
DIM RESIM(79, 94), COSMAP(30)
FOR n = 0 TO 30
COSMAP(n) = COS(n * 3.14 / 15)
NEXT
FOR X = 0 TO 78
FOR Y = 0 TO 93
RESIM(X, Y) = X XOR Y
PSET (X + 120, Y), X XOR Y
NEXT
NEXT
CLOSE 1
DO
n = n - 1
F = .1
FOR Y = 0 TO 93
F = F + .002
FOR X = 0 TO 78
c = 93 - Y + COSMAP(ABS(Y / F + n) MOD 30) * 5
IF c > 93 THEN c = 93
IF c < 0 THEN c = 0
PSET (120 + X, 95 + Y), RESIM(X, c)
NEXT
NEXT
xx:
X = INP(&H3DA)
IF (X AND 8) = 1 THEN GOTO xx
IF (X AND 8) = 0 THEN GOTO xx
LOOP UNTIL INKEY$ <> ""
-
bende yaptım şimdi ehe :D (mutluluk hormonu)
Teşekkürler açıklamalar için :D