Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.24;
Скачать: CL | DM;

Вниз

Эффект воды в 2D   Найти похожие ветки 

 
Quattro ©   (2006-04-18 12:19) [0]

Добрый день! скажите, пожалуйста, вы часом не знаете как реализовывается сие чудо в делфи??
увидел пример вот здесь, но он, к сожалению , на С++
http://ishodniki.ru/base/Cpp/cpp_specialfx.zip


 
a22 ©   (2006-04-18 15:39) [1]

Пример очень простой, вы поясните, что конкретно вам непонятно? Не описывать же весь принцип работы программы, которую вы сами представили как образец...


 
ПЛОВ ©   (2006-04-19 14:41) [2]


> как реализовывается сие чудо в делфи??

Точно так же.

> что конкретно вам непонятно?

Непонятен, видимо, перевод с С++ на Паскаль... Сам испытывал поначалу затруднения, потом понял что нужно знать Си. Просто нужно и все, даже если ты пользуешься только Паскалем...


 
mlm68 ©   (2006-04-23 21:05) [3]

Интересный эффект, красиво. Попробую перевести в делфи


 
Quattro ©   (2006-04-24 16:28) [4]

В том то и дело, что Си я, к сожалению, не знаю..:(...почему не понимаю принцип действия..:(


 
mlm68 ©   (2006-05-05 21:47) [5]

Нифига не получается, нужно си учить:(((


 
programania ©   (2006-05-07 23:05) [6]


program Wave; // Делает волны на экране

{$R-,S-,B-}
uses Graphics, forms, SysUtils, windows, Classes, mmSystem, dialogs;

const maxX=1280; maxY=960; q=24;

var
 m: array[0..maxY+1, 0..maxX+1]  of single;
 v: array[1..maxY, 1..maxX,1..3] of byte;
 a: array[1..q] of Graphics.tBitmap;
 s: pbytearray;
 d,w,h,hh,g,ww,dx,dy,x,y,f,i,k: integer;
 b,e: Graphics.tBitmap;
 ris: boolean=false;
 ce:        tCanvas;
 z,r,w1,w2: extended;
 pt,pn:     tPoint;
 t:         cardinal;
 uTimerID:  uint=0;
 mMsg:      TMsg;

Procedure cb(var b: Graphics.tBitmap);
begin
b:=Graphics.tBitMap.create; b.pixelformat:=pf24bit; b.width:=w; b.height:=h;
end;

procedure FNTimeCallBack(uTimerID, uMessage: UINT;dwUser, dw1, dw2: DWORD) stdcall;
begin
 ce.Draw(0,0,a[f]);
 GetCursorPos(pt);
 if abs(pn.x-pt.x)+abs(pn.y-pt.y)>100 then begin
   ce.Draw(0,0,e);
   if uTimerID<>0 then timeKillEvent(uTimerID);
   halt;
 end;
 inc(f);
 if f>q then f:=1;
end;

begin
w:=screen.width;  if w>maxX then w:=maxX-1; ww:=w div 2;
h:=screen.height; if h>maxY then h:=maxY-1; hh:=h*4;

cb(b);
cb(e);
for i:=1 to q do cb(a[i]);

ce:=tCanvas.create;
ce.Handle:=GetDC(0);

e.canvas.CopyRect(rect(0,0,w,h),  ce,rect(0,0,w,h));

with ce.font do begin size:=18; color:=$FF; style:=[fsBold] end;
ce.textOut(ww-60,h div 2-40," Подождите ");
for y:=0 to h-1 do move(e.ScanLine[y]^,v[y,1,1],w*3);

//расчет волн заранее
for f:=1 to q do begin
for y:=1 to h do
for x:=1 to w do begin
 d:=ww-x;
 r :=sqrt(sqr(d)+sqr(y))   +f*24;   w1:=sin(r/48)*(127+f*2);
 r :=sqrt(sqr(d)+sqr(hh-y))+f*17;   w2:=sin(r/32)*(127-f);
 z :=w1/3 + w2/4;
 m[y,x]:=z;
 if x=1 then m[y,0]  :=z else
 if x=w then m[y,w+1]:=z;
 if y=1 then m[0,x]  :=z else
 if y=w then m[w+1,x]:=z;
end;

for y:=1 to h do begin
 s:=a[f].scanLine[y-1];
 g:=0;
 for x:=1 to w do begin
   dy:=y+trunc((m[y-1,x] - m[y+1,x])*4);
   dx:=x+trunc((m[y,x-1] - m[y,x+1])*4);
   if dy>h then dy:=y else if dy<1 then dy:=1;
   if dx>w then dx:=w else if dx<1 then dx:=1;
   k:=trunc(m[y,x]);
   i:=v[dy,dx,1]+k; if i>255 then i:=255 else if i<0 then i:=0; s[g]:=i; inc(g);
   i:=v[dy,dx,2]+k; if i>255 then i:=255 else if i<0 then i:=0; s[g]:=i; inc(g);
   i:=v[dy,dx,3]+k; if i>255 then i:=255 else if i<0 then i:=0; s[g]:=i; inc(g);
 end;
end;

end;

GetCursorPos(pn);
f:=1;                 //20 кадров в сек
uTimerID:=timeSetEvent (50,0,@FNTimeCallBack,0,TIME_PERIODIC);
while GetMessage(mMsg,0,0,0) do DispatchMessage(mMsg);
end.



Страницы: 1 вся ветка

Текущий архив: 2006.12.24;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.034 c
2-1165230352
IGo
2006-12-04 14:05
2006.12.24
Не отображается Label, пока не загрузится OLE объект


15-1164834016
Cyrax
2006-11-30 00:00
2006.12.24
Структура .vdx-файлов


4-1155660641
Psychedelic
2006-08-15 20:50
2006.12.24
Неверное определение версии Windows


15-1165225520
Piter
2006-12-04 12:45
2006.12.24
А сколько стоит бензин в США?


15-1164988335
AlexanderMS
2006-12-01 18:52
2006.12.24
Как "разрешить" скрипты в Power Point?