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

游戏引擎

开发平台:

Visual C++

  1. #ifndef _MESHOBJ_H_
  2. #define _MESHOBJ_H_
  3. #include <d3dx9.h>
  4. #include <string.h>
  5. #include "ParticleSystem.h"
  6. enum objMovementMode
  7. {
  8. moving_on_sea = 0,
  9. moving_up_freely,
  10. moving_down_freely,
  11. fixed_on_sea,
  12. fixed_up_sea,
  13. fixed_down_sea,
  14. is_land
  15. };
  16. enum objDrawMtrlsTexs
  17. {
  18. not_have_mtrls =0,
  19. not_have_texs,
  20. have_mtrls,
  21. have_texs,
  22. load_texs
  23. };
  24. struct cmeshobjconfig
  25. {
  26. int draw_mtrls_state; // 材质来源
  27. int draw_texs_state; // 纹理来源
  28. int movement_mode; // 运动方式
  29. D3DXVECTOR3 translate; // 平移量
  30. D3DXVECTOR3 scale; // 放缩量
  31. D3DXVECTOR3 rotate; // 旋转量
  32. };
  33. class CMeshObj
  34. {
  35. // ****数据成员****
  36. public:
  37. // **D3D设备指针**
  38. LPDIRECT3DDEVICE9 device;
  39. // **网格模型相关参数**
  40. char X_filename[50]; // 网格模型的文件名
  41. LPD3DXMESH pMesh;
  42. D3DMATERIAL9 *pMeshMtrls; // 从模型文件.x中获得的材质
  43. LPDIRECT3DTEXTURE9 *pMeshTexs; // 从模型文件.x中获得的纹理,,也可后来从图文件中加载覆盖原来纹理
  44. LPD3DXBUFFER pAdjacency, pMaterials, pEffectInstances; // 从模型文件.x中获得的关于相邻、材质、效果的缓冲区 
  45. LPD3DXEFFECT pLoadEffect; // 后来从文件.fx中加载的效果
  46. DWORD num_mtrls; // 模型文件中材质(即:子模型)的数目
  47. int draw_mtrls_state;
  48. int draw_texs_state;
  49. int load_texs_mode;
  50. int gpu_tex;
  51. // **模型的物理参数**
  52. // 模型的空间参数(位置、姿态)
  53. D3DXVECTOR3 position, vUp, vRight;
  54. D3DXMATRIX matPitch, matYaw, matRoll;
  55. D3DXVECTOR3 translate0, scale0, rotate0;
  56. D3DXMATRIX world, matWorld0, matWorld, boatRolling; // matPitch, matYaw, matRoll--〉matWorld
  57. D3DXMATRIX translate, rotate, scale;
  58. // 四元数控制参数
  59. D3DXVECTOR3 vLook;
  60. float fRoll; // 横滚角--〉matRoll
  61. float fPitch; // 俯仰角--〉matPitch
  62. float fYaw; // 偏航角--〉matYaw
  63. long time, lastTime;
  64. // 模型的运动参数
  65. int movement_mode;
  66. float velosity;
  67. // **模型与用户输入(键盘)的交互参数**
  68. bool keys[256];
  69. // **模型在海面的折射与反射参数**
  70. int refle_mode;
  71. int refra_mode;
  72. // ***船模型与粒子系统的关系参量***
  73. CParticleSystem *p_parSys[3];
  74. int attached_par;
  75. // ***海洋高度***
  76. float seaHeight;
  77. // ****函数成员****
  78. public:
  79. CMeshObj(const LPDIRECT3DDEVICE9 dev, char *xfilename, cmeshobjconfig *config);
  80. ~CMeshObj();
  81. // **初始化模块**
  82. HRESULT Init();
  83. HRESULT LoadTexture(char *filename, int i);
  84. HRESULT LoadEffect(char *filenamei);
  85. // **渲染模块**
  86. void UpdateHeight(float height);
  87. void SetWorldMatrix();
  88. void Render();
  89. void SetSunLight();
  90. // **更新信息模块**
  91. void Changeconfig(cmeshobjconfig *config);
  92. // **与用户交互模块**
  93. void GetKey(int i); // 消息处理
  94. void LostKey(int i); // 消息处理
  95. // ***设置船模型与粒子系统的关系参量模块***
  96. void InitParSys(cparticleconfig *config);
  97. void ControlBoat(float interval);
  98. // **辅助函数列表**
  99. private:
  100. void RemovePathFromFileName(LPSTR fullPath, LPSTR fileName);
  101. };
  102. #endif