博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
OGRE粒子系统简介
阅读量:4677 次
发布时间:2019-06-09

本文共 2043 字,大约阅读时间需要 6 分钟。

1,粒子系统介绍                          

    每个引擎都会有自己的粒子系统,粒子系统特效在游戏中运用广泛,比如射击类游戏中的爆炸特效,烟雾特效,开枪时喷出的火焰,撞击时击出的火花等等多半由粒子系统实现。粒子系统的基本单元是粒子,每个粒子一般具有形状、大小、颜色、透明度、位置、速度、加速度、方向、生命周期等属性。每一帧,粒子系统一般都会执行如下步骤:

    1) 产生新的粒子,并赋予相应的属性;
    2) 删除超过生命周期的粒子;
    3) 更新粒子的动态属性;
    4) 渲染所有有效粒子。

 

2, OGRE 粒子系统。   

     OGRE粒子系统还是比较清晰易懂的,它由ParticleSystemManage(粒子系统管理器)、ParticleSystem(粒子系统)、ParticleSystemRenderer(粒子渲染器)、ParticleEmitter(粒子发射器)、ParticleAffector(粒子影响器)、Particle(粒子)等组成。

    1) ParticleSystemManager(粒子系统管理器)

     此类类似于OGRE中的SceneManager,单件模式,内含粒子系统工厂集合,粒子发射器工厂集合,粒子影响器工厂集合,以及粒子渲染器工厂集合,用于创建和管理粒子系统、粒子发射器、粒子影响器、粒子渲染器。该类还负责加载和分析粒子系统脚本。

 

    2) ParticleSystem(粒子系统)

    具体的粒子系统类,它需要包含具体的ParticleEmitter 集合、ParticleAffector集合、ParticleSystemRenderer,Particle集合,用于粒子的创建、更新、渲染。

 

    3) ParticleEmitter(粒子发射器)

    用于创建粒子,赋予粒子初始属性赋值,最重要的方法是_initParticle(),该类为抽象类,OGRE中提供了如下派生类,自己也可以根据需要编写自己的Emitter:

      AreaEmitter

      BoxEmitter

      CylinderEmitter

      EllipsoidEmitter

      HollowEllipsoidEmitter

      PointEmitter

      RingEmitter

 

    4) ParticleAffector(粒子影响器)

    用于在粒子的生命周期内更新粒子的属性,最重要的方法是 _affectParticles(),OGRE中提供了如下派生类,自己也可以根据需要编写自己的Affector:

      ColourFaderAffector

      ColourImageAffector

      ColourInterpolatorAffector

      DeflectorPlaneAffector

      DirectionRandomiserAffector

      LinearForceAffector

      RotationAffector

      ScaleAffector

 

    6) ParticleSystemRenderer(粒子渲染器)

    该类用于渲染粒子系统,该类为抽象类,ORGE提供了BillboardParticleRenderer具体类,自己也可以根据需要编写自己的粒子渲染类。

 

    7) Particle(粒子)

     粒子系统的基本元素,粒子,存储了粒子的所有属性和状态。

 

 3 OGRE粒子系统执行流程

    1)初始化

ParticleSystemManager::addEmitterFactory()

  ParticleSystemManager::addAffectorFactory()

          ParticleSystemManager ::addRendererFactory()

          ParticleSystemManager::createTemplate()

               ParticleSystem::setRenderer()

                   ParticleSystemManager::_createRenderer()

               ParticleSystem::addEmitter()

                   ParticleSystemManager::_createEmitter()

               ParticleSystem::addAffector()

                   ParticleSystemManager::_createAffector()

     2) 每一帧,执行如下更新

           ParticleSystem::_update()

                 ParticleSystem::_triggerAffectors()

                      Affector::_affectParticles()

                 ParticleSystem ::_triggerEmitters()

                      Emitter::_initParticle()

                 ParticleSystem::_updateRenderQueue()

                      ParticleRenderer::_updateRenderQueue()

 

 

 

 

 

   

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/cxrs/archive/2012/06/07/2540678.html

你可能感兴趣的文章
优化统计服务
查看>>
线上服务故障处理原则
查看>>
孪生兄弟状态模式与策略模式有什么区别,究竟该如何选择
查看>>
ヘルプ
查看>>
centos7 添加开机启动项
查看>>
luogu【P2745】[USACO5.3]窗体面积Window Area
查看>>
Codeforces 346D Robot Control(01BFS)
查看>>
CSS3学习笔记--media query 响应式布局
查看>>
NHibernate.3.0.Cookbook第四章第2节的翻译
查看>>
19.C#逐一介绍IEnumerable和IEnumerable<T>中的扩展方法(10.3-10.5)
查看>>
听说最近你读过不少书
查看>>
linux之Ubuntu下Django+uWSGI+nginx部署
查看>>
【转】Struts1.x系列教程(2):简单的数据验证
查看>>
HTML head元素
查看>>
requireJS
查看>>
Poj3667Hotel线段树
查看>>
待嫁闺中:PPTV的辛酸史
查看>>
作用域
查看>>
CSS文本方向
查看>>
Dev Grid拖拽移动行
查看>>