• Página principal
  • Clases
  • Archivos
  • Lista de archivos

Model3D.h

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         //estructuras auxiliares para animar
00161         aiVector3D* _aVertices;
00162         bool* _aVertexModified;
00163         unsigned int maxMeshVertices;
00164 
00165         //bandera para indicar que es el primer vertice que se usa para actualizar el bounding box
00166         bool _bFirstBBoxUpdate;
00167 };

Generado el Miércoles, 15 de Septiembre de 2010 14:56:31 para CGALib por  doxygen 1.7.1