粒子系统粒子系统的应用.pdfVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
粒子系统:粒子系统的应用 疯狂代码 / ĵ http://GameDev/Article11354.html   随着视频游戏发展玩家们对游戏质量要求也不断提高新技术不断出现、更新使得游戏变得更为精彩下面我 要介绍是个有效模拟技术--粒子系统虽然这并不是什么新技术也并不深奥但在现今图形、游戏编程中仍有着广 泛应用它能有效地模拟烟火、爆炸、烟雾以及些特殊光影效果它对图形、游戏编程有着巨大推动作用 粒子系统可以分为两类即 Particle 和Per Pixel Control 、 Particle   Particle 是种物理模型Particle 核心不在于如何显示图形而是在于对某个物理模型理解和分析只有基于物理 模型思路方法才能模拟出随机而逼真自然景象   粒子运动(变化)规律可以很简单也可以很复杂这取决于你模拟物理模型复杂程度对于每个粒子它应具有以下 属性 1. 坐标(Coordinates) 对于每个粒子最终我们都要把它映射到屏幕上所以坐标成为个粒子最为重要属性的每个粒子坐标随时间变化而 变化它通过每个粒子自身在各时刻速度求得 2. 速度(Velocity) 运动粒子都有速度每个粒子速度可以各不相同速度用来计算下时刻粒子坐标(位置) 3. 加速度(Acceleration) 粒子可以做变速运动此时加速度便会发生作用它用来计算下 时刻粒子速度 4. 生命值(Le) 每个粒子都有着自己生命值随着时间推移粒子生命值不断减小直到粒子死亡(生命值为0)个生命周期结束时另个 生命周期随即开始有时为了使粒子能够源源不断地涌出必须使部分粒子在后立即死亡这个窍门技巧在后面实现 中我会具体介绍说明 5. 衰减(Decay) 就象人会衰老样每个粒子也有它自己生命周期Decay就是用来控制粒子生命周期个物理量   其实这时我们会很容易地把个Particle 抽象成个类确如果从代码管理、维护角度来讲我们应该把个Particle 封装成个类使用面向对象开发方式但是我们应该注意:在编写图形、游戏时候速度、效率是我们更为关心话题使 用类会使我们代码易于管理但这是以失去速度为代价对于个粒子系统我们代码数据处理量会随着粒子数上升而 呈指数级增长所以在编写Particle 时应尽量避免使用类而应该用更为优化、简洁代码处理   好啦!现在我们已经有了足够多理论来构造我们自己粒子系统了!   下面我以瀑布为例介绍说明以下个Particle 是怎样建立并工作   首先我们需要个结构来存放每个粒子属性我们可以进行如下定义 struct stParticle   {    float x; //x-coordinates    float y; //y-coordinates    float vx; //x-velocity    float vy; //y-velocity    float vyacc; //y-acceleration    float le; //how long does it live?    float decay; //when will it die?  }PARTICLE, *LPPARTICLE;   由于在这个瀑布模型中我们把每个粒子运动都看作是平抛运动所以我们无须定义x轴方向上加速度vxacc   接下来我们要做工作便是对粒子化和控制了对于粒子化我们可以用如下来实现 void DropInitialize ( x, y) {   for ( i=0;i  {    (Drop.le = 0)    {     Drop.x=(float)x;     Drop.y=(float)y;     Drop.vx=(float)(0.001*(rand%500+500));     Drop.vy=(float)(0.1*(rand%10));     Drop.vyacc=0.05f;     Drop.le=1.0f;     Drop.decay=(float)(0.000

文档评论(0)

docindoc + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档