Changeset 9869 in orxonox.OLD for trunk/src/lib/graphics/importer/md2/md2Model.h
- Timestamp:
- Oct 3, 2006, 12:19:30 AM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/lib/graphics/importer/md2/md2Model.h
r9235 r9869 20 20 21 21 #include "base_object.h" 22 #include "count_pointer.h" 22 23 23 24 #include "interactive_model.h" … … 45 46 struct MD2Header 46 47 { 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 48 int ident; //!< This is used to identify the file 49 int version; //!< The version number of the file (Must be 8) 50 51 int skinWidth; //!< The skin width in pixels 52 int skinHeight; //!< The skin height in pixels 53 int frameSize; //!< The size in bytes the frames are 54 55 int numSkins; //!< The number of skins associated with the model 56 int numVertices; //!< The number of vertices (constant for each frame) 57 int numTexCoords; //!< The number of texture coordinates 58 int numTriangles; //!< The number of faces (polygons) 59 int numGlCommands; //!< The number of gl commands 60 int numFrames; //!< The number of animation frames 61 62 int offsetSkins; //!< The offset in the file for the skin data 63 int offsetTexCoords; //!< The offset in the file for the texture data 64 int offsetTriangles; //!< The offset in the file for the face data 65 int offsetFrames; //!< The offset in the file for the frames data 66 int offsetGlCommands; //!< The offset in the file for the gl commands data 67 int offsetEnd; //!< The end of the file offset 67 68 }; 68 69 … … 70 71 //! animation names enumeration 71 72 typedef enum MD2animType 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 73 { 74 STAND, //0 75 RUN, //1 76 ATTACK, //2 77 PAIN_A, //3 78 PAIN_B, //4 79 PAIN_C, //5 80 JUMP, //6 81 FLIP, //7 82 SALUTE, //8 83 FALLBACK, //9 84 WAVE, //10 85 POINT, //11 86 CROUCH_STAND, 87 CROUCH_WALK, 88 CROUCH_ATTACK, 89 CROUCH_PAIN, 90 CROUCH_DEATH, 91 DEATH_FALLBACK, 92 DEATH_FALLFORWARD, 93 DEATH_FALLBACKSLOW, 94 BOOM, 95 WALK, 96 97 MAX_ANIMATIONS 98 }; 98 99 99 100 … … 116 117 class MD2Data : public BaseObject 117 118 { 118 public: 119 MD2Data(const std::string& modelFileName, const std::string& skinFileName, float scale = 1.0f); 119 public: 120 typedef CountPointer<MD2Data> Pointer; 121 public: 122 MD2Data(); 123 MD2Data(const std::string& modelFileName, const std::string& skinFileName, float scale = 1.0f); 120 124 virtual ~MD2Data(); 121 125 122 private: 123 bool loadModel(const std::string& fileName); 124 bool loadSkin(const std::string& fileName = ""); 125 126 public: 126 private: 127 void init(); 128 bool loadModel(const std::string& fileName); 129 bool loadSkin(const std::string& fileName = ""); 130 131 public: 127 132 int numFrames; //!< number of frames 128 133 int numVertices; //!< number of vertices … … 148 153 149 154 //! This is a MD2 Model class 150 class MD2Model : public InteractiveModel { 151 152 public: 155 class MD2Model : public InteractiveModel 156 { 157 ObjectListDeclaration(MD2Model); 158 public: 159 MD2Model(); 153 160 MD2Model(const std::string& modelFileName, const std::string& skinFileName = "", float scale = 1.0f); 161 MD2Model(const MD2Model& model); 154 162 virtual ~MD2Model(); 163 164 MD2Model& operator=(const MD2Model& md2model); 165 166 bool load(const std::string& modelFileName, const std::string& skinFileName = "", float scale = 1.0f); 155 167 156 168 virtual void draw() const; … … 160 172 virtual void setAnimation(int firstFrame, int lastFrame, int fps, int bStoppable, int animPlayback); 161 173 /** returns the current animation @returns animation type */ 162 inline int MD2Model::getAnimation(){ return this->animationState.type; }174 inline int getAnimation() const { return this->animationState.type; } 163 175 virtual void setAnimationSpeed(float speed) { this->animationSpeed = speed; } 164 virtual bool isAnimationFinished(){ return (this->animationState.currentFrame == this->animationState.endFrame )?true:false; }176 virtual bool isAnimationFinished() const { return (this->animationState.currentFrame == this->animationState.endFrame )?true:false; } 165 177 /** scales the current model @param scaleFactor: the factor [0..1] to use for scaling */ 166 178 void scaleModel(float scaleFactor) { this->scaleFactor = scaleFactor;} 167 179 180 181 void acquireData(const MD2Data::Pointer& data) { this->data = data; rebuildInfo(); }; 182 const MD2Data::Pointer& dataPointer() const { return this->data; }; 168 183 virtual void tick(float dtS); 169 184 void debug(); … … 171 186 172 187 private: 188 void init(); 189 void rebuildInfo(); 190 173 191 void animate(float time); 174 192 void processLighting(); … … 177 195 178 196 179 197 public: 180 198 /* these variables are static, because they are all the same for every model */ 181 static sVec3D anorms[NUM_VERTEX_NORMALS]; //!< the anormals182 static float anormsDots[SHADEDOT_QUANT][256]; //!< the anormals dot products183 static sAnim animationList[22]; //!< the anomation list184 185 float* shadeDots;186 187 MD2Data* data;//!< the md2 data pointer188 189 190 float scaleFactor; //!< the scale factor (individual)191 float animationSpeed; //!< the speed of the animation (factor for the time)192 sAnimState animationState; //!< animation state of the model193 sVec3D verticesList[MD2_MAX_VERTICES]; //!< place to temp sav the vert199 static sVec3D anorms[NUM_VERTEX_NORMALS]; //!< the anormals 200 static float anormsDots[SHADEDOT_QUANT][256]; //!< the anormals dot products 201 static sAnim animationList[22]; //!< the anomation list 202 //! again one of these strange id software parts 203 float* shadeDots; 204 205 CountPointer<MD2Data> data; //!< the md2 data pointer 206 207 private: 208 float scaleFactor; //!< the scale factor (individual) 209 float animationSpeed; //!< the speed of the animation (factor for the time) 210 sAnimState animationState; //!< animation state of the model 211 sVec3D verticesList[MD2_MAX_VERTICES]; //!< place to temp sav the vert 194 212 }; 195 213
Note: See TracChangeset
for help on using the changeset viewer.