简介粒子系统主要用来解决由大量按一定规则运动(变化)的微小物质组成的大物质在计算机上的生成与显示的问题。经常使用粒子系统模拟的现象有火、爆炸、烟、水流、火花、落叶、云、雾、雪、尘、流星尾迹或者象发光轨迹这样的抽象视觉效果等等。粒子系统的实现:每个粒子是一个带纹理的三角形/多边形,粒子系统由多个粒子组成;粒子按一定规则运动;每个粒子有自己的属性,如位置、速度、质量、尺寸、年龄、运动轨迹斜率、颜色等;粒子系统更新循环划分为两个不同的阶段:参数更新/模拟阶段以及渲染阶段。参数更新/模拟阶段根据粒子系统信息更新每个粒子的速度、位置、尺寸、颜色等信息;渲染阶段根据粒子属性重新绘制粒子;每个粒子都有自己的生命,年龄超过最大年龄的粒子会被销毁,系统会生成新的粒子。JGE游戏引擎提供了一个粒子系统,基于该引擎的很多游戏的爆炸效果就是使用粒子系统实现的。该粒子系统从HGE游戏引擎移植而来,下面将对其做深入的剖析。粒子属性每个粒子包括如下属性:vecLocation:粒子的位置;vecVelocity:粒子速度,记录粒子下一个位置相对于当前位置的偏移(包括x和y方向);fGravity:粒子质量,决定粒子受重力影响(自由落体)的程度,值越大,粒子自由落体越远;fRadialAccel:决定粒子往四周的发散程度,值越大发射出去的越远;fTangentialAccel:决定粒子的运动轨迹的斜率,斜率越大运动轨迹弯曲程度越大,斜率越小,轨迹越趋向于直线。fSpin:fSpinDelta:fSize:粒子的大小;fSizeDelta:粒子大小的变化;colColor:粒子的颜色;colColorDelta:颜色的变化;fAge:粒子的年龄,当粒子超过死亡年龄后死亡,被系统销毁;fTerminalAge:粒子死亡年龄;粒子的速度受到fDeltaTime,fRadialAccel,fTangentialAccel,fGravity等参数的影响,求粒子下一frame的速度如下所示:vecAccel=par->vecLocation-vecLocation;vecAccel.Normalize();vecAccel2=vecAccel;vecAccel*=par->fRadialAccel;//vecAccel2.Rotate(M_PI_2);//thefollowingisfasterang=vecAccel2.x;vecAccel2.x=-vecAccel2.y;vecAccel2.y=ang;vecAccel2*=par->fTangentialAccel;par->vecVelocity+=(vecAccel+vecAccel2)*fDeltaTime;par->vecVelocity.y+=par->fGravity*fDeltaTime;粒子的位置与速度有关,求粒子下一frame处的位置如下所示:par->vecLocation+=par->vecVelocity;粒子参数fSpin,fSize,colColor受fDeltaTime影响,求粒子下一frame处的spin,size和color如下所示:par->fSpin+=par->fSpinDelta*fDeltaTime;par->fSize+=par->fSizeDelta*fDeltaTime;par->colColor+=par->colColorDelta*fDeltaTime;粒子系统属性粒子系统具有如下属性:hgeParticleparticles[MAX_PARTICLES]:粒子数组,保存所有粒子;hgeParticleSystemInfoinfo:粒子系统信息,此数据从psi文件读取得到;fAge:粒子系统年龄;fEmissionResidue:vecPrevLocation:上一frame中粒子系统的中心点位置;vecLocation:当前frame中粒子系统的中心位置;fTx,fTy:nParticlesAlive:活着的粒子个数;rectBoundingBox:粒子系统外包矩形。mTimer:粒子系统数据文件psi粒子系统数据文件以psi作为后缀,该文件记录了粒子系统的所有信息。粒子系统信息通常使用粒子系统编辑工具生成。利用粒子系统编辑工具可以以所见即所得的方式对粒子系统参数进行编辑,并可以实时地看到效果。这里介绍的psi文件就是使用HGE游戏引擎的粒子系统工具particleed生成的。粒子系统具体信息包括:nEmission:每秒产生的粒子数;fLifetimefParticleLifeMin:粒子最短生命周期;fParticleLifeMax:粒子最长生命周期;fDirection:fSpread;粒子发散程度;bRelative;fSpeedMin:最小速度;fSpeedMax:最大速度;fGravityMin:最小重量;fGravityMax:最大重量;fRadialAccelMin:最小发射速度;fRadialAccelMax:最大发射速度;fTangentialAccelMin:粒子运动轨迹最小斜率;fTangentialAccelMax:粒子运动轨迹最大斜率;fSizeStart:粒子初始尺寸;fSizeEnd:粒子最后尺寸;fSizeVar:尺寸变化;fSpinStartfSpinEnd;fSpinVar;colColorStart:粒子初始颜色;colColorEnd...