ParticleSystem.h
上传用户:henghua
上传日期:2007-11-14
资源大小:7655k
文件大小:3k
- #ifndef _particlesystem_h_
- #define _particlesystem_h_
- #include <d3dx9.h>
- //-----------------------------------------------------------------------------
- // *****粒子系统类的辅助参量*****
- //-----------------------------------------------------------------------------
- // 粒子体的属性
- struct PARTICLE
- {
- BOOL m_bSpark; // 粒子撞击到障碍物产生飞溅
- D3DXVECTOR3 m_vPos; // 当前位置
- D3DXVECTOR3 m_vVel; // 当前方向
- D3DXVECTOR3 m_vPos0; // 初始位置
- D3DXVECTOR3 m_vVel0; // 初始方向
- FLOAT m_fTime0; // 时间步长
- D3DXCOLOR m_clrDiffuse; // 初始漫反射颜色
- D3DXCOLOR m_clrFade; // 淡出漫反射颜色
- FLOAT m_fFade; // 淡出过程
- PARTICLE* m_pNext; // 指向下一粒子体的指针
- };
- // 粒子体的颜色枚举量(白色、红色、绿色、蓝色、***)
- enum PARTICLE_COLORS
- { COLOR_WHITE, COLOR_RED, COLOR_GREEN, COLOR_BLUE, NUM_COLORS };
- // 初始化参量
- struct cparticleconfig
- {
- DWORD dwFlush;
- DWORD dwDiscard;
- FLOAT fRadius;
- char tex_file_name[30];
- D3DXVECTOR3 src_pos1, src_pos2;
- D3DXVECTOR3 src_dir;
- D3DXVECTOR3 src_range;
- float src_vec;
- };
- // 顶点格式
- struct POINTVERTEX
- {
- D3DXVECTOR3 v;
- D3DCOLOR color;
- static const DWORD FVF;
- };
- #define D3DFVF_POINTVERTEX (D3DFVF_XYZ | D3DFVF_DIFFUSE)
- //-----------------------------------------------------------------------------
- // *****粒子系统类*****
- //-----------------------------------------------------------------------------
- class CParticleSystem
- {
- public:
- LPDIRECT3DDEVICE9 device; // d3d设备
- LPDIRECT3DTEXTURE9 m_pParticleTexture; // 粒子纹理
- FLOAT m_fRadius; // 视为触地的最小高度
- DWORD m_dwBase; // 顶点缓冲区绘制的起始索引
- DWORD m_dwFlush; // 顶点缓冲区每一块的大小
- DWORD m_dwDiscard; // 整个缓冲区大小
- DWORD m_dwParticles; // 计数器
- DWORD m_dwParticlesLim;
- PARTICLE* m_pParticles; // 粒子对象链表指针
- PARTICLE* m_pParticlesFree; // 空闲粒子对象链表指针
- // 顶点缓冲区
- LPDIRECT3DVERTEXBUFFER9 m_pVB;
- // 线性粒子源参量
- D3DXVECTOR3 src_pos1, src_pos2;
- D3DXVECTOR3 src_dir;
- D3DXVECTOR3 src_range;
- float src_vec;
- bool open;
- public:
- CParticleSystem( LPDIRECT3DDEVICE9 dev , cparticleconfig * config );
- ~CParticleSystem();
- // 初始化创建工作
- HRESULT Init();
- // 负责粒子运动的核心函数,每桢更新
- HRESULT Update( FLOAT fSecsPerFrame, DWORD dwNumParticlesToEmit,
- const D3DXCOLOR &dwEmitColor, const D3DXCOLOR &dwFadeColor,
- FLOAT fEmitVel, D3DXVECTOR3 vPosition );
- // 负责渲染粒子的核心函数
- void Render();
- // 画粒子实体
- HRESULT DrawParticles();
- };
- inline DWORD FtoDW( FLOAT f ) { return *((DWORD*)&f); }
- #endif