资源说明:粒子系统的一个简单框架
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; // 朝向
};
本源码包内暂不包含可直接显示的源代码文件,请下载源码包。