求下雨效果的源码

redpigman 2003-04-17 04:57:23
谁有下雨效果的源码,包括空中下落状态和落在水面的状态
...全文
25 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
pingtai 2003-04-20
  • 打赏
  • 举报
回复
这里有OpenGL源代码,是模拟下雨的www.openglsource.com
DarthVader 2003-04-17
  • 打赏
  • 举报
回复
落到水面以后画圈圈 也可以有Alpha混合
DarthVader 2003-04-17
  • 打赏
  • 举报
回复
一个很简单的小例子 仅供参考
其中pts是微粒结构数组 Draw_Pixel()函数用来在缓冲区里面画点

void Rain()
{// rain effect
int i;
static float wind_force_x = 0,wind_force_y = 0;

for(i=0;i<NUM_PTS;i++)
{
if(pts[i].state!=PT_MOVING&&rand()%99>97)// generate active particles
{
// born place,a screen-wide rectangle
pts[i].x = rand()%SCREEN_WIDTH;
pts[i].y = rand()%36;

// generate a color for the current particle
pts[i].color = pt_color;

pts[i].life = 256; // lives for 64 frames

// initialize velocities
pts[i].xv = 0;
pts[i].yv = 0.05 * ( rand()%3 );
pts[i].ya = 0.002 * ( rand()%8 + 1 );

pts[i].state = PT_MOVING; // move it
}
if(pts[i].state==PT_MOVING)// move active particles
{
// there is air that holds rain drops back
if(pts[i].yv>3.0)pts[i].ya *= 0.75;

// control the power of wind,so u're a Druid,player!
if(KEY_DOWN(VK_LEFT))wind_force_x -= 0.0001;
if(KEY_DOWN(VK_RIGHT))wind_force_x += 0.0001;
if(wind_force_x>3.0||wind_force_x<-3.0)
wind_force_x = wind_force_x>3.0?3.0:-3.0;
if(KEY_DOWN(VK_UP))wind_force_y -= 0.0001;
if(KEY_DOWN(VK_DOWN))wind_force_y += 0.0001;
if(wind_force_y>1.0||wind_force_y<-1.0)
wind_force_y = wind_force_y>1.0?1.0:-1.0;

// change vels and acels
pts[i].yv += pts[i].ya;
pts[i].y += pts[i].yv;

pts[i].x += wind_force_x;
pts[i].y += wind_force_y;

// dead when life exhausted
if(pts[i].life-- < 0 || pts[i].x <= 0 || pts[i].y <= 0 ||
pts[i].x >= SCREEN_WIDTH || pts[i].y >= SCREEN_HEIGHT)
{
pts[i].state = PT_DEAD;
continue;
}

// draw rain particles, if you want snow,draw greater grains

Draw_Pixel((int)pts[i].x,(int)pts[i].y,pts[i].color,back_buffer,back_lpitch);

// Single pixel looks don't like rain drop
// so I add an extra pixel to make it more real
// note wind_force effects rain drops' direction

if(wind_force_x<-0.5) // wind blows from east to west
Draw_Pixel((int)pts[i].x-1,(int)pts[i].y+1,pts[i].color,back_buffer,back_lpitch);
else
if(wind_force_x>0.5) // wind blows from west to east
Draw_Pixel((int)pts[i].x+1,(int)pts[i].y+1,pts[i].color,back_buffer,back_lpitch);
else // wind is too weak to be considered
Draw_Pixel((int)pts[i].x,(int)pts[i].y+1,pts[i].color,back_buffer,back_lpitch);
}
}
}

8,304

社区成员

发帖
与我相关
我的任务
社区描述
游戏开发相关内容讨论专区
社区管理员
  • 游戏开发
  • 呆呆敲代码的小Y
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧