00001 #pragma once
00002 #include "Maths.h"
00003 #include "Assimp/include/assimp.h"
00004 #include "Assimp/include/aiPostProcess.h"
00005 #include "Assimp/include/aiScene.h"
00006 #include "Assimp/include/SceneAnimator.h"
00007
00008
00028 class Model3D
00029 {
00030 public:
00033 Model3D(const char* strPath);
00034
00037 bool isModelLoaded();
00038
00050 void process(bool bUpdateBBox = false);
00051
00054 bool hasAnimations();
00055
00058 int numberOfAnimations();
00059
00062 char* animationName(unsigned int n);
00063
00069 bool setAnimation(unsigned int n, float fSecondsIni = 0.0f, float fSecondsEnd = 0.0f);
00070
00073 int getActualAnimation();
00074
00077 void disableAnimation();
00078
00081 void advance(float fSeconds);
00082
00085 void setAnimationTime(float fSeconds);
00086
00089 virtual ~Model3D(void);
00090
00091 protected:
00094 virtual void preProcess() {};
00095
00101 virtual void applyTransformation(float* fMatrix4Data) = 0;
00102
00105 virtual void unApplyLastTransformation() = 0;
00106
00117 virtual void processMesh(const struct aiMaterial *pMtl, const struct aiFace* pFaces, unsigned int nNumFaces, aiVector3D* aVertices, aiColor4D* aColorsByVertexIndex, aiVector3D* aNormalsByVertexIndex, aiVector3D* aTextureCoordsByVertexIndex) = 0;
00118
00121 virtual void postProcess() {};
00122
00123 private:
00124 void getBoundingBox(Vector3* pMin, Vector3* pMax);
00125 void getBoundingBoxForNode(const struct aiNode* pNd, Vector3* pMin, Vector3* pMax, struct aiMatrix4x4* pTrafo);
00126 void recursiveProcess(const struct aiNode* pNd, bool bUpdateBBox);
00127
00128
00129 public:
00132 Vector3 oSceneMin;
00133
00136 Vector3 oSceneMax;
00137
00140 Vector3 oSceneCenter;
00141
00144 Vector3 oUpdatedSceneMin;
00145
00148 Vector3 oUpdatedSceneMax;
00149
00152 Vector3 oUpdatedSceneCenter;
00153
00154 protected:
00155 const struct aiScene* _pScene;
00156 SceneAnimator* _pSceneAnimator;
00157 float _fSecondsCount, _fSecondsCountIni, _fSecondsCountEnd;
00158 int _nActualAnimation;
00159
00160
00161 aiVector3D* _aVertices;
00162 bool* _aVertexModified;
00163 unsigned int maxMeshVertices;
00164
00165
00166 bool _bFirstBBoxUpdate;
00167 };