Md2.h
上传用户:mywjrx
上传日期:2008-01-23
资源大小:703k
文件大小:4k
源码类别:

射击游戏

开发平台:

Visual C++

  1. #ifndef _MD2_H
  2. #define _MD2_H
  3. // These are the needed defines for the max values when loading .MD2 files
  4. #define MD2_MAX_TRIANGLES 4096
  5. #define MD2_MAX_VERTICES 2048
  6. #define MD2_MAX_TEXCOORDS 2048
  7. #define MD2_MAX_FRAMES 512
  8. #define MD2_MAX_SKINS 32
  9. #define MD2_MAX_FRAMESIZE (MD2_MAX_VERTICES * 4 + 128)
  10. // This holds the header information that is read in at the beginning of the file
  11. struct tMd2Header
  12.    int magic; // This is used to identify the file
  13.    int version; // The version number of the file (Must be 8)
  14.    int skinWidth; // The skin width in pixels
  15.    int skinHeight; // The skin height in pixels
  16.    int frameSize; // The size in bytes the frames are
  17.    int numSkins; // The number of skins associated with the model
  18.    int numVertices; // The number of vertices (constant for each frame)
  19.    int numTexCoords; // The number of texture coordinates
  20.    int numTriangles; // The number of faces (polygons)
  21.    int numGlCommands; // The number of gl commands
  22.    int numFrames; // The number of animation frames
  23.    int offsetSkins; // The offset in the file for the skin data
  24.    int offsetTexCoords; // The offset in the file for the texture data
  25.    int offsetTriangles; // The offset in the file for the face data
  26.    int offsetFrames; // The offset in the file for the frames data
  27.    int offsetGlCommands; // The offset in the file for the gl commands data
  28.    int offsetEnd; // The end of the file offset
  29. };
  30. // This is used to store the vertices that are read in for the current frame
  31. struct tMd2AliasTriangle
  32. {
  33.    byte vertex[3];
  34.    byte lightNormalIndex;
  35. };
  36. // This stores the normals and vertices for the frames
  37. struct tMd2Triangle
  38. {
  39.    float vertex[3];
  40.    float normal[3];
  41. };
  42. // This stores the indices into the vertex and texture coordinate arrays
  43. struct tMd2Face
  44. {
  45.    short vertexIndices[3];
  46.    short textureIndices[3];
  47. };
  48. // This stores UV coordinates
  49. struct tMd2TexCoord
  50. {
  51.    short u, v;
  52. };
  53. // This stores the animation scale, translation and name information for a frame, plus verts
  54. struct tMd2AliasFrame
  55. {
  56.    float scale[3];
  57.    float translate[3];
  58.    char name[16];
  59.    tMd2AliasTriangle aliasVertices[1];
  60. };
  61. // This stores the frames vertices after they have been transformed
  62. struct tMd2Frame
  63. {
  64.    char strName[16];
  65.    tMd2Triangle *pVertices;
  66. };
  67. // This stores a skin name
  68. typedef char tMd2Skin[64];
  69. // This class handles all of the loading code
  70. class CLoadMD2
  71. {
  72. public:
  73. CLoadMD2(); // This inits the data members
  74. // This is the function that you call to load the MD2
  75. bool ImportMD2(t3DModel *pModel, char *strFileName, char *strTexture);
  76. private:
  77. // This reads in the data from the MD2 file and stores it in the member variables
  78. void ReadMD2Data();
  79. // This converts the member variables to our pModel structure
  80. void ConvertDataStructures(t3DModel *pModel);
  81. // This computes the vertex normals for the object (used for lighting)
  82. void ComputeNormals(t3DModel *pModel);
  83. // This frees memory and closes the file
  84. void CleanUp();
  85. // The file pointer
  86. FILE *m_FilePointer;
  87. // Member variables
  88. tMd2Header m_Header; // The header data
  89. tMd2Skin *m_pSkins; // The skin data
  90. tMd2TexCoord *m_pTexCoords; // The texture coordinates
  91. tMd2Face *m_pTriangles; // Face index information
  92. tMd2Frame *m_pFrames; // The frames of animation (vertices)
  93. };
  94. #endif
  95. /////////////////////////////////////////////////////////////////////////////////
  96. //
  97. // * QUICK NOTES * 
  98. // 
  99. // This file holds all of the structure and class definitions needed to load
  100. // a MD2 Quake2 file.
  101. //
  102. // 
  103. // Ben Humphrey (DigiBen)
  104. // Game Programmer
  105. // DigiBen@GameTutorials.com
  106. // Co-Web Host of www.GameTutorials.com
  107. //
  108. // The Quake2 .Md2 file format is owned by ID Software.  This tutorial is being used 
  109. // as a teaching tool to help understand model loading and animation.  This should
  110. // not be sold or used under any way for commercial use with out written conset
  111. // from ID Software.
  112. //
  113. // Quake and Quake2 are trademarks of id Software.
  114. // All trademarks used are properties of their respective owners. 
  115. //
  116. //