D3D中的粒子系统

D3D中的粒子系统

D3D中的粒子系统(6)      摘要: 本例程实现了一个粒子枪系统,运行效果如图14.4所示: 
 
D3D中的粒子系统(5)      摘要: 本例程实现了一个焰火例子系统,运行效果如图14.3所示:  
 
D3D中的粒子系统(4)      摘要: 现在让我们用cParticleSystem类开始一个具体的粒子系统,为了说明用意,这些系统的设计很简单,没有用到cParticleSystem类所提供的所有灵活性。我们实现雪、火、粒子枪系统。雪系统模拟下落的雪花,火系统模拟看上去像火焰的爆炸,粒子枪系统从照相机位置向对面发射出粒子(用键盘)。  
 
D3D中的粒子系统(3)      摘要: 因为粒子系统是动态的,在每一个帧中我们需要更新系统中的粒子,对于渲染粒子系统的一种直观但效率低下的方法如下:

创建一个足够大的顶点缓存保存最大数量的粒子。

每一帧里执行:
A. 更新所有粒子。
B. COPY所有活着的粒子到顶点缓存。
C. 绘制顶点缓存。

这个方法正确,不过不是最有效率的。  
 
D3D中的粒子系统(2)      摘要: 粒子系统是粒子的集合,用来保存和显示这些粒子。粒子系统维护所有粒子的全部属性,影响系统中的所有粒子:粒子的尺寸,起始的位置及应用在粒子上的纹理等。粒子系统的方法负责更新、显示、杀死和创建粒子。

虽然不同的具体(与抽象是相对的)粒子系统有不同的行为,我们归纳并找到一些所有的粒子系统共有的基本属性,我们把这些公共的属性放到一个抽象的 cParticleSystem基类,它是我们所有的具体粒子系统的父类,现在让我们看一下cParticleSystem类: 
 
D3D中的粒子系统(1)      摘要: 许多自然现象是由很多小的小颗粒组成的,它们有相似的行为。(例如,雪花落下,闪烁的火焰,冲出枪管的“子弹”),粒子系统用来模拟这种现象。

粒子是一个很小的对象,它通常用来模拟数学中的一个点。点元是用来显示粒子的很好的方案,可是点元被光栅化成一个简单的像素。这没给我们多少灵活性,因为我们想有各种大小不同的粒子,并且把整个纹理平滑映射到这些粒子上。在Direct3D 8.0以前,因为点元方法的局限性而完全不使用他们。代替的方法是程序员将使用公告板去显示粒子,一个板是一个方格,世界矩阵用它来确定方向,使它总是朝向照相机。  

你可能感兴趣的:(D3D中的粒子系统)