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

游戏引擎

开发平台:

Visual C++

  1. // SMFLoader.h: interface for the CSMFLoader class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_SMFLOADER_H__1F4AECE1_B383_11D6_90CE_5254AB37CDC9__INCLUDED_)
  5. #define AFX_SMFLOADER_H__1F4AECE1_B383_11D6_90CE_5254AB37CDC9__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include "SMFNormal.h"
  10. #include "structdef.h"
  11. #define SMF_STAND     0
  12. #define SMF_RUN       1
  13. #define SMF_ATTACK    2
  14. #define SMF_PAIN      3
  15. #define SMF_FLIP      4
  16. #define SMF_WAVE      5
  17. #define SMF_CRSTAND   6
  18. #define SMF_CRWALK    7
  19. #define SMF_CRATTACK  8
  20. #define SMF_CRPAIN    9
  21. #define SMF_DEATH1    10
  22. #define SMF_DEATH2    11
  23. #define SMF_GUN_MOUTH  0
  24. #define SMF_EYE_POS    1
  25. #define SMF_HEART_POS  2
  26. struct SMF_RAW_VERTEX
  27. {
  28. unsigned char vertex[3]; //Scaled version of the model's 'real' vertex coordinate
  29. unsigned char lightNormalIndex; //An index into the table of normals, kept by Quake 2
  30. };
  31. struct SMF_FRAME
  32. {
  33. float        scale[3]; //The scale used by the model's 'fake' vertex structure
  34. float        translate[3]; //The translation used by the model's 'fake' vertex structure
  35. char        name[16]; //The name for the frame
  36. SMF_RAW_VERTEX vertices[1]; //An array of SMF_VERTEX structures
  37. };
  38. struct SMF_VERTEX
  39. {
  40. float x,y,z; //The (x,y,z) location of the vertex
  41. int   normalIndex;
  42. };
  43. struct  SMF_TEMPVERTEX  //用于存放glCommands要画的三角形trips或fans的数据
  44. {
  45. float  texcoord[2];
  46. float  vertex[3];     
  47. int    startNormalIndex;
  48. int    endNormalIndex;
  49. };
  50. struct SMF_ACTION
  51. {
  52. char   actionName[12];
  53. int    startFrame;
  54. int    endFrame;
  55. };
  56. class CSMFLoader  
  57. {
  58. public:
  59. CSMFLoader();
  60. virtual ~CSMFLoader();
  61. bool InitSMFLoader(char* ModelFileName,unsigned int texid,float scale);
  62. void RenderOneFrame(int numFrame);
  63. void Animate(int startFrame,int endFrame,float percent);
  64. void DrawSMFBoundary();
  65. VERTEX GetPos(int posIndex,float percent=0);
  66. BOUNDARY_3D m_boundary;
  67. //private:
  68. int    numGlCommands;
  69. int    numFrames;
  70. int    frameSize;
  71. int    numVertices;
  72. int    numAction;
  73. long            *glCommands;
  74. SMF_VERTEX      *pVertexData;
  75. SMF_TEMPVERTEX  *pTempFrame;
  76. SMF_VERTEX      *startPointer;
  77. SMF_VERTEX      *endPointer;
  78. SMF_ACTION      *pAction;
  79. unsigned int       textureID;
  80. float              scale;
  81. int                keyIndex[4];
  82. CSMFNormal         m_SMFNormal;
  83.      void PreProcess();
  84.      bool LoadModel(char* ModelFileName);
  85. };
  86. #endif // !defined(AFX_SMFLOADER_H__1F4AECE1_B383_11D6_90CE_5254AB37CDC9__INCLUDED_)