00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011 #ifndef __MDLLOADER_H__
00012 #define __MDLLOADER_H__
00013
00014 #include "Model/ModelDll.h"
00015 #include "Common/Types.h"
00016 #include "Common/Table.h"
00017 #include "Common/Matrix.h"
00018 #include "Model/MdlAnim.h"
00019
00020 class KMdlMesh;
00021 class KMdlAnim;
00022 class KMdlPrimitive;
00023
00024
00025 class MODEL_API KMdlLoader
00026 {
00027 protected:
00028 KTable<KMdlMesh*> m_Meshes;
00029 KTable<KMdlAnim*> m_Anims;
00030 KTable<char*> m_Shaders;
00031 s32 m_StartFrame;
00032 s32 m_EndFrame;
00033
00034 static u32 m_MDLVersion;
00035 static u32 m_ANMVersion;
00036
00037 void GenerateHierarchy();
00038 void FlushHierarchy();
00039 void GenerateBones();
00040 void ComputeFirstMeshWorldMatrix( KMdlMesh* pMesh, KMatrix CurrentMatrix );
00041 void ComputeFirstWorldMatrix();
00042 void ComputeMeshWorldMatrix( KMdlMesh* pMesh, KMatrix CurrentMatrix );
00043
00044 public:
00045 KMdlLoader();
00046 virtual ~KMdlLoader();
00047
00048 bool LoadMDL( char* pFileName );
00049 bool LoadANM( char* pFileName );
00050 bool SaveMDL( char* pFileName );
00051 bool SaveANM( char* pFileName );
00052
00053 void ComputeWorldMatrix();
00054
00055 void Flush();
00056
00057 u32 AddMesh( KMdlMesh* pMesh );
00058 u32 AddAnim( KMdlAnim* pAnim );
00059 u32 RemoveAnim( KMdlAnim* pAnim );
00060 u32 AddShader( char* pShaderName );
00061
00062 KMdlMesh* GetpMeshByName( KStr MeshName );
00063
00064 KMdlMesh* GetpMesh( u32 MeshId ) { KASSERT( MeshId < GetnMeshes() ); return m_Meshes[MeshId]; }
00065 u32 GetnMeshes() { return m_Meshes.GetSize(); }
00066 KMdlAnim* GetpAnim( u32 AnimId ) { KASSERT( AnimId < GetnAnims() ); return m_Anims[AnimId]; }
00067 u32 GetnAnims() { return m_Anims.GetSize(); }
00068 u32 GetnTextures() { return m_Shaders.GetSize(); }
00069
00070 void SetStartFrame( s32 Frame ) { m_StartFrame = Frame; }
00071 void SetEndFrame( s32 Frame ) { m_EndFrame = Frame; }
00072 s32 GetStartFrame() { return m_StartFrame; }
00073 s32 GetEndFrame() { return m_EndFrame; }
00074
00075 KMdlAnim* AllocAnim() { return new KMdlAnim(); }
00076 };
00077
00078 #endif __MDLLOADER_H__