xna中加入Mercury粒子系统

粒子系统表示三维计算机图形学中模拟一些特定的模糊现象的技术,而这些现象用其它传统的渲染技术难以实现的真实感的 game physics。经常使用粒子系统模拟的现象有火、爆炸、烟、水流、火花、落叶、云、雾、雪、尘、流星尾迹或者象发光轨迹这样的抽象视觉效果等等。


典型的粒子系统更新循环可以划分为两个不同的阶段:参数更新/模拟阶段以及渲染阶段。每个循环执行每一帧动画。

模拟阶段

在模拟阶段,根据生成速度以及更新间隔计算新粒子的数目,每个粒子根据发射器的位置及给定的生成区域在特定的三维空间位置生成,并且根据发 射器的参数初始化每个粒子的速度、颜色、生命周期等等参数。然后检查每个粒子是否已经超出了生命周期,一旦超出就将这些粒子剔出模拟过程,否则就根据物理模拟更改粒子的位置与特性,这些物理模拟可能像将速度加到当前位置或者调整速度抵消摩擦这样简单,也可能像将外力考虑进去计算正确的物理抛射轨迹那样复杂。另外,经常需要检查与特殊三维物体的碰撞以使粒子从障碍物弹回。由于粒子之间的碰撞计算量很大并且对于大多数模拟来说没有必要,所以很少使用粒子之间的碰撞。
  每个粒子系统都有用于其中每个粒子的特定规则,通常这些规则涉及到粒子生命周期的插值过程。例如,许多系统在粒子生命周期中对离子的阿尔法值即透明性 进行插值直到粒子湮灭。

渲染阶段

在更新完成之后,通常每个 例子用经过纹理映射 的四边形sprite进行渲染,也就是说四边形总是面向观察者。但是,这个过程不是必须的,在一些低分辨率或者处理能力有限的场合,粒子可能仅仅渲染成一个像素 ,在离线渲染 中甚至渲染成一个元球,从粒子元球计算出的等值面可以得到相当好的液体表面。另外,也可以用三维网格渲染粒子。
  3DStudioMAX3通过专门的空间变形来控制一个粒子系统和场景之间的交互作用,还可以控制粒子本身的可繁殖特性,这些特性允许粒子在碰撞时发生变异、繁殖或者死亡。简单地说,粒子系统是一些粒子的集合,通过指定发射源在发射粒子流 的同时创建各种动画效果。在3DStudioMAX中,粒子系统是一个对象,而发射的粒子是子对象 。将粒子系统作为一个整体来设置动画,并且随时调整粒子系统的属性,以控制每一个粒子的行为。在3DStudioMAX1.0版本中,粒子系统只有Spray(喷射)和Snow(雪)两种,虽然它们是最简单的粒子系统但是效果很好,在制作流水、喷泉、灰尘时依然适用。并且高级粒子系统的创建思想也基于Spray和Snow的创建原则,只是加强了动画设计师控制粒子行为的功能。


怎么样将MercuryParticleEngine中创建的粒子效果加入到XNA程序当中,在研究和查阅一些资料之后,实验测试成功将具体步骤列述下来。

0.软件(VS XNA MercuryParticleEngine etc.)的下载安装
1.创建一个基于XNA4.0的程序框架,编译一下将下面三个dll文件放到工程文件的新建目录(SystemDLL-名字自取)下
ProjectMercury.Design.dll 
ProjectMercury.dll
ProjectMercury.Design.dll
2.然后在程序中添加上面三个DLL的引用,注意XNA工程文件和Content两个里面的references都要添加
3.接下来将你要添加的粒子效果的xml和png文件加入到Content下,这里注意可能需要的对xml文件中对应的png位置的修改,具体根据你png位置而定,如果是在content目录下就不


用修改,如果是content下自己新建的文件夹下,就应该在xml文件中找到png文件名加上位置部分 “文件夹名/”
4.Game1.cs中添加


//定义粒子效果和渲染器
ParticleEffect starTrail;
Renderer render;


//Initialize里面的初始化
render = new SpriteBatchRenderer
{
   GraphicsDeviceService = graphics
};
render.LoadContent(Content);


starTrail = Content.Load<ParticleEffect>("Particles/StarTrail");
starTrail.LoadContent(Content);
starTrail.Initialise();


//在update中指定出发位置和更新时间
starTrail.Trigger(new Vector2(120, 200));
float SecondsPassed = (float)gameTime.ElapsedGameTime.TotalSeconds;
starTrail.Update(SecondsPassed);


//在draw中渲染出来

render.RenderEffect(starTrail);








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值