- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
DirectX编程
* 第15章 粒子系统 粒子系统就是专门用来产生、控制以及渲染这些粒子的系统。本章将会讲述粒子的具体概念,以及粒子系统的实现。 主要目标: 学习粒子的属性,以及怎样在Direct3D中描述粒子。 设计一个灵活的粒子系统基类,它包括适用于所有粒子系统的属性和方法。 建立三个具体的粒子系统,分别模拟雪花、爆炸的火花和粒子枪射出的子弹。 * 15.1 粒子和点精灵 粒子是一个很小的物体,数学上它经常被当作是一个点。 点图元(在D3DPRIMITIVETYPE中选择D3DPT_POINTLIST)是一个实现粒子的很好的方案。 Direct3D 8.0引入了一种称为Point Sprite(点精灵,由于中英文的差别,Point Sprite和Point Primitive有时都被翻译为点图元,为了避免这种混淆,在后文中将直接使用英文)新的图元类型,它最适用于实现粒子效果。 * 15.1.1 结构格式 下面的顶点结构用于描述粒子的位置和颜色: struct Particle { D3DXVECTOR3 _position; D3DCOLOR _color; static const DWORD FVF; }; const DWORD Particle::FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE; 该结构仅仅存储了粒子的位置和颜色。 * 15.1.1 结构格式 可以为Particle结构中添加一个float变量来描述粒子的大小,然后在灵活顶点格式加入D3DFVF_PSIZE标志。在每个粒子中保存对自身大小的描述可以更方便地指定和更改粒子的大小。 加上了size成员的顶点结构如下: struct Particle { D3DXVECTOR3 _position; D3DCOLOR _color; float _size; static const DWORD FVF; }; const DWORD Particle::FVF = D3DFVF_XYZ | D3DFVF_DIFFUSE |D3DFVF_PSIZE; * 15.1.2 Point Sprite渲染状态 Point Sprite的行为大部分通过渲染状态来进行控制的。 (1) D3DRS_POINTSPRITEENABLE——布尔变量,默认是false。用法如下: _device-SetRenderState(D3DRS_POINTSPRITEENABLE, true); (2) D3DRS_POINTSCALEENABLE——布尔值,默认是false。用法如下: device-SetRenderState(D3DRS_POINTSCALEENABLE, true); (3) D3DRS_POINTSIZE——指定Point Sprite的大小 (4) D3DRS_POINTSIZE_MIN——指定Point Sprite的大小可以取到的最小值 (5) D3DRS_POINTSIZE_MAX——指定Point Sprite的大小可以取到的最大值 (6) D3DRS_POINTSCALE_A、D3DRS_POINTSCALE_B、D3DRS_POINTSCALE_C * 15.1.3 粒子及其属性 粒子除了位置和颜色之外还有很多别的属性,例如,粒子会有一定的速度。 当创建、删除、更新粒子的时候,操作的是粒子的属性;当准备渲染的时候,将位置和颜色信息拷贝到Particle结构中。 大部分粒子系统并不需要以下的全部属性,然而有的系统需要更多没有列出来的属性: struct Attribute { D3DXVECTOR3 _position; D3DXVECTOR3 _velocity; D3DXVECTOR3 _acceleration; float _lifeTime; float _age; D3DXCOLOR _color; D3DXCOLOR _colorFade; bool _isAlive; }; * 15.2 粒子系统组件 粒子系统是诸多粒子的集合,而且负责这些粒子的维护和显示工作。粒子系统保存着影响系统中所有的粒子的全局属性,诸如大小、起始位置、应用的纹理等。 粒子系统就是负责粒子的更新、显示、销毁和创建的系统。 下面来看看PSystem类的声明: 参见教材P233 对函数成员说明如下。 (1) PSystem / ~PSystem——构造函数初始化一些默认值,析构函数会释放设备接口(顶点缓冲、纹理)。 (2) init——这个函数是与Direct3D设备相关的初始化函数,创建存放Point Sprite的顶点缓冲、创建纹理都是这个函数的任务。 (3) reset——该方法重置粒子系统中所有粒子的属性: 参见
文档评论(0)