摘要: 本例程实现了一个焰火例子系统,运行效果如图14.3所示:
阅读全文
摘要: 现在让我们用cParticleSystem类开始一个具体的粒子系统,为了说明用意,这些系统的设计很简单,没有用到cParticleSystem类所提供的所有灵活性。我们实现雪、火、粒子枪系统。雪系统模拟下落的雪花,火系统模拟看上去像火焰的爆炸,粒子枪系统从照相机位置向对面发射出粒子(用键盘)。
阅读全文
摘要: 因为粒子系统是动态的,在每一个帧中我们需要更新系统中的粒子,对于渲染粒子系统的一种直观但效率低下的方法如下:
创建一个足够大的顶点缓存保存最大数量的粒子。
每一帧里执行:
A. 更新所有粒子。
B. COPY所有活着的粒子到顶点缓存。
C. 绘制顶点缓存。
这个方法正确,不过不是最有效率的。
阅读全文
摘要: 粒子系统是粒子的集合,用来保存和显示这些粒子。粒子系统维护所有粒子的全部属性,影响系统中的所有粒子:粒子的尺寸,起始的位置及应用在粒子上的纹理等。粒子系统的方法负责更新、显示、杀死和创建粒子。
虽然不同的具体(与抽象是相对的)粒子系统有不同的行为,我们归纳并找到一些所有的粒子系统共有的基本属性,我们把这些公共的属性放到一个抽象的cParticleSystem基类,它是我们所有的具体粒子系统的父类,现在让我们看一下cParticleSystem类:
阅读全文
摘要: 许多自然现象是由很多小的小颗粒组成的,它们有相似的行为。(例如,雪花落下,闪烁的火焰,冲出枪管的“子弹”),粒子系统用来模拟这种现象。
粒子是一个很小的对象,它通常用来模拟数学中的一个点。点元是用来显示粒子的很好的方案,可是点元被光栅化成一个简单的像素。这没给我们多少灵活性,因为我们想有各种大小不同的粒子,并且把整个纹理平滑映射到这些粒子上。在Direct3D 8.0以前,因为点元方法的局限性而完全不使用他们。代替的方法是程序员将使用公告板去显示粒子,一个板是一个方格,世界矩阵用它来确定方向,使它总是朝向照相机。
阅读全文
摘要: 实际上,地形网格不比三角形网格复杂,图13.1.(a)所示,网络的每个顶点指定了高度,格子模型用这种方式显示从山脉到河流的平滑过渡。图13.1 (b),模拟自然地形。当然,我们可以用漂亮的纹理表现沙石地,绿色的山丘。图13.1.(c)雪山效果。
阅读全文
摘要: 该例子是用一个包含高度信息的RAW文件创建一个地形,纹理和光源。用方向键在地形上行走。
阅读全文
摘要: 构造了一个地形以后,我们想要有移动摄像机的能力,以便模拟在地形上行走的效果。我们需要调整摄像机的高度,这依赖于地形部分的知识,好的,继续往下看。我们首先需要找到照相机所在的方格的位置,并给出x轴和z轴坐标,cTerrain::get_height函数能做到这些,它能提供x轴、z轴坐标参数,返回摄像机需要被设置在地形上的高度值,现在看实现部分。
阅读全文
摘要: cTerrain::generate_texture方法会调用cTerrain::light_terrain,顾名思义,光照使地形更接近于现实。当我们已经计算完地形纹理以后,我们只需要计算阴影系数(shade factor),使一个定义了光源的地形区域变亮或变暗。你会惊讶于为什么我们照亮地图却没有让Direct3D来做。我们自己来计算有三个好处:
阅读全文