ParticleSystem.h
上传用户:henghua
上传日期:2007-11-14
资源大小:7655k
文件大小:3k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. #ifndef _particlesystem_h_
  2. #define _particlesystem_h_
  3. #include <d3dx9.h>
  4. //-----------------------------------------------------------------------------
  5. // *****粒子系统类的辅助参量*****
  6. //-----------------------------------------------------------------------------
  7. // 粒子体的属性
  8. struct PARTICLE
  9. {
  10.     BOOL        m_bSpark;     // 粒子撞击到障碍物产生飞溅
  11.     D3DXVECTOR3 m_vPos;       // 当前位置
  12.     D3DXVECTOR3 m_vVel;       // 当前方向
  13.     D3DXVECTOR3 m_vPos0;      // 初始位置
  14.     D3DXVECTOR3 m_vVel0;      // 初始方向
  15.     FLOAT       m_fTime0;     // 时间步长
  16.     D3DXCOLOR   m_clrDiffuse; // 初始漫反射颜色
  17.     D3DXCOLOR   m_clrFade;    // 淡出漫反射颜色
  18.     FLOAT       m_fFade;      // 淡出过程
  19.     PARTICLE*   m_pNext;      // 指向下一粒子体的指针
  20. };
  21. // 粒子体的颜色枚举量(白色、红色、绿色、蓝色、***)
  22. enum PARTICLE_COLORS 
  23. { COLOR_WHITE, COLOR_RED, COLOR_GREEN, COLOR_BLUE, NUM_COLORS };
  24. // 初始化参量
  25. struct cparticleconfig
  26. {
  27. DWORD dwFlush;
  28. DWORD dwDiscard;
  29. FLOAT fRadius;
  30. char tex_file_name[30];
  31. D3DXVECTOR3 src_pos1, src_pos2;
  32. D3DXVECTOR3 src_dir;
  33. D3DXVECTOR3 src_range;
  34. float src_vec;
  35. };
  36.  // 顶点格式
  37. struct POINTVERTEX
  38. {
  39.     D3DXVECTOR3 v;
  40.     D3DCOLOR    color;
  41.     static const DWORD FVF;
  42. };
  43. #define D3DFVF_POINTVERTEX  (D3DFVF_XYZ | D3DFVF_DIFFUSE)
  44. //-----------------------------------------------------------------------------
  45. // *****粒子系统类*****
  46. //-----------------------------------------------------------------------------
  47. class CParticleSystem
  48. {
  49. public:
  50. LPDIRECT3DDEVICE9 device; // d3d设备
  51. LPDIRECT3DTEXTURE9 m_pParticleTexture; // 粒子纹理
  52.     FLOAT     m_fRadius; // 视为触地的最小高度
  53.     DWORD     m_dwBase; // 顶点缓冲区绘制的起始索引
  54. DWORD     m_dwFlush; // 顶点缓冲区每一块的大小
  55.     DWORD     m_dwDiscard; // 整个缓冲区大小
  56.     DWORD     m_dwParticles; // 计数器
  57.     DWORD     m_dwParticlesLim;
  58.     PARTICLE* m_pParticles; // 粒子对象链表指针
  59.     PARTICLE* m_pParticlesFree; // 空闲粒子对象链表指针
  60.     // 顶点缓冲区
  61.     LPDIRECT3DVERTEXBUFFER9 m_pVB;
  62. // 线性粒子源参量
  63. D3DXVECTOR3 src_pos1, src_pos2;
  64. D3DXVECTOR3 src_dir;
  65. D3DXVECTOR3 src_range;
  66. float src_vec;
  67. bool open;
  68. public:
  69.     CParticleSystem( LPDIRECT3DDEVICE9 dev , cparticleconfig * config );
  70.    ~CParticleSystem();
  71. // 初始化创建工作
  72.    HRESULT Init();
  73. // 负责粒子运动的核心函数,每桢更新
  74.     HRESULT Update( FLOAT fSecsPerFrame, DWORD dwNumParticlesToEmit,
  75.                     const D3DXCOLOR &dwEmitColor, const D3DXCOLOR &dwFadeColor,
  76.                     FLOAT fEmitVel, D3DXVECTOR3 vPosition );
  77. // 负责渲染粒子的核心函数
  78.     void Render();
  79. // 画粒子实体
  80. HRESULT DrawParticles();
  81. };
  82. inline DWORD FtoDW( FLOAT f ) { return *((DWORD*)&f); }
  83. #endif