首页 面向对象的通用粒子系统设计及其在火焰模拟中的应用

面向对象的通用粒子系统设计及其在火焰模拟中的应用

举报
开通vip

面向对象的通用粒子系统设计及其在火焰模拟中的应用 http://www.paper.edu.cn - 1 - 面向对象的通用粒子系统设计及其在火焰模拟中的应用 罗勇 1,2,文建国 1 1湖南大学计算机与通信学院,长沙(410082) 2湖南交通职业技术学院,长沙(410004) E-mail:ly_88@163.com 摘 要:本文设计了一个通用的粒子系统,基于面向对象的思想描述了一套粒子系统应用程 序接口(API) 的设计。该粒子系统API采用合理的数据结构,设计了一套高效的粒子生成、 管理方法,并采用高速OpenGL渲染引擎,使之...

面向对象的通用粒子系统设计及其在火焰模拟中的应用
http://www.paper.edu.cn - 1 - 面向对象的通用粒子系统设计及其在火焰模拟中的应用 罗勇 1,2,文建国 1 1湖南大学计算机与通信学院,长沙(410082) 2湖南交通职业技术学院,长沙(410004) E-mail:ly_88@163.com 摘 要:本文设计了一个通用的粒子系统,基于面向对象的思想描述了一套粒子系统应用程 序接口(API) 的设计。该粒子系统API采用合理的数据结构,设计了一套高效的粒子生成、 管理 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 ,并采用高速OpenGL渲染引擎,使之能够满足在普通PC 机上模拟不规则的自然 景物的需求。同时,它还具有相当的灵活性和可扩展性。该粒子系统被用于火焰的模拟中, 仿真实验 关于同志近三年现实表现材料材料类招标技术评分表图表与交易pdf视力表打印pdf用图表说话 pdf 明模拟出的火焰具有较强的真实感。 关键词:粒子系统,通用,面向对象,火焰模拟 中图分类号:TP391.9; TP18 1. 引言 自然景物的生成与模拟一直是计算机图形学领域的研究热点。尤其是对于动态自然景 物,例如云、烟、火、雨、雪等,传统的造型方法很难描述它们的形状和运动,难以得到具 有真实感的模拟[1]。最早的研究工作是从1983年Reeves首次提出的粒子系统原型开始[2], 它可用于模拟不规则的模糊物体(Fuzzy Object)。迄今为止,在粒子系统原型基础上,已有许 多利用粒子系统模拟自然景物的工作[3][4]。然而,尽管粒子系统已经有一些应用程序接口 (API)的实现和用户手册可以在下载,并被许多的开发者所利用[5]。然而,对通用的粒子 系统API设计相对来说还研究比较少[6][7]。因此,本文拟设计一个通用的粒子系统,它采用 面向对象的思想,通过封装功能以便开发者不需要重复实现,并且方便应用程序易于在不同 平台间的移植,并且通过火焰模拟的实例说明设计的API的效果。 2. 粒子系统设计 2.1 粒子系统设计的需求 分析 定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析 粒子系统的基本思想是采用大量的、具有一定生命和属性的微小粒子图元作为基本元素 来描述不规则的模糊物体。一般而言,它具有以下独特的优点[2]: 其一,粒子系统比较灵活,其组成的粒子既可以是最简单的点,也可以具有一定的结构, 可根据描述的对象随意调整,而且相对来说易于实现。 其二,粒子系统的模型是过程化的,在其中可加入随机过程,因此,获得精细的模型不 需要大量的设计时间。 在虚拟现实的视景仿真系统中,不规则物体模拟的真实程度将直接影响到“沉浸感”的实 现,根据不同物体的属性,可以构建不同的粒子发生器。各种粒子发生器的底层实现思想是 一致的,一个好的粒子系统应该具有通用性和可移植性。粒子系统表达的物体越真实,粒子 的数量就越多,其代价是代码量大。为了能够流畅、真实地模拟复杂的三维景观,粒子系统 的设计必须满足以下要求: — 实时效果 粒子系统API 设计最基本的目标是能够实时地模拟大规模的动态景物。它要求粒子系 统的计算效率非常高,以便CPU 尚有大量的剩余时间完成应用程序所需要的其他运算。 — 灵活性 http://www.paper.edu.cn - 2 - 用户能够灵活地使用粒子系统API创建不同的动态效果。粒子系统API必须具有通用性, 由许多子模块构建各种不同场景效果。 — 参数独立性 实现一个复杂场景需要调用很多个API 函数,用户不可避免地要设置大量的参数,所 以参数的逻辑层次要清晰,并且独立于外部系统。 — 模拟质量的可伸缩性 可以通过调节参数或者调用不同的API 调整虚拟场景的模拟精确度,应用程序开发人 员能够根据不同的效果要求来制定不同的精确度。 — 可学习性和可扩展性 粒子系统API对于应用程序开发人员来说易学习使用,并且可对其进行必要的修改扩 展,以适应不同虚拟现实系统开发的需要。 2.2 粒子系统 API 的数据结构 自然景物,特别是不规则的模糊物体的模拟对粒子系统的性能提出了很高的要求,通常 需要成千上万甚至更多个粒子,从而带来巨大的数据量和代码,因此设计一个通用、高效的 数据结构非常重要。利用面向对象的设计方法可以方便地实现数据封装和粒子属性的管理及 状态控制,同时利用VC++的windows 消息机制可以更快捷的实现控制响应。 2.3 粒子系统设计 设计粒子系统的基本思想是采用大量的、具有一定生命和属性的微小粒子图元作为基本 元素来描述不规则的模糊物体。在粒子系统中,每一个粒子图元均具有形状、大小、颜色、 透明度、运动速度和运动方向、生命周期等属性,所有这些属性都是时间的函数,每个粒子 都要经历“产生”、“活动”和“消亡”三个阶段[2]。 对于各种不同的粒子,虽然形态运动轨迹有所不同,但都有其通用的属性单元。通用的 粒子类应该具有所能够描述的粒子的基本属性和可以对表现粒子状态的参数进行修改的操 作。不规则物体的生成取决于绘制环节,此环节实现了光照、纹理等影响实现效果的操作, 因此粒子系统绘制类的实现也应该预留接口:一类接口为与粒子类的参数传递,另一类接口 为用户的参数控制。此外,在windows平台下的粒子系统开发,为了使通用粒子系统达到最 优化的执行效率,考虑将粒子类的设计分为两层:粒子生成控制层和系统绘制设计层。粒子 生成控制层由一个粒子类构成,负责管理粒子的数据结构和状态参数的控制以及渲染,系统 绘制层则实现了一个粒子发生器,通过使用一个粒子类的对象的集合实现图形绘制[3]。 2.3.1 粒子类的设计 采用类的设计的目的在于通过参数传递实现控制操作[10]。粒子类的定义如下: class Particles //定义粒子类 { public: Particles(float x, float y, float z); // 初始化当前粒子的位置和其它参数的默认值 void Render(int num, int wind); // 绘制当前粒子 void SetSpeed(float min, float max); // 设置粒子的加速度 void SetAlpha(float min, float max); // 设置粒子的Alpha值 void InitP(float speed, float size); // 初始化粒子的初速度和面片大小 http://www.paper.edu.cn - 3 - void SetXspeed(float min, float max); // 初始化粒子的横向加速度 void SetColor(Color col); // 设置粒子颜色 void CtrlAlpha(float n); // 对于特殊粒子进行Alpha值控制操作 void CtrlAlpha(float n); // 对于特殊粒子进行Speed值控制操作 bool dead; // 粒子消亡标志 private: Position m_Pos; // 位置结构体对象 Color m_Col; // 颜色结构体对象 float m_speed; // 速度 float m_speed_acc; // 加速度 float m_alpha; // 透明度 float m_alpha_dec; // 透明度衰减率 float m_size; // 面片尺寸 float m_xspeed; // 横向速度,初始化为0 float m_xspeed_acc; // 横向加速度 }; 其中对粒子加速度和Alpha值的控制函数包括两个参数,主要实现了将所需修改的参数 设置为两个参数之间的随机数值rand()/RAND_MAX*(max-min)+min,这在很大程度上也体 现了不规则物体的随机性。当然,也可以按某种模型进行初始化,实现特殊的效果。 2.3.2 系统绘制类的设计 不规则物体的最终实现首先要求有一个粒子组,这需要对一定数目的粒子进行绘制, VC 中的标准 模板 个人简介word模板免费下载关于员工迟到处罚通告模板康奈尔office模板下载康奈尔 笔记本 模板 下载软件方案模板免费下载 库很容易实现此操作。另外,针对不同的物体状态要对整个粒子组进行初 始化,主要是贴图和运动方式的选择。类的具体实现形式如下: class RenderingSystem // 定义系统绘制类 { public: static int m_Ctrlnumber; // 物体状态判断参数 BOOL m_success; // 是否成功初始化标志 int m_wind; // 风力 Color m_RecieveColor; //接收用户调整颜色设置的结构 public: GLObject(); //初始化通用参数为默认数值 ~GLObject(); //释放资源 BOOL InitGL(); //初始化OpenGL 环境和粒子发生系统 void Reposition(); //重新定位粒子发生位置 BOOL DrawScene(); //构建粒子发生器,绘制场景 BOOL ImportObj(); //绘制其它场景所需3D物体 int AdjustWind(BOOL a); //调节风力 void SetAmount(int num); //设置粒子喷发模式 void ResizeWin(GLsizei w, GLsizei h); //窗口变换 void killWindow(); //关闭窗口 http://www.paper.edu.cn - 4 - }; 其中的静态变量m_Ctrlnumber 用来为不同物体状态的粒子控制操作传递参数,单个粒 子绘制根据此参数进行判断并进行不同状态的绘制。操作中实现了窗口等操作的目的在于将 OpenGL 绘制系统尽可能的独立出来,以实现较好的可移植性。 3. 粒子系统在火焰模拟中的应用 3.1 火焰模拟的原理 现实中,火焰的燃烧其物理过程非常复杂[8]。火焰模拟是为了得到视觉上“真实”的火 焰运动,可以不过分的要求物理学上的正确性。因此,为了提高系统的时间性能以达到实时 效果,必须对火焰复杂的运动进行简化处理,在真实性和实时性之间进行折衷。本文借鉴文 献[9]的方法,将复杂的运动场简化为:热浮力场、风场、漩涡场和重力场。火焰模拟的原 理框图如图 1 所示。 此外,为了使火焰的运动更加真实和灵活,本文引入了动态运动场的思想,通过控制运 动场的运动来动态地改变火焰粒子的运动规律,使火焰粒子的运动更加灵活。在 Reeves 的 粒子系统中,为了简化绘制算法,每一个有生命的粒子都被看成是一个点光源,映射在任何 一个像素上的光强和颜色都可以看成所有映射在该点的粒子的光强和颜色的简单叠加。它可 高斯随机数生成火焰初始粒子 初始化火焰粒子的各种属性 生成新的运动场 初始化新的运动场的各种属性 删除死亡的运动场 计算剩下的运动场的位置和速度,更 新运动场其它属性 删除死亡的运动场火焰粒子 绘制火焰效果 对火焰粒子的相关属性进 行设置和调整 计算剩下的火焰粒子的位置和速度, 更新火焰粒子的其它属性 用户交互 设置火焰的大小等、纹 理映射图片等 图 1 火焰模拟的原理框图 http://www.paper.edu.cn - 5 - 以避免大量的排序操作,但当粒子数目达到一定的程序时,火焰模拟的运动仍然会受到限制。 因此,本文采用了多边形面片代替点光源绘制粒子。因为一个面片可以代替数十个粒子,从 而可以显著减少每帧画面所需粒子的数目,有助于加快火焰模拟的速度。但是,这种方法也 存在两个显著缺点:首先,当火焰粒子旋转过一定的角度或者观察者的视角改变时,可能会 看到一片一片的片状物。本文采用了 Billboard 技术解决这个问题。为此,给火焰粒子增加 了两个沿 X 轴和 Y 轴的转角属性。在绘制每个火焰粒子时,实时的计算粒子面片相对于视 点的方向,通过与旋转矩阵相乘即可将粒子面片旋转到正对的视点。其次,简单的多边形面 片会影响火焰模拟的真实感,为此采用了纹理映射技术,即把一幅具有某此细节的图像映射 到多边形面片上。采用不同的纹理映射图像可以得到不同的火焰模拟效果。 3.2 火焰模拟的真实效果 本文的算法在普通 PC 机(1.8G Pentium Ceron 处理器,512M 内存,Windows XP 操作 系统,NVIDIA GeForce 4 Ti 4200 显卡)上进行的。图形库采用 OpenGL,它是当今最主流 的专业图形处理库。 在火焰模拟时,共使用了 4 种不同的纹理映射图像,分别如图 2 所示。在粒子数目都为 1000 个的情况下,它们对应的火焰模拟效果如图 3 所示。火焰模拟的效果比较真实,且火 焰中心气体比较密集,而边缘比较稀疏, 原因在于在初始化新火焰粒子的位置属性时,采用 了高斯随机数赋值,火焰粒子在生成时满足高斯分布。此外,采用不同的纹理映射图像得到 了不同的火焰模拟效果。图 2(a)和图 2(c)的纹理映射图像差异较大,得到的火焰模拟效果也 相关较大。图 2(b)和图 2(d)的纹理映射图片则比较相似,只是火花纹理的细节略有不同。从 得到的火焰模拟效果,分别对应于图 3(b)和图 3(d) 来看,火焰的形状也比较类似,但细节 略有不同。相对来说,图 3(a)和 3(c)得到的火焰模拟比较自然和逼真。 因此,从火焰模拟结果可知,在一定的粒子数目下,影响真实感的关键在于颜色和纹理, 因此在不同状态的火焰之间切换时,实时的改变适合所需状态的粒子颜色和纹理贴图即可实 现所需要的效果。 从实时性看,本文采用了简化火焰运动和多边形片结合纹理映射技术,可以有效地减小 粒子的数目和计算量。从仿真实验结果看,每秒针至少可生成25帧-30帧的画面,满足实时 性的要求。进一步的提高可以采用多层次细模型(LOD),使远处的物体拥有较少的粒子数目, 以减少图形的动态生成时间,满足实时性要求。 (a) (b) (c) (d) 图 2 不同的纹理映射图片 http://www.paper.edu.cn - 6 - (a) (b) (c) (d) 图 3 采用不同纹理得到的不同的火焰模拟效果图 4. 结论 本文设计了一个通用的粒子系统,它采用基于面向对象的思想,并用 C++语言描述了一 套粒子系统应用程序接口(API) 的设计。该粒子系统 API 采用合理的数据结构,设计了一套 高效的粒子生成、管理方法,并采用高速 OpenGL 渲染引擎,使之能够满足在普通 PC 机上 模拟不规则对象的要求。它与以往的粒子系统相比优势在于:利用它有助于减少开发者的编 程工作量,可以着重于不规则对象的模拟算法本身,并且只有相当的灵活性和可扩展性。通 过将该粒子系统应用于火焰模拟的仿真结果来看,模拟出的火焰具有较强的真实感,可以满 足实时应用的要求。 http://www.paper.edu.cn - 7 - 参考文献 [1] Donald Hearn, M. Pauline Baker, Computer Graphics with OpenGL, Third Edition, Prentice Hall, 2003 [2] William T. Reeves, Particle Systems- A Technique for modeling a class of fuzzy objects, ACM Transactions on Graphics, 2(2): 91-108, 1983 [3] 马骏,朱衡君,基于动态纹理和粒子系统的喷泉模拟,北京交通大学学报,29(1):90-94,2005 [4] 方建文,于金辉,马文龙,基于硬件加速和粒子系统的实时喷泉模拟,计算机工程与应用,2006 [5] McAllister, D. K. Particle System API Home Page, http://www.cs.unc.edu/~davemc/Particle, 1999. [6] 王宏炜,刘越、王涌天,面向对象的通用粒子系统设计,系统仿真学报,18(增 1):46-51,2006 [7] 姚彦林,孟传良,面向对象的粒子系统设计,贵州工业大学学报,31(3):66-68,2002 [8] 周洁琼,,邹北骥,朱岳,刘洁,一种改进的实时火焰模拟算法,计算机工程与科学,28(7):73-76, 2006 [9] 张芹,吴慧中,谢隽毅, 基于粒子系统的火焰模型及其生成方法研究,计算机辅助设计与图形学学报, 13(1):79-82,2001 [10] 吴继承,江南,虚拟现实中粒子系统的设计与应用,计算机仿真,21(11):137-140,2004 The design of object-based universal particle system and its application in fire simulation Luo Rong,Wen Jianguo College of Computer and Communication,Hunan University,Changsha(410082) Abstract In this paper, a universal particle system is designed. Based on the idea of object-based programming, an application program interface is described for particle system. It adopts a reasonable data structure. A set of efficient production and management methods for particles is designed, and fast OpenGL rendering engine is utilized, which meets the requirements for fuzzy objects simulation on ordinary PC. Moreover, the API has high flexibility and scalability. The particle system is used in fire simulation, and the simulation results demonstrate that the simulated spring is true. Keywords:particle system,universal,object-based,fire simulation 作者简介:罗勇,男,讲师,硕士生,主要研究方向计算机图形学。
本文档为【面向对象的通用粒子系统设计及其在火焰模拟中的应用】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_406730
暂无简介~
格式:pdf
大小:333KB
软件:PDF阅读器
页数:7
分类:互联网
上传时间:2012-05-31
浏览量:21