粒子系统吸引器

我们经常会在动画片或科幻电影里看到这样的场景:某极具毁灭性的光束武器被启动了,在发射前,它会先把巨大的能量聚集起来,这时大量的粒子被集中在炮口,然后,一道耀眼的光束射向目标。咻~
这个场景中,大量粒子被集中在炮口的过程是一个非常酷的粒子效果,这样的效果也经常被应用到游戏当中。这两天在写光效脚本时想要在一些光效中加入这种效果,但不幸的是,OGRE自带的粒子影响器并不支持,于是决定扩展一下它的Plugin_ParticleFX插件,加入一个吸引器。有了吸引器后,好多原来不能实现的效果,现在都可以很好的实现^_^
上几张图先~
1、没有受吸引器影响的两束粒子

2、现在在那个人的头顶放一个吸引器,受到吸引器的影响,粒子的运动轨迹偏移了~

3、场景的中央有一个吸引器,像一个黑洞一样,把靠近它的星体无情的吞噬掉


我所扩展的这个吸引器每帧对每个粒子的影响基本如下:
它有两个属性,吸引器的位置和一个用于调节引力大小的系数。
首先算出粒子当前位置到影响器位置的向量,并归一化。然后用这个单位向量乘以用于调节引力的系数,用得到的向量加上粒子当前的方向向量,做为该粒子新的方向向量。

插件的扩展过程很简单。下载一个OGRE的源代码包,打开Plugin_ParticleFX工程,看一下其他影响器是怎么创建的,然后比葫芦画瓢定义一个自己的影响器类,在_affectParticles()方法中迭代每个粒子,根据自己的需求改变粒子的属性,然后编译一下,用生成的Plugin_ParticleFX.dll文件覆盖原来的就OK了。此时,就可以在粒子脚本或代码中添加自己的影响器了~

 

 

posted on 2007-09-11 19:02 Creator_Chen 阅读(275) 评论(6)  编辑 收藏 引用 所属分类: OGRE游戏开发

评论

# re: 粒子系统吸引器 2007-12-11 09:53 小生有礼了

请问你的吸引器是如何更改每个粒子的用力的?请指教!  回复  更多评论   

# re: 粒子系统吸引器 2007-12-12 20:08 Creator_Chen

首先算出粒子当前位置到影响器位置的向量,并归一化。这个向量的方向就表示了引力的方向,向量的长度就是引力的大小。现在是引力1,因为是单位向量。然后用这个单位向量乘以一个用于调节引力的系数,我想让引力是5,我就乘以一个5,用得到的向量再加上粒子当前的方向向量,做为粒子新的方向向量就OK了。在OGRE粒子系统内部,粒子的方向向量既表示粒子移动的方向,又表示粒子移动的速度(向量的长度)。  回复  更多评论   

# re: 粒子系统吸引器 2007-12-15 10:33 小生有礼了

也就是说,只要改变粒子的受力方向就可以达到吸引效果了吧。比如,我在人物的旁边放上两个粒子(Linear Force Affector 类型),我如果把线性力的方向设为人物的vector方向,也就可以达到你的效果了吧,不知理解是否正确?  回复  更多评论   

# re: 粒子系统吸引器 2007-12-16 20:58 Creator_Chen

LinearForce Affector也算是一种吸引器吧,但是它的引力源在无限远处。要想得到文中截图的效果,引力源要离粒子源很近才可以。所以,单单只用LinearForce Affector是不行的,要扩展OGRE中粒子系统的插件。  回复  更多评论   

# re: 粒子系统吸引器 2007-12-20 16:48 小生有礼了

请问你的引力源是如何定义的?还有,当粒子到达引力源的时候,你如何当这个粒子消亡呢?  回复  更多评论   

# re: 粒子系统吸引器[未登录] 2007-12-20 17:31 Creator_Chen

定义引力源只需要一个表示位置的3D向量和一个用于调节引力大小的浮点型系数。粒子何时消亡是由粒子的生命时间决定的,与粒子到引力源的距离无关。  回复  更多评论   



标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
 
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
 
相关链接:


<2008年10月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(4)

随笔分类

随笔档案

Music

友情链接

搜索

最新评论

阅读排行榜

评论排行榜