zfxBillBoard.h
上传用户:junlon
上传日期:2022-01-05
资源大小:39075k
文件大小:2k
源码类别:

DirextX编程

开发平台:

Visual C++

  1. #ifndef __d3d_ZFXBillBoard_H__
  2. #define __d3d_ZFXBillBoard_H__
  3. //#pragma once
  4. class CZFXCamera;
  5. typedef struct tagZFXBBDVERTEX{
  6. float x, y, z; // The position of the vertex.
  7. D3DCOLOR    color;    // The color
  8. FLOAT       tu, tv;   // The texture coordinates
  9. }ZFXBBDVERTEX;
  10. #define D3DFVF_ZFXBBDVERTEX  D3DFVF_XYZ|D3DFVF_DIFFUSE|D3DFVF_TEX1
  11. class CZFXBillBoard
  12. {
  13. public:
  14. CZFXBillBoard(void);
  15. ~CZFXBillBoard(void);
  16. protected:
  17. D3DXVECTOR3 m_posVec; //原点,定义为矩形下边的中点位置
  18. float m_width, m_height; //公告板的宽度和高度
  19. D3DXVECTOR2 m_ortVec; //朝向
  20. LPDIRECT3DVERTEXBUFFER9 m_pVB;//顶点缓冲
  21. D3DXMATRIX m_matWorld;    //属于公告板的世界坐标系
  22. public:
  23. // 创建公告板对象,主要是顶点缓冲
  24. HRESULT CreateBoard(LPDIRECT3DDEVICE9 pd3dDevice, D3DXVECTOR3& posVec, float width, float height);
  25. // 更新公告板的朝向,视点移动之后,一定要调用该函数
  26. void UpdateOrient(CZFXCamera* camera);
  27. // 渲染公告板
  28. void OnRender(LPDIRECT3DDEVICE9 pd3dDevice);
  29. static void preRender(LPDIRECT3DDEVICE9 pd3dDevice);
  30. static void postRender(LPDIRECT3DDEVICE9 pd3dDevice);
  31. };
  32. class CZFXBillBoardMgr
  33. {
  34. public:
  35. CZFXBillBoardMgr();
  36. ~CZFXBillBoardMgr();
  37. protected:
  38. std::list<CZFXBillBoard> m_list;
  39. IDirect3DTexture9* m_pTexture; //纹理
  40. public:
  41. int GetBoardNum();
  42. // 加载纹理
  43. HRESULT LoadTextureFromFile(LPDIRECT3DDEVICE9 pd3dDevice, LPCTSTR texFileName);
  44. // 添加一个公告板实例
  45. void AddBillBoard(CZFXBillBoard& billBoard);
  46. // 更新公告板的朝向,视点移动之后,一定要调用该函数
  47. void UpdateBoardOrient(CZFXCamera* camera);
  48. // 渲染公告板
  49. // 在此函数中自动加载了纹理,和调用CZFXBillBoard::preRender()和CZFXBillBoard::preRender()函数
  50. void OnRender(LPDIRECT3DDEVICE9 pd3dDevice);
  51. };
  52. #endif //__d3d_ZFXBillBoard_H__