实验3实验目的理解粒子系统的基本原理。学****使用Direct3DAPI编写程序利用粒子系统模拟雨景。实验内容和步骤在粒子系统中,把运动的模糊物体看作由有限的具有确定属性的流动粒子所组成的集合,这些粒子以连续或离散的方式充满它所处的空间,并处于不断的运动状态。粒子具有独立性,这里包含两个意思,一是各粒子不与场景中的任何其他物体相交;二是粒子之间不存在相交关系,并且粒子是不可穿透的。粒子系统中的每个粒子都具有一系列属性,如质量、空间位置、外观属性、运动属性、生存期等。在一定的时间周期内,每个粒子都经历新生、活动和消亡3个基本生命历程。在存活期间,每个粒子都始终按一定的方式运动。以下是使用Direct3D利用粒子系统模拟雨景的过程。首先定义结构体RainParticle来描述雨点粒子,其中定义了雨点粒子的位置和移动速度。RainParticle结构体定义如下:structRainParticle{ floatx,y,z;//位置 floatfDspeed;//下降速度};定义结构体类型RAINVERTEX用来描述雨顶点格式,RAINVERTEX结构体定义如下:structRAINVERTEX{ D3DXVECTOR3vPos; DWORDdwColor;};#defineD3DFVF_RAINVERTEX(D3DFVF_XYZ|D3DFVF_DIFFUSE)定义雨点数组:#definePARTICLENUM2000RainParticlerain[PARTICLENUM];//雨点粒子数组接着定义顶点缓冲和世界矩阵变换的全局变量:LPDIRECT3DVERTEXBUFFER9g_pRainVB;//雨点粒子顶点缓冲区D3DXMATRIXg_matRain;//雨点世界矩阵D3DXVECTOR3g_RainDir;//雨点的下降方向在初始化函数InitD3D中创建和填充雨顶点缓冲区:(g_pd3dDevice->CreateVertexBuffer(2*sizeof(RAINVERTEX),0,D3DFVF_RAINVERTEX,D3DPOOL_MANAGED,&g_pRainVB,NULL)); //填充雨点顶点缓冲区 RAINVERTEX*pRainVertices; g_pRainVB->Lock(0,0,(void**)&pRainVertices,0); pRainVertices[0].vPos=D3DXVECTOR3(1,5,0); pRainVertices[0].dwColor=0xffffffff; pRainVertices[1].vPos=D3DXVECTOR3(3,1,0); pRainVertices[1].dwColor=0xffffffff; g_pRainVB->Unlock();在初始化函数InitD3D中初始化雨点的位置和雨点的下降方向,雨点的位置通过随机数产生,然后通过取余将其x,y坐标控制在(-200,200)范围中,而z值在(0,250)范围中。 //计算雨点下降方向 g_RainDir=D3DXVECTOR3(3,1,0)-D3DXVECTOR3(1,5,0); D3DXVec3Normalize(&g_RainDir,&g_RainDir); srand((unsigned)time(NULL)); //初始化雨
理解粒子系统的基本原理 来自淘豆网www.taodocs.com转载请标明出处.