当前位置: 首页 > 学习 > 电脑学习 > 程序设计 > VC > 实例分析类 > 正文

制作光墙效果

http://www.zk168.com.cn  招考学习网 2006-4-16 22:24:48
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
先给大家看看效果:



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

首先,看得出来,火焰有个共同点,底部是最亮的,顶部是最暗的,当中是一个过渡.怎么才能在程序中很方便的显示过渡色调呢?我的建议是建一个调色版,看到抓图最顶部的那条由暗到亮的线条了吗?那就是我在这个演示里所用到的调色版.这样在实时渲染的时候仅仅将调色版索引减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
-----------------------------------------------------------[交流]-[打印]-[发送]-[收藏]--
最新入库:
 
·实质、过程及意义——阿多尔诺“否定的辩证法”探微
·从Ontology的译名之争看哲学术语的翻译原则
·论马克思主义哲学经典的解释——解释学方法及其在马克
·中国哲学当前的核心与周边问题
·和合学与21世纪文化价值和科技
·中国文化的和合精神与21世纪
·宗教之间理当相互宽容
·上半个世纪的自由主义
·殷周至春秋时期神人关系之演进
·大学之道:构建以“三纲八目”为核心的道德修养体系
相关内容:
 
网友点评:
 
会员名称:
密码:匿名 ·注册·忘记密码?
评论内容:
(最多300个字符)
  查看评论
友情提醒:
 1.库中的资料大都来自互联网、网友上传、各类书籍,在录入的过程中难免会出现错误,恳请网
 友来信指正!
 2.如果网友在本库中未能找到所需要的材料,请登陆到我们的论坛《招考学习网》版块!
 3.考友想加入招考学习网的编辑部,请发信到XueXiWang#Gmail.com(#改为@)附带个人简历
 4.如需转载请注明出处及作者,谢谢合作!
 5.如果您有更好的建议或意见请EMAIL:XueXiWang#Gmail.com (#改为@)
 6.凡标题中有注有“[NO]”字样均不含答案且答案整理中.
 7.如本库中转载文章涉及版权等问题,请相关网站或作者在两周内发邮件通知(EMAIL:  XueXiWang#Gmail.com (#改为@))我们,我们接到通知后立即删除该文章及链接!
你问我答 更多>>