《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于Direct3D和粒子系统的导弹尾焰模拟
基于Direct3D和粒子系统的导弹尾焰模拟
2016年微型机与应用第14期
胡彭辉,胡爱兰,刘吉娟,张瑞权
(中国电子信息产业集团有限公司第六研究所,北京 100083)
摘要: 为了能更加逼真地展现三维实时战场环境,对不规则模糊物体如火焰、烟雾、雨滴、雪花、波浪等的模拟仿真则显得尤为重要。国内外学者不断探索,先后提出了若干种针对不规则模糊物体的建模方法。粒子系统方法是到目前为止在模拟不规则模糊物体方面最成功的一种生成算法。通过对Direct3D中点精灵和粒子系统理论的研究,采用点精灵和纹理映射技术逼真地模拟出导弹的尾焰效果,从而再现了三维实时战场环境。
Abstract:
Key words :

  胡彭辉,胡爱兰,刘吉娟,张瑞权

  (中国电子信息产业集团有限公司第六研究所,北京 100083)

  摘要:为了能更加逼真地展现三维实时战场环境,对不规则模糊物体如火焰、烟雾、雨滴、雪花、波浪等的模拟仿真则显得尤为重要。国内外学者不断探索,先后提出了若干种针对不规则模糊物体的建模方法。粒子系统方法是到目前为止在模拟不规则模糊物体方面最成功的一种生成算法。通过对Direct3D点精灵和粒子系统理论的研究,采用点精灵和纹理映射技术逼真地模拟出导弹的尾焰效果,从而再现了三维实时战场环境。

  关键词:粒子系统;纹理映射;点精灵;Direct3D

0引言

  在现阶段,虚拟现实技术和视景仿真技术的不断发展,为三维战场环境实时仿真提供了强大的理论基础。另外,对三维场景中不规则物体如火焰、烟雾、雨雪等的模拟更加有助于提高三维仿真软件的真实性。不规则物体的仿真在计算机图形学中一直备受关注,如果采用传统的图形学方法先对不规则物体表面细节建模,然后进行场景绘制、场景渲染,最后图形生成,这一系列的过程再加上实时渲染会产生巨大的计算量,对现有计算机的硬件要求会相当苛刻而且很难达到逼真的效果。

  国内外学者专家对不规则物体的探索一直没有中断,他们先后提出了若干种不规则物体的建模方法,分别为基于分形几何的建模方法、基于过程纹理函数的建模方法、基于物理过程的建模方法、基于粒子系统的建模方法。

  基于分形几何的建模方法起源于法国数学家曼德尔勃罗特在研究英国海岸线有多长时引入的分维数的概念以及对自然界的分形现象进行了系统的研究。随后,HOOCK D W采用基于分形的纹理技术实现烟云和尘土的模拟。基于过程纹理函数的建模方法的典型代表有INAKAGE M[1]的纹理映射的方法,它实现了二维火焰的简单模型,但是模拟出的火焰真实感不强。基于物理过程的建模方法有STAM J[2]等人建立的风场中气体的紊流模型模拟烟雾、云等模糊物体。BLINN J F[3]于1982年提出了描述云及烟尘表面的光反射函数;EBERT D S[4]等人使用纹理和动画算法实现云、雾和烟等气体现象的动画效果。

  目前基于粒子系统的方法在模拟不规则物体方面被公认为最成功的方法。粒子系统采用的是完全不同于以上几种建模方法来构造不规则模糊物体。

1粒子系统理论

  不规则模糊物体,如火焰、烟雾、雨滴、雪花、波浪等,它们不仅没有固定的几何外形,而且它们会随着时间的推移不断地发生变化,正是因为这些原因,传统的图形学建模方法将不再适用,在这样的背景下,粒子系统理论于1983年由REEVES W T[5]提出。

  1.1粒子系统的基本思想

  一个粒子系统由数量众多的具有生命周期和属性的单个粒子构成,每个粒子都要经历产生、生长、衰老和死亡的过程,而且每个粒子均具有大小、速度、颜色、形状、位置、生存时间、透明度等属性。随着时间的推移,粒子系统中新的粒子不断产生,旧的粒子不断消亡。粒子系统是一个动态的系统,它能很好地体现不规则模糊物体的动图1粒子系统生成图像的基本步骤态性和随机性。粒子系统模拟不规则模糊物体的生成步骤如图1所示。

001.jpg

  1.2粒子系统的基本特点

  从粒子系统的基本思想可以得出粒子系统理论的特点如下。

  (1)系统的粒子性。粒子系统所模拟的任何对象不论是固态、气态或者液态都是由很多简单的粒子构成的,这些粒子不同于物理学中的原子,它们具有一定的属性,比如位置、颜色、速度等。

  (2)粒子的独立性。这里主要是说粒子与粒子之间以及粒子与场景中其他物体之间不存在相交关系,而且粒子自身是不可穿透的。

  (3)粒子的生命性。粒子系统中的每个粒子在有限的生命周期内都要经历产生、生长、衰老和死亡4个过程。

  (4)粒子的动态性。粒子系统中的每个粒子在有限的生命周期内都要按照一定的运动规律不停地运动。正是这种动态性才是模拟不规则模糊物体的关键所在。

2点精灵

  在DirectX8之前,公告板技术(Billboard)结合纹理的Alpha混合与动画一起使用,可以实现很多粒子系统,如烟雾、火焰、爆炸等。点精灵(Point Sprite)是DirectX8中引入的一个新特性,主要是用来高效地渲染粒子系统。与公告板技术不同的是,点精灵技术只需使用一个顶点去表示一个粒子,而公告板就是用一个四边形,需要使用4个顶点表示一个粒子,通过其自身世界变换矩阵的控制,使其总是面对摄像机。因此使用点精灵实现粒子系统,无论是在内存占用率还是渲染时间上都相当高效。

3三维模型和粒子系统的构建

  3.1三维模型的构建

  在Direct3D中,一般都采用.X文件来存储网格数据。.X文件格式是微软定义的3D模式文件格式,其中包括网格的纹理、动画以及用户定义对象的一些数据等。本次实验构建模型采用3DS Max三维建模工具和Panda插件。首先使用3DS Max三维建模工具设计后缀名为.3ds的三维导弹模型,然后利用Panda插件让3DS Max导出本次实验所需后缀名为.X格式的三维导弹模型,如图2所示。 

002.jpg

  3.2粒子系统的构建

  (1)定义点精灵的灵活顶点格式(Flexible Vertex Format, FVF)。FVF用来描述顶点缓冲区中的顶点的属性,比如顶点的位置、顶点混合权重、法向量、颜色和纹理坐标,另外FVF中允许最多定义8组纹理坐标,且每组纹理坐标都对应一个纹理层,就是说每个顶点最多可以使用8层纹理。本次实验的FVF使用顶点的位置和纹理坐标两个属性,且只使用一层纹理。

  struct POINTSPRITEVERTEX

  {

  float x, y, z; //顶点的位置

  float u,v ;//顶点的纹理坐标

  };

  #define D3DFVF_POINTSPRITEVERTEX (D3DFVF_XYZ|D3DFVF_TEX1)

  (2)设置火焰粒子的属性。本次实验设置的粒子属性如表1所示。

007.jpg

  3.3粒子大小

  粒子的大小主要通过D3DRS_POINTSIZE和D3DRS_POINTSCAL EENABLE进行设置,如果D3DRS_POINTSCA LEENABLE设置为False,就使用应用程序自定义的大小,然后经过相应坐标变换作为屏幕坐标系中的最终大小,且粒子大小不可以动态调整;如果D3DRS_POINTSCALEENABLE设置为True,则粒子的大小由两个因素共同决定,一个是粒子属性m_size的大小,另一个是点到摄像机的距离。本次实验D3DRS_POINTSCALEENABLE设置为Ture,且使用下面的公式计算:

  1.png

  其中Si表示点的大小,它是D3DRS_POINTSIZE指定的值,本次实验通过粒子属性m_size动态设置。A、B、C分别代表D3DRS_POINTSCALE_A、D3DRS_POINTSCALE_B和D3DRS_POINTSCALE_C,Vh是视点的高度,D是该点坐标(X,Y,Z)到摄像机(摄像机位于原点)的距离,D的计算方式如下:

  2.png

  点的最大值Pmax由D3DCAPS中的MaxPointSize和D3DRS_POINTSIZE_MAX共同决定,取二者的最小值。点的最小值Pmin则由D3DRS_POINTSIZE_MIN决定,所以点在屏幕坐标系中的最终大小S的决定规则为:如果Ss>Pmax,则S=Pmax;如果Ss<Pmin,则S=Pmin;否则S=Ss。

  3.4纹理映射[6]技术

  粒子的数量越多模拟出来的火焰效果越逼真,但是这对PC硬件条件要求比较高且实时性也低,所以本次实验采用纹理映射技术,保证在相同硬件条件下既能满足实时性要求又能达到逼真的效果。

  屏幕坐标系中的一个粒子P(X,Y,Z),若它在屏幕坐标系中的大小是S,则它被渲染成一个四边形,四边形的4个点的坐标分别如下:

  P0=X+S2,Y-S2,Z

  P1=X-S2,Y-S2,Z

  P2=X-S2,Y+S2,Z

  P3=X+S2,Y+S2,Z

  这4个点纹理的坐标是由D3DRS_POINTSPRITEENABLE这个字段控制的,如果这该字段被设置为False,那么这4个点的纹理坐标就是相同的;如果该字段设置为True,则这4个点的纹理坐标分别为(1.0F, 0.0F), (0.0F, 0.0F), (0.0F, 1.0F), (1.0F, 1.0F),如图3所示。

 

003.jpg

004.jpg

  本次实验D3DRS_POINTSPRITEENABLE字段设置为True,采用图3所示的纹理坐标,采用图4所示的纹理图片。上文中已经定义了顶点的纹理坐标格式,在接下来渲染的时候本次实验采用了线性纹理过滤方式来提高纹理的显示效果。

005.jpg

  //线性纹理过滤

  SetSamplerState(0, D3DSAMP_MINFILTER, D3DTEXF_LINEAR );

  SetSamplerState(0, D3DSAMP_MAGFILTER, D3DTEXF_LINEAR );

  3.5实验模拟与结果

  本次实验在CPU为Intel Core i5 4590、显卡为NVIDIA GeForce GT 630、内存为4 GB的PC上模拟导弹的尾焰效果。图5是未绑定导弹时的尾焰效果,图6是通过平移、旋转、调整大小和速度后绑定导弹的尾焰效果。

006.jpg

4结论

  本文基于Direct3D技术和粒子系统理论模拟出三维战场环境中导弹的尾焰效果,同时使用纹理映射技术降低粒子的数量达到战场环境中对高实时性的要求。另外本次实验可以通过动态设置火焰粒子的参数,模拟出不同形状的尾焰,来适应战场环境中不同型号的导弹对尾焰的要求。

  参考文献

  [1] INAKAGE M.A simple model of flames[C].Proceedings of the Eighth International Conference of the Computer Graphics Society.New York:SpringerVerlag,1990:7181.

  [2] STAM J, FIUME E. Depicting fire and other gaseous phenomena using diffusion processes[C].SIGGRAPH’95, Proceedings of the 22nd Anmual Canference on Computer Graphics and Iteractive Techniques, 1995:129136.

  [3] BLINN J F. Models of light refection for computer synthesized pictures[J].ACM Computer Graphics, 1977, 11:192198.

  [4] EBERT D S, RICHARD E P.Rendering and animation of gaseous phenomena by combining fast volume and scanline A_buffer techniques[J].ACM Computer Graphics(SIGGRAPH'90),1990,24(4):357366.

  [5] REEVES W T, BLAU R. Approximate and probabilistic algorithms for shading and render structured particle system[J]. Computer Graphics, 1985:19(3):313322.


此内容为AET网站原创,未经授权禁止转载。