粒子系统简单框架实现

时间:2013-05-23 03:29:28
【文件属性】:

文件名称:粒子系统简单框架实现

文件大小:219KB

文件格式:RAR

更新时间:2013-05-23 03:29:28

particle 粒子系统

粒子系统的一个简单框架 class CParticleSystem; class CParticle { public: enum TYPE { VISTUAL, PARTICLE_SYSTEM }; public: CParticle(VOID); virtual ~CParticle(VOID); public: INT liveFrame; // 生存时间 INT indexFrame; // 贞索引 BOOL isKeepLocal; // 保持本地坐标 // 说明: 相对于发射他的发射器而言 VEC3 scale; // 缩放 VEC3 position; // 位置 QUAT orientation; // 朝向 VEC4 color; // 颜色 VEC2 uvOffset; // 纹理坐标偏移 VEC3 velocity; // 速度 public: CParticle *pNext; // 链接下一个粒子 public: CEmitterBase *pEmitter; // 发射器指针 CParticleSystem *pEmitParticleSystem; // 发射的粒子系统 }; class CParticleSystem { public: typedef std::vector EmitterSet; typedef std::vector AffectorSet; public: CParticleSystem(VOID); virtual ~CParticleSystem(VOID); public: VOID SetParticleQuota(INT quota, CParticle::TYPE type, const CHAR *szParticleSystem); // 设置粒子总量 INT GetParticleQuota(VOID) const; // 获得粒子总量 public: VOID SetGfx(CGfxBase::TYPE type); // 设置图形 CGfxBase* GetGfx(VOID) const; // 获得图形 public: CEmitterBase* AddEmitter(CEmitterBase::TYPE type); // 添加发射器 VOID RemoveEmitter(CEmitterBase *pEmitter); // 删除发射器 INT GetEmitterCount(VOID) const; // 获得发射器数量 CEmitterBase* GetEmitter(INT indexEmitter) const; // 获得发射器 public: CAffectorBase* AddAffector(CAffectorBase::TYPE type); // 添加影响器 VOID RemoveAffector(CAffectorBase *pAffector); // 删除影响器 INT GetAffectorCount(VOID) const; // 获得影响器数量 CAffectorBase* GetAffector(INT indexAffector) const; // 获得影响器 public: VOID SetPosition(const VEC3 *position); // 设置位置 const VEC3* GetPosition(VOID) const; // 获得位置 VOID SetDirection(const VEC3 *direction); // 设置朝向 VOID SetOrientation(const QUAT *orientation); // 设置朝向 const QUAT* GetOrientation(VOID) const; // 获得朝向 public: VOID Play(VOID); // 播放 VOID Stop(VOID); // 停止 VOID Pause(VOID); // 暂停 VOID Resume(VOID); // 继续 VOID Update(VOID); // 更新 VOID Render(VOID); // 渲染 protected: VOID UpdateParticles(VOID); // 更新粒子 VOID UpdateEmitter(VOID); // 更新发射器 VOID UpdateAffector(VOID); // 更新影响器 protected: BOOL m_isPlaying; // 播放状态 BOOL m_isPause; // 暂停播放状态 INT m_indexFrame; // 贞计数 INT m_beginFrame; // 开始贞 INT m_durationFrame; // 持续贞数 protected: CParticle::TYPE m_particleType; // 粒子类型 CGfxBase *m_pGfx; // 图形 INT m_particleQuota; // 粒子总数 CParticle *m_pParticles; // 粒子池 CParticle *m_pActiveParticleList; // 活动粒子链表 CParticle *m_pFreeParticleList; // 空闲粒子链表 EmitterSet m_emitters; // 发射器集合 AffectorSet m_affectors; // 影响器集合 CGfxFactory m_gfxFactory; // 图形工厂 CEmitterFactory m_emitterFactory; // 发射器工厂 CAffectorFactory m_affectorFactory; // 影响器工厂 protected: VEC3 m_position; // 位置 QUAT m_orientation; // 朝向 };


【文件预览】:
GfxDebug.cpp
AffectorLinear.cpp
GLSample.cpp
GfxDebug.h
ParticleSystem.cpp
stdafx.h
AffectorBase.cpp
AffectorBase.h
EmitterPoint.h
Particle.sln
GLSample.rc
targetver.h
ParticleSystem.h
GLSample.ico
math.h
glew32.dll
small.ico
stdafx.cpp
ReadMe.txt
GfxBase.h
Resource.h
glew.h
EmitterBase.h
typedef.h
AffectorLinear.h
EmitterBase.cpp
GfxBase.cpp
Particle.vcproj
GLSample.h
glew32.lib
EmitterPoint.cpp

网友评论

  • 下下来看看怎么样
  • 运行成功呀
  • 虽然有点简陋,但构成简单,适合初学者学习~
  • 基础概念够清晰
  • 资源不错,大家可以借鉴一下
  • 简单了点,不过还不错
  • 不错,学习的好资源
  • 作为学习性的代码不错
  • 很不错啊,完整的看到了一个粒子系统的组成
  • 代码写的不错,就是效果丑了点
  • 支持原创,好资源
  • 运行成功呀,新手还在研究中~
  • 代码写的不错,就是效果丑了点
  • 虽然和我想要的资源不太一样,但是还是挺值得学习的!!!!
  • 不错,很好的例子。
  • 不错,很清晰完整的框架,看能很快就能理解粒子系统的构成
  • VC写的,自己研究研究
  • 下载了。。可惜不是我需要的
  • 下载下来了,能用!很好!
  • 是VC.NET,哎打不开。。。
  • 可以用挺好的,,,,
  • 下载后,运行成功,作者提供了一个不错实现粒子效果的思路
  • 下载下来了,能用!很好!
  • 非常不错,直接能编译过, 非常适合新人学习
  • 我是Java程序,做粒子看来只能靠C了,看了这个感觉思路我还是要从零开始学C 了
  • 最近尝试编写一些粒子系统实现烟花爆炸之类的效果,写出來后用起来效果不是很好,这篇文章给了我很大启发,感谢!