本站小编为你精心准备了催泪烟雾仿真设计参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
《计算机仿真杂志》2014年第六期
1.1催泪烟雾原理催泪烟雾的形成是利用催泪弹中的烟火剂燃烧产生的热量将装填在弹体内的催泪药剂加热汽化,在弹体内部与外部环境形成巨大压强差,迫使催泪蒸汽从排烟孔急速喷出,在空气中遇冷迅速凝结成极小的固态微粒,形成一种不规则气溶胶形态的固液态微粒群[8]。催泪烟雾具有以下特点:发射源点面积小,烟雾初始速度大,温度高,初始位置和运动方向相同,在运动的开始阶段烟雾粒子所受空气作用明显;在运动过程中,局部温差大,所受到的热浮力大小不一,容易发生局部的漩涡效应。催泪烟雾运动过程可做以下描述:烟雾从发烟孔喷出时,由于初速大、温度高,受到空气阻力的影响做急剧减速运动;当速度降到一定程度时,受热浮力、风力等影响在空气中做扩散运动。相对于一般火焰烟雾,催泪烟雾运动更为复杂,初始的急剧减速运动和随后的扩散运动两个过程中烟雾的运动特点和规律明显不同。而火焰烟雾运动初始速度不高,受到的空气阻力不大,没有明显的减速过程,整个过程运动特点和规律变化也不大,传统的烟雾运动模型通常没有将运动过程做详细区分。因此,根据催泪烟雾的运动特点,传统的烟雾运动模型并不适合催泪烟雾的运动模拟。
1.2粒子系统原理粒子系统是1983年Reeves[6]提出的,它把运动的不规则物体看作由有限的具有确定属性的流动粒子所组成的集合,每一个粒子都具有形状、大小、颜色、透明度、运动速度、运动方向、生命周期等相关的属性,而其中的很多属性都是与时间相关的函数,随着时间的推移,每个粒子都会经历产生、活动和消亡3个阶段,通过对粒子在系统中形状、特征和运动来模拟不规则物体的运动变化[7]。粒子系统和催泪烟雾模拟的结合点在于把整个烟雾看成由很多个烟雾团组成,再用系统中的粒子来表征烟雾团,通过对粒子在系统中形状、特征和运动来模拟烟雾团的运动变化,从而达到对整个催泪烟雾运动的仿真。
1.3催泪烟雾分段式运动模拟催泪烟雾从发烟孔喷出后急剧减速运动和随后在空气中的扩散运动,这两个阶段运动规律区别最明显,因此本文将催泪烟雾运动过程大致分为两个阶段:第一阶段为喷烟阶段,为烟雾从发烟孔喷出后受到空气阻力影响急剧减速的运动过程;第二阶段为扩散阶段,当速度降到一定值后,烟雾在空气中缓慢扩散的过程。对于喷烟阶段,此过程持续时间短,烟雾运动速度快,轨迹相对集中,空气阻滞对烟雾运动的影响占主导作用,因此可忽略烟雾扩散的情况,直接根据牛顿第二定律求得粒子运动轨迹方程;对于扩散阶段,空气阻力对粒子运动的作用不明显,烟雾运动以扩散为主,此阶段利用N-S不可压缩气体扩散模型求得运动轨迹方程。两个阶段各自适用对应的运动规律,以速度v1为连接点,共同组成描述催泪烟雾整个运动过程的阶段运动模型。
1.4阶段运动模型建立1)烟粒子初始属性设置烟雾粒子从发烟孔喷出时的状态为系统中粒子的初始状态,初始质量。2)阶段力环境属性设置现实烟雾运动过程中,空气阻力、热浮力、重力、和风力是贯穿整个过程的,除了重力其它力都是随时间变化的,在仿真程序中根本不可能实现精确地控制。为了便于程序实现,现将模型中两阶段的受力情况作如下假设:①设烟雾喷出方向与x-y平面平行和风力方向与x-z平面平行;②喷烟阶段只考虑空气阻力、热浮力和风力的影响,由于喷烟阶段时间短、速度快,烟雾轨迹弯曲度不大,故设定此阶段空气阻力的作用方向始终与烟雾初始喷出方向相反,与x轴夹角为α;③扩散阶段由于粒子运动速度小,不考虑空气阻力的影响。两个阶段受力情况如表1所示:3)计算烟粒子轨迹在粒子系统中,将烟粒子的连续运动离散化,假设系统刷新时间间隔为Δt,在Δt很小的情况下计算粒子位移时,可以认为在Δt时间内粒子的速度是恒定的,根据粒子对应阶段轨迹方程求得经历Δt后烟粒子的位置P(t+Δt)。对于喷烟阶段,由于持续时间短暂,烟雾运动速度快,轨迹相对集中,可忽略烟雾扩散的情况,直接根据牛顿第二定律求得粒子的轨迹运动方程:4)烟粒子和环境的属性更新为下一次循环计算烟粒子位置做准备,在经历Δt时间后,质量m不变或稍有扰动;速度属性则可根据粒子处于的阶段,按照相应的速度变化规律进行刷新。年龄age+=Δt;横向加速度ax=fx/m;纵向加速度az=fz/m;垂直加速度ay=fy/m;加速度矢量a=ax,ay{,a}z;颜色和透明度应相应的发生变化。
1.5模型编程实现根据上述烟雾粒子系统模型,在VC++编程的基础上,利用程序的迭代实时刷新粒子在屏幕上的显示,形成帧动画。利用OpenGL绘制烟雾,使用VegaAPI提供的回调机制将烟雾绘制集成到场景中,从而实现Vega场景中烟雾的模拟,具体实现方法如下:1)建立粒子类,将粒子的属性和刷新方法集成到类中;2)在主程序中建立粒子类的实例数组,在刷新环境属性的同时遍历所有粒子实例,刷新每个粒子的属性,刷新时需要注意:①判断帧粒子数量,如没有达到要求,则遍历所有粒子,将死亡的粒子激活,直至达到要求;②判断粒子年龄,如已超过寿命,则不再刷新和显示此粒子;③判断粒子处于的阶段,调用相应阶段的粒子运动模型进行刷新。④碰撞检测。判断粒子的当前位置是否位于反弹面(例如地面),如果粒子已经落到反弹面,则根据反弹面的倾斜情况和反弹系数反弹此粒子。3)粒子位置和环境属性刷新。粒子的大小随着寿命逐渐扩大,颜色根据烟团的颜色变化,透明度随着寿命逐渐加大直到完全透明而消失。
2烟雾绘制处理
每一帧画面中的粒子,在它的各个状态及属性值都确定以后,就开始绘制和渲染。程序中用OpenGL对烟雾进行绘制和渲染时可针对粒子运动中的特点采用一些优化处理来减少系统开销和获得逼真的视觉效果。烟粒子的浓淡分布一般是中心对称的,从任何方向看,烟粒子的形态应基本相同,因此,为了减少粒子系统绘制开销,在烟雾粒子系统中采用面向视点的多边形面片来表示粒子,如图3所示。由于多边形面片有分明的棱角,不能表现一些边界模糊或有湍流运动的景象。为了消去多边形的明显的边界,利用OpenGL的Alpha融合功能和深度测试功能,再加上纹理和颜色的调节,可以模拟出特殊效果。为了模拟粒子效果,每个矩形上都贴上透明纹理,贴图后效果如图4所示。烟粒子一般经历生成、变形扩散和消失的过程,运动形态相似。可将烟粒子的运动变化用一组动态纹理来描述,表现出粒子运动过程中不断翻滚的现象,让烟雾从局部到整体更为生动。动态纹理组由30张轮廓相同,但形态不断变化的纹理图组成。图5是翻滚周期内不同时刻的粒子效果,Ti表示一个翻滚周期内第i个时刻(i∈[1,30])。
3实验结果分析
本实验的硬件环境:AMD速龙II250双核3.0GHz,内存4GB,独显GforceGT610,显存2GB,操作系统是Win7。软件环境:编程平台VC++6.0,图像绘制OpenGL,视景仿真Ve-ga。按照粒子系统绘制画面的一般步骤及本文所述的方法,生成催泪烟雾每帧图像的基本流程如图6所示。当粒子数为500时,分别在催泪烟雾两个运动阶段截的帧图像如图7所示,以及本文仿真画面和真实催泪烟雾的对比图如图8所示。通过对比可以看出,该模拟方法得到的烟雾图像在形状和行为上跟真实的烟雾都较为相似,逼真的描述出催泪烟雾从产生到扩散的运动特点。实验中模拟场景的复杂度以及对应的画面帧率如表2所示,从中可以看出,应用本文所述方法画面帧率达到59.94FPS,能很好的满足仿真中的实时性要求。本文基于粒子系统,结合催泪烟雾的运动特点,建立阶段运动模型,描述了催泪烟雾从产生到扩散的运动形态。利用动态纹理映射技术体现了烟雾粒子运动时的翻滚形态。通过实验表明,本文所述方法逼真地体现了催泪烟雾运动过程中的形态特征,增强了虚拟场景的真实感,而且生产速度快,适合在实时性仿真中应用。
作者:吴华庄弘炜赵法栋黄彩福单位:武警工程大学装备工程学院