MD2Loader.h
上传用户:hkb425
上传日期:2007-06-16
资源大小:34191k
文件大小:6k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // MD2Loader.h: interface for the CMD2Loader class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_MD2LOADER_H__459A98E1_DB94_11D5_AD18_444553540000__INCLUDED_)
  5. #define AFX_MD2LOADER_H__459A98E1_DB94_11D5_AD18_444553540000__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include "StructDef.h"
  10. #include "md2normal.h"
  11. /* MD2 state constants */
  12. #define ANIMATE_CURRENT -100
  13. #define IDLE1 0
  14. #define RUN 1
  15. #define SHOT_STAND 2
  16. #define SHOT_SHOULDER 3
  17. #define JUMP 4
  18. #define IDLE2 5
  19. #define SHOT_FALLDOWN 6
  20. #define IDLE3 7
  21. #define IDLE4 8
  22. #define CROUCH 9
  23. #define CROUCH_CRAWL 10
  24. #define CROUCH_IDLE 11
  25. #define CROUCH_DEATH 12
  26. #define DEATH_FALLBACK 13
  27. #define DEATH_FALLFORWARD 14
  28. #define DEATH_FALLBACKSLOW 15
  29. #define IDLE1_START 0
  30. #define IDLE1_END 39
  31. #define RUN_START 40
  32. #define RUN_END 45
  33. #define SHOT_STAND_START 46
  34. #define SHOT_STAND_END 60
  35. #define SHOT_SHOULDER_START 61
  36. #define SHOT_SHOULDER_END 66
  37. #define JUMP_START 67
  38. #define JUMP_END 73
  39. #define IDLE2_START 74
  40. #define IDLE2_END 95
  41. #define SHOT_FALLDOWN_START 96
  42. #define SHOT_FALLDOWN_END 112
  43. #define IDLE3_START 113
  44. #define IDLE3_END 122
  45. #define IDLE4_START 123
  46. #define IDLE4_END 135
  47. #define CROUCH_START 136
  48. #define CROUCH_END 154
  49. #define CROUCH_CRAWL_START 155
  50. #define CROUCH_CRAWL_END 161
  51. #define CROUCH_IDLE_START 162
  52. #define CROUCH_IDLE_END 169
  53. #define CROUCH_DEATH_START 170
  54. #define CROUCH_DEATH_END 177
  55. #define DEATH_FALLBACK_START 178
  56. #define DEATH_FALLBACK_END 185
  57. #define DEATH_FALLFORWARD_START 186
  58. #define DEATH_FALLFORWARD_END 190
  59. #define DEATH_FALLBACKSLOW_START 191
  60. #define DEATH_FALLBACKSLOW_END 198
  61. //------------------------------------------------------------------//
  62. //- MD2 STRUCTURES -------------------------------------------------//
  63. //------------------------------------------------------------------//
  64. typedef struct MD2_HEADER_TYP
  65. {
  66. int magic; //The 'magic' number (always 844121161)
  67. int version; //The version number of the file (always 8)
  68. int skinWidth; //The width of the model's skin
  69. int skinHeight; //The height of the model's skin
  70. int frameSize; //The size of each frame (in BYTEs)
  71. int numSkins; //The model's number of skins
  72. int numVertices; //The model's number of vertices
  73. int numTexcoords; //The model's number of texture coordinates (most likely, its not the same number as the vertices)
  74. int numTriangles; //The number of triangles that make up the model
  75. int numGlCommands; //The number of DWORDs (4 bytes) in the GLcommand list (which decide to render the model with tri strips, or fans)
  76. int numFrames; //The number of frames (of animation) that the model has
  77. int offsetSkins; //Offset in the file of the model, to where the skin information is
  78. int offsetTexcoords; //Offset in the file of the model, to where the texture coordinate information is
  79. int offsetTriangles; //Offset in the file of the model, to where the traingle information is
  80. int offsetFrames; //Offset in the file of the model, to where the first frame information is given
  81. int offsetGlCommands; //Offset in the file of the model, to where the GLcommand information is
  82. int offsetEnd; //Offset in the file of the model, to where the end of it is
  83. } MD2_HEADER, *MD2_HEADER_PTR;
  84. typedef struct MD2_VERTEX_TYP
  85. {
  86. unsigned char vertex[3]; //Scaled version of the model's 'real' vertex coordinate
  87. unsigned char lightNormalIndex; //An index into the table of normals, kept by Quake 2
  88. } MD2_VERTEX, *MD2_VERTEX_PTR;
  89. typedef struct MD2_FRAME_TYP
  90. {
  91. float    scale[3]; //The scale used by the model's 'fake' vertex structure
  92. float    translate[3]; //The translation used by the model's 'fake' vertex structure
  93. char    name[16]; //The name for the frame
  94. MD2_VERTEX vertices[1]; //An array of MD2_VERTEX structures
  95. } MD2_FRAME, *MD2_FRAME_PTR;
  96. typedef struct MD2_MODELVERTEX_TYP
  97. {
  98. float x,y,z; //The (x,y,z) location of the vertex
  99. int   normalIndex;
  100. } MD2_MODELVERTEX, *MD2_MODELVERTEX_PTR;
  101. struct  MD2_TEMPVERTEX  //用于存放glCommands要画的三角形trips或fans的数据
  102. {
  103. float  texcoord[2];
  104. float  vertex[3];     
  105. int    normalIndex;
  106. };
  107. struct ACTION
  108. {
  109. int startFrame;
  110. int endFrame;
  111. };
  112. ////////////////////////////////////////////////////////////
  113. class CMD2Loader  
  114. {
  115. public:
  116. bool InitMd2Loader(char* ModelFileName,char* TextureFileName,float scale);
  117. void RenderOneFrame(int numFrame);
  118. void Animate(int startFrame,int endFrame,float Interpolation);
  119. void DrawMD2Boundary();
  120. BOUNDARY_3D m_boundary;
  121. VERTEX      m_eyePos;
  122. int numFrames;
  123. private:
  124. int numGlCommands;
  125. long*  glCommands;
  126. MD2_MODELVERTEX *pVertexData;
  127. MD2_TEMPVERTEX  *pTempFrame;
  128. int frameSize;
  129. int numTriangles;
  130. int numVertices;
  131. MD2_MODELVERTEX*   startPointer;
  132. MD2_MODELVERTEX*   endPointer;
  133. unsigned int textureID;
  134. float scale;
  135. CMD2Normal     m_MD2Normal;
  136.      void PreProcess();
  137.      bool LoadModel(char* ModelFileName);
  138.      bool LoadTexture(char* TextureFileName);
  139. public:
  140.      CMD2Loader() : 
  141. numGlCommands(0), frameSize(0), numFrames(0), 
  142. glCommands(NULL),startPointer(NULL),endPointer(NULL),
  143. scale(0.1f),pVertexData(NULL),pTempFrame(NULL)
  144. { }
  145. ~CMD2Loader()
  146. {
  147. if(glCommands)
  148. delete [] glCommands;
  149. if(pVertexData)
  150. delete [] pVertexData;
  151. if(pTempFrame)
  152. delete [] pTempFrame;
  153. }
  154. };
  155. #endif // !defined(AFX_MD2LOADER_H__459A98E1_DB94_11D5_AD18_444553540000__INCLUDED_)