粒子系统的一个简单框架 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<CEmitterBase*> EmitterSet; typedef std::vector<CAffectorBase*> 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; // 朝向 };
- 1
- 粉丝: 52
- 资源: 3
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
- 1
- 2
- 3
- 4
- 5
- 6
前往页