v805-第五章opengl的3d图形渲染课程15粒子系统_第1页
v805-第五章opengl的3d图形渲染课程15粒子系统_第2页
v805-第五章opengl的3d图形渲染课程15粒子系统_第3页
v805-第五章opengl的3d图形渲染课程15粒子系统_第4页
v805-第五章opengl的3d图形渲染课程15粒子系统_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、粒子系统在现实生活中,“粒子”是一些非常小的碎片。在游戏系统中,有时候爆炸,燃烧,烟雾等特殊效果也需要利用粒子来表现。粒子系统就是用于模拟形状模糊的物体或大量规则物体的技术。粒子由大量单独运动的点构成,每一个单体都可以有自己的运动方式。粒子在初始时有一定的随机性,但是在粒子系统中,每一个粒子又要受到约束,从而保证了整个系统的统一。粒子系统用最简单的单元渲染这些物体,并模拟它们的运动。在一定时间内粒子生成、运动、变化、消亡,从而形成一个系统。粒子简介游戏中最常见的粒子效果实现有爆炸、火焰以及烟雾等多种效果1.爆炸效果粒子可以模拟爆炸中产生的火光,也可以模拟爆炸中碎片飞舞的情景。用两个粒子效果进行

2、组合分别模拟这两种现象,可以渲染出逼真的爆炸现象。火焰一般使用叠加的方式进行纹理混合,这样粒子密集的地方会比较耀眼,火焰上升之后,颜色逐渐变暗。粒子实现火焰较为容易,配合燃烧物体使用的烧焦纹理,可以达到很好的效果。2.火焰效果粒子介绍3.烟雾效果对于大范围的烟雾,通常使用尺寸大,数量少的粒子。粒子使用Alpha通道实现半透明。对于小范围的烟雾则可以使用较小的粒子。4.天气效果粒子模拟雨雪天气也较为容易。有些粒子系统可以模拟在风力作用下的雨雪飞舞的现象,较为复杂的粒子系统可以模拟雪花落地后的积雪。5.魔法技能特效现在的网络游戏中技能的视觉效果越来越华丽,很多的游戏都以绚丽丰富的技能特效来吸引玩家

3、。这些施法效果很多都是使用粒子实现的。粒子系统由大量的粒子组成。每一组粒子具有一组属性、大小及纹理,可能还需要颜色、透明度、运动速度、方向、生命周期等属性。一个粒子究竟有什么样的属性,主要取决于具体的应用。粒子属性的初始值通常随机产生。整个粒子系统是随时间不断更新变化的。设计一个粒子系统,核心内容有3部分:1)粒子数据管理粒子系统中存在着相当数目的粒子。这些粒子会随着时间的变化从产生到消亡。如何合理的创建和释放这些资源,在复杂的粒子系统中一个重要的技术就是内存池技术。2)粒子更新粒子系统的更新函数会循环遍历粒子并对每个粒子的属性进行处理。3)粒子的渲染遍历整个系统中所有的可见粒子,并把这些粒子

4、绘制到屏幕上。粒子系统基本原理粒子系统是诸多粒子的集合,而且负责这些粒子的维护和显示工作。粒子系统保存着影响系统中所有的粒子的全局属性,诸如大小、起始位置、应用的纹理等。从功能上来说,粒子系统就是负责粒子的更新、显示、销毁和创建的系统。 粒子的数据组成要构建一个粒子系统,首先必须需要分析粒子系统的属性数据,对一般的粒子系统而言,一般要包含位置信息、速度、朝向生命周期以及颜色等属性信息。粒子系统的组成struct CParticle float m_fWidth; /宽度 float m_fHeight; /高度 bool m_bOwnDimension; /是否可控制粒子大小 DWORD m_

5、Color; /当前颜色(通常指顶点颜色) VECTOR3 m_vPosition; /位置 VECTOR3 m_vDirection; /方向(有长度的方向,包含速度) float m_fTimeToLive; /剩余生命 float m_fTotalTimeToLive; /生命周期 float m_fRotation; /当前的旋转弧度 float m_fSpeed; /速度;不同的粒子系统中的粒子有着不同的属性,然而有一些属性是共有的。1.0000001.000000 xing1.bmp50000.837758100.0000000.5000001.0000002.0000002.00

6、00000.0000000.0000000.0000000.0000005.000000huiduhuo2.bmp3.8920853.8920852.0943950.5061461 粒子的脚本控制粒子的产生总是遵循一定的规律,例如,大雪可以认为是从某个较高的平面产生,导弹的尾焰是从导弹尾部的圆形区域产生,火堆的火焰可以从一个圆柱形空间生成,喷火龙的火焰可以从一个点发射,着火的房子可以从屋顶的网格模型中生成。发射率决定了粒子生成的速率,如果发射率很高,粒子生存周期又很长,那么渲染一个粒子系统时耗费的时间就很多,渲染负荷就加大导致帧数急剧降低。通常情况下,粒子系统有一个粒子数量上限,当粒子数量超过

7、上限时就不再生成粒子。粒子发射器颜色指定了粒子初始的颜色和变化的颜色。粒子的生存期决定了粒子多久后消失并从内存中移出。粒子的发射形体发射器由于可以用简单的数学公式描述,类型多样,可以实现圆形、球形、矩形、圆锥形、圆柱形甚至是高次曲面。点发射器代表所有的粒子从一个点出发,根据一定的规律(偏移角度)让粒子产生后开始按指定的方向移动粒子在粒子系统中离开发射器以后的运动状态,要受到系统其他数据的影响。比如飞舞的雪花会受到重力场,风向等因素的影响。效果器就是粒子系统中影响粒子变化的。 重力场重力场是一种常用的场力,除了那些气体和质量较小的粒子以外,大部分粒子都受到重力场的影响。在物理学中,重力场中存在衡

8、定的重力加速度g=9.8m/s2,这里的g是“垂直向下”的。物体的位移遵循公式: s=s0+v0t+gt2/2在三维空间中,如果y轴负方向为向下、1个长度单位代表1米,那么重力加速度向量为: G=(0,-9.8,0)如果初始位置为S0,速度为V0,那么在重力场作用下运动的物体的位置可以描述为: S=S0+V0t+Gt2/2粒子的控制 纹理切换当渲染粒子序列时,切换纹理对象几乎是无法接受的,因为每次纹理切换都会耗费大量时间、切换纹理的代价甚至超过渲染粒子本身。但是有的时候粒子系统必须用到纹理的切换,如果要实现纹理切换,必须使用同一个纹理对象,然后分块使用。一个爆炸效果的粒子的几张纹理存储在同一张

9、位图中。当用这种方法切换纹理时,每次只使用纹理中的一部分,然后在更新时修改纹理坐标。内存池“池技术”是为了适应资源的频繁分配、释放而使用的预先分配的技术。这种技术一次性向系统申请足够使用的资源,但一开始并不完全使用它们,只是在需要的时候取出来使用,在使用完毕后归还给池。这种分配、释放的方法减少了向系统申请和释放资源的开销,使得应用程序能够高效地运行,因而这种方法常使用在一些对效率要求较为苛刻的场合。常用的池技术有:内存池、线程池、连接池等。粒子系统必须高效地管理大量的粒子。粒子会不断地产生、消亡,特别是类似于火焰、喷泉之类的粒子系统,粒子发射率很高,如果在内存中不断地分配和释放内存,将会耗费大

10、量的时间用于分配和释放内存。因此,通常使用内存池或类似的方法降低对系统资源的额外消耗。粒子系统刚开始产生粒子时,要为粒子申请内存空间;当粒子消亡时,并不直接释放,而是将内存回收,将那些存储已消失粒子信息的链表节点转移到一个空闲链表中。当粒子继续产生时,首先检查空闲链表是否为空,如果有就取出一个使用,直到这个列表为空才创建新的粒子对象。高效粒子绘制内存中用于保存粒子信息的链表节点有两类:活动的和空闲的,它们分别形成两个链表。void CParticleGroup:_LiveOrDead( float fElapsedTime ) CParticle *pParticle = NULL; ParticleActiveList:iterator iCur = m_ActiveParticles.begin(); ParticleActiveList:iterator iEnd = m_ActiveParticles.end(); for( ; iCur != iEnd; ) /递减m_fTimeToLive,表示还能存活的时间 pParticle = *iCur; if( pParticle-m_fTimeToLive m_fTimeToLive -= fElapsedTime; /递减存活时间 +iCur; /指向下一个粒子 点精灵的实现公告板的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论