您的位置:首页 > VC 制作光墙效果
站内搜索

制作光墙效果

版权所有:Lythm
文章出处:东日制作室
转载请与作者联系

先给大家看看效果:



在学会光墙效果之前,首先要知道,最基本的(可能也是最经典的)火焰效果算法, 下面,我详细说一下,很简单当然,我所讲的算法都是指实时运算的.

首先,看得出来,火焰有个共同点,底部是最亮的,顶部是最暗的,当中是一个过渡.怎么才能在程序中很方便的显示过渡色调呢?我的建议是建一个调色版,看到抓图最顶部的那条由暗到亮的线条了吗?那就是我在这个演示里所用到的调色版.这样在实时渲染的时候仅仅将调色版索引减1就可以达到从暗到亮的效果了.

这是我用的调色版生成的方法,你也可以自己做一个你所需要的,比如加上蓝色火苗的颜色,灰的颜色...等等.

代码大致如下:

WORD p[256]; //我用的是16bit色555模式

ZeroMemory(p,sizeof(p));

for(int i=0;i<64;++i)

{

p[i]=(i/2)<<10;

p[i+64]=0x7c00 | ((i/2)<<5&0x3e0);

p[i+128]=0x7c00 | 0x3e0 | ((i/2)&0x1f);

p[i+191]=0xffff;

}

然后定义一个用来运算的缓冲

char f[320][220]; //因为是对调色版索引进行计算,所以用char就够了(如果你需要256以上颜色,char就不够

//火焰的底部往往是最亮的所以在最底部加上燃料

for(int x=0;x
{

j=rand()*width/RAND_MAX;

block=rand()/RAND_MAX>0.5?255:0;

f[height-2][j]=block;

}

火星可以是很大一块,或很小一块,只要加上一个方阵就行了,这里从简,一个像素一个像素分别加

还可以加上一些粒子,这样就像往火堆里撒了一把木硝一样

//从略

接着就开始生成火焰,从上往下渲染,先看源码:

for(int y=0;y
for(int x=0;x
{

f[y][x]=(f[y+1][x]>0)?f[y+1][x]-1:0;

}

应该能看出点名堂了吧,因为越往上越暗,所以只要简单的将下边的像素索引值减1就成了当前像素的值 当然这只是基本的还不够,火焰不是这么精确的递减的,你可以用简单的模糊效果,比如取相邻像素平均值渲染完把它话到屏幕上就行了,是不是很简单:)

大致知道了火焰效果的实现后,做出光墙效果就简单了,只要按火焰燃烧的方向生成就行了,也就是说从下到上

上面的代码改成:

for(int y=height-2;y>0;--y)

for(int x=0;x
{

f[y][x]=(f[y+1][x]>0)?f[y+1][x]-1:0;

}

其实我只是为了说明一种方法,你可以用这种方法来制作其他的效果,充分发挥自己的想象力.另外不要以为现在已经进入高彩乃至真彩的时代就小看调色版技术,很多效果用调色版技术可以使编程更简单,更直观.

就这么简单,说完了.

lythm于2001,5,6凌晨

欢迎讨论: lythm@sunistudio.com

  • 上一篇:在消息框按钮上显示Yes与No
  • 下一篇:在视图中同步显示鼠标的位置