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

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

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

我所扩展的这个吸引器每帧对每个粒子的影响基本如下:
它有两个属性,吸引器的位置和一个用于调节引力大小的系数。
首先算出粒子当前位置到影响器位置的向量,并归一化。然后用这个单位向量乘以用于调节引力的系数,用得到的向量加上粒子当前的方向向量,做为该粒子新的方向向量。
插件的扩展过程很简单。下载一个OGRE的源代码包,打开Plugin_ParticleFX工程,看一下其他影响器是怎么创建的,然后比葫芦画瓢定义一个自己的影响器类,在_affectParticles()方法中迭代每个粒子,根据自己的需求改变粒子的属性,然后编译一下,用生成的Plugin_ParticleFX.dll文件覆盖原来的就OK了。此时,就可以在粒子脚本或代码中添加自己的影响器了~