Page principale | Liste des namespaces | Hiérarchie des classes | Liste par ordre alphabétique | Liste des composants | Liste des fichiers | Membres des namespaces | Composants | Déclarations

# Référence de la classe ExCModelLoader

`#include <ExCModeLoader.h>`

## Membres publics
| ExCModelLoader (void)
| ExCModelLoader (std::string FileName)
| ~ExCModelLoader (void)
int | LoadModel (std::string FileName)
## Attributs Publics
std::vector< ExCModelEXM > | m_VecExcModel
## Membres privés
void | LoadMD2 (std::string strFileName)
void | LoadMD3 (std::string strFileName)
void | LoadASC (std::string strFileName)
void | Load3DS (std::string strFileName)
void | LoadOBJ (std::string strFileName)
void | LoadASE (std::string strFileName)
void | LoadEXM (std::string strFileName)

## Documentation des contructeurs et destructeurs

ExCModelLoader::ExCModelLoader | ( | void |  | ) |

| Définition à la ligne 4 du fichier ExCModelLoader.cpp.
    00005 {
    00006
    00007 }

ExCModelLoader::ExCModelLoader | ( | std::string | FileName | ) |

| Définition à la ligne 9 du fichier ExCModelLoader.cpp. Références LoadModel().
    00010 {
    00011         LoadModel(FileName);
    00012 }

ExCModelLoader::~ExCModelLoader | ( | void |  | ) |

| Définition à la ligne 14 du fichier ExCModelLoader.cpp.
    00015 {
    00016
    00017 }

## Documentation des méthodes

void ExCModelLoader::Load3DS | ( | std::string | strFileName | ) | `[private]`

| Définition à la ligne 45 du fichier ExCModelLoader.cpp. Références Guard, Load3DS(), et UnGuard. Référencé par Load3DS(), et LoadModel().
    00046 {
    00047 Guard(void ExCModelLoader::Load3DS(std::string strFileName))
    00048 UnGuard
    00049 }

void ExCModelLoader::LoadASC | ( | std::string | strFileName | ) | `[private]`

| Définition à la ligne 39 du fichier ExCModelLoader.cpp. Références Guard, LoadASC(), et UnGuard. Référencé par LoadASC(), et LoadModel().
    00040 {
    00041 Guard(void ExCModelLoader::LoadASC(std::string strFileName))
    00042 UnGuard
    00043 }

void ExCModelLoader::LoadASE | ( | std::string | strFileName | ) | `[private]`

| Définition à la ligne 57 du fichier ExCModelLoader.cpp. Références Guard, LoadASE(), et UnGuard. Référencé par LoadASE(), et LoadModel().
    00058 {
    00059 Guard(void ExCModelLoader::LoadASE(std::string strFileName))
    00060 UnGuard
    00061 }

void ExCModelLoader::LoadEXM | ( | std::string | strFileName | ) | `[private]`

| Définition à la ligne 63 du fichier ExCModelLoader.cpp. Références Guard, LoadEXM(), m_VecExcModel, et UnGuard. Référencé par LoadEXM(), et LoadModel().
    00064 {
    00065 Guard(void ExCModelLoader::LoadEXM(std::string strFileName))
    00066         std::cout<<"Loading EXM Model"<<std::endl;
    00067         ExCModelEXM TmpModel;
    00068         m_VecExcModel.push_back(TmpModel);
    00069 UnGuard
    00070 }

void ExCModelLoader::LoadMD2 | ( | std::string | strFileName | ) | `[private]`

| Définition à la ligne 72 du fichier ExCModelLoader.cpp. Références ExNihilo::ExtracValueFromSring(), MD2_frame_t::fp, MD2_modelHeader_t::framesize, Guard, MD2_modelHeader_t::ident, LoadMD2(), ExCModelEXM::m_numTriangles, m_VecExcModel, ExCModelEXM::m_VecTextures, ExCModelEXM::m_VecTriangle, ExCModelEXM::m_VecVertex, MD2_mesh_t::meshIndex, MD2_modelHeader_t::numFrames, MD2_modelHeader_t::numGLcmds, MD2_modelHeader_t::numSkins, MD2_modelHeader_t::numST, MD2_modelHeader_t::numTris, MD2_modelHeader_t::numXYZ, MD2_modelHeader_t::offsetEnd, MD2_modelHeader_t::offsetFrames, MD2_modelHeader_t::offsetGLcmds, MD2_modelHeader_t::offsetSkins, MD2_modelHeader_t::offsetST, MD2_modelHeader_t::offsetTris, MD2_frame_t::scale, ExCVec3D::SetValue(), ExCVec3D::SetX(), ExCVec3D::SetY(), ExCVec3D::SetZ(), MD2_modelHeader_t::skinheight, MD2_modelHeader_t::skinwidth, MD2_stIndex_t::t, ExCModelEXM::TabTextures, MD2_frame_t::translate, UnGuard, MD2_framePoint_t::v, et MD2_modelHeader_t::version. Référencé par LoadMD2(), et LoadModel().
    00073 {
    00074 Guard(void ExCModelLoader::LoadMD2(std::string strFileName))
    00075         std::cout<<"Loading MD2 Model"<<std::endl;
    00076         ExCModelEXM TmpModel;
    00077
    00078         //std::vector< std::pair<ExCVec3D , ExCVec3D > >        TmpModel.m_VecTriangle;
    00079         //std::vector<ExCVec3D>         TmpModel.m_VecVertex;
    00080
    00081         int i,j;
    00082         FILE *filePtr;                          // file pointer
    00083     int fileLen;                            // length of model file
    00084     char *buffer;                           // file buffer
    00085
    00086     MD2_modelHeader_t *modelHeader;             // model header
    00087         MD2_frame_t *frame;                              // frame data
    00088         MD2_stIndex_t *stPtr;                       // texture data
    00089         MD2_mesh_t *bufIndexPtr;          // index variables
    00090
    00091
    00092         std::string Skin;
    00093         Skin=ExNihilo::ExtracValueFromSring(strFileName,"../Data/Modeles/",".md2")+".pcx";
    00094         TmpModel.m_VecTextures.push_back(Skin);
    00095         TmpModel.m_VecTextures.push_back("fire.bmp");
    00096
    00097     filePtr = fopen(strFileName.data(), "rb");
    00098     if (filePtr == NULL)
    00099         {
    00100                 throw ExCExpFileNotFound();
    00101         }
    00102
    00103          // find length of file
    00104      fseek(filePtr, 0, SEEK_END);
    00105      fileLen = ftell(filePtr);
    00106      fseek(filePtr, 0, SEEK_SET);
    00107
    00108      // read entire file into buffer
    00109      buffer = new char [fileLen+1];
    00110      fread(buffer, sizeof(char), fileLen, filePtr);
    00111
    00112          modelHeader = (MD2_modelHeader_t*)buffer;
    00113
    00114 /*       std::ofstream logscale;
    00115          std::ofstream logfp;
    00116          std::ofstream logtranslate;
    00117          std::ofstream logfile;
    00118          std::ofstream logHeader;
    00119          std::ofstream logTextureCoord;
    00120
    00121          logscale.open("logscale.txt",std::ios::out);
    00122          logfp.open("logfp.txt",std::ios::out);
    00123          logtranslate.open("logtranslate.txt",std::ios::out);
    00124          logfile.open("logfile.txt",std::ios::out);
    00125          logHeader.open("logHeader.txt",std::ios::out);
    00126          logTextureCoord.open("logTextureCoord.txt",std::ios::out);
    00127 */
    00128         std::cout<<"This is used to identify the file: "<<modelHeader->ident<<std::endl;
    00129         std::cout<<"The version number of the file (Musbe 8):"<<modelHeader->version<<std::endl;
    00130         std::cout<<"The skin width in pixels:"<<modelHeader->skinwidth<<std::endl;
    00131         std::cout<<"The skin heighin pixels:"<<modelHeader->skinheight<<std::endl;
    00132         std::cout<<"The size in bytes the frames are:"<<modelHeader->framesize<<std::endl;
    00133         std::cout<<"The number of skins associated with the model:"<<modelHeader->numSkins<<std::endl;
    00134         std::cout<<"The number of vertices (constan for each frame):"<<modelHeader->numXYZ<<std::endl;
    00135         std::cout<<"The number of texture coordinates:"<<modelHeader->numST<<std::endl;
    00136         std::cout<<"The number of faces (polygons):"<<modelHeader->numTris<<std::endl;
    00137         std::cout<<"The number of gl commands:"<<modelHeader->numGLcmds<<std::endl;
    00138         std::cout<<"The number of animation frames:"<<modelHeader->numFrames<<std::endl;
    00139         std::cout<<"The offset in the file for the skin data:"<<modelHeader->offsetSkins<<std::endl;
    00140         std::cout<<"The offset in the file for the texture data:"<<modelHeader->offsetST<<std::endl;
    00141         std::cout<<"The offset in the file for the face data:"<<modelHeader->offsetTris<<std::endl;
    00142         std::cout<<"The offset in the file for the frames data:"<<modelHeader->offsetFrames<<std::endl;
    00143         std::cout<<"The offset in the file for the gl commands data:"<<modelHeader->offsetGLcmds<<std::endl;
    00144         std::cout<<"The end of the file offset:"<<modelHeader->offsetEnd<<std::endl;
    00145
    00146         //-----------------------------------------------
    00147         //read all skin
    00148         //-----------------------------------------------
    00149         std::cout<<"read all skin"<<std::endl;
    00150         char mybuff[65];
    00151         std::string BuffSkin;
    00152     fseek(filePtr,modelHeader->offsetSkins, SEEK_SET);
    00153         for(i = 0;i<modelHeader->numSkins;++i)
    00154         {
    00155                 fread(&mybuff,sizeof(char),64, filePtr);
    00156                 BuffSkin=mybuff;
    00157                 //std::cout<<BuffSkin<<std::endl;
    00158                 //m_VecSkin.push_back(BuffSkin);
    00159         }
    00160         //-----------------------------------------------
    00161         //read vertex  data
    00162         //-----------------------------------------------
    00163         std::cout<<"read vertex  data "<<std::endl;
    00164          ExCVec3D Vec3D;
    00165          for (j = 0; j < modelHeader->numFrames; j++)
    00166      {
    00167           frame = (MD2_frame_t*)&buffer[modelHeader->offsetFrames+ modelHeader->framesize * j];
    00168           for (i = 0; i < modelHeader->numXYZ; i++)
    00169           {
    00170                                 Vec3D.SetX(frame->scale[0] * frame->fp[i].v[0] + frame->translate[0]);
    00171                                 Vec3D.SetY(frame->scale[1] * frame->fp[i].v[1] + frame->translate[1]);
    00172                                 Vec3D.SetZ(frame->scale[2] * frame->fp[i].v[2] + frame->translate[2]);
    00173                                 Vec3D=Vec3D/3;
    00174                                 TmpModel.m_VecVertex.push_back(Vec3D);
    00175
    00176         /*                      logscale<<"X:"<<frame->scale[0]<<" Y:"<<frame->scale[1]<<" Z:"<<frame->scale[2]<<std::endl;
    00177                                 logfp<<"X:"<<frame->fp[i].v[0]<<" Y:"<<frame->fp[i].v[1]<<" Z:"<<frame->fp[i].v[2]<<std::endl;
    00178                                 logtranslate<<"X:"<<frame->translate[0]<<" Y:"<<frame->translate[1]<<" Z:"<<frame->translate[2]<<std::endl;
    00179                                 logfile<<"vec :"<<i<<" "<<Vec3D<<std::endl;*/
    00180           }
    00181                   //logfile<<"------------------------------------------------------------------"<<std::endl;
    00182      }
    00183         //-----------------------------------------------
    00184         //read triangles data
    00185         //-----------------------------------------------
    00186          std::cout<<"read triangles data "<<std::endl;
    00187         fseek(filePtr,modelHeader->offsetTris, SEEK_SET);
    00188         short AB,BC,CA,TAB,TBC,TCA;
    00189         ExCVec3D VertexNum,TexturNum;
    00190         /*std::ofstream logTri;
    00191         logTri.open("logTri.txt",std::ios::out);
    00192         */
    00193
    00194      // point to triangle indexes in buffer
    00195     bufIndexPtr = (MD2_mesh_t*)&buffer[modelHeader->offsetTris];
    00196         // create a mesh (triangle) list
    00197      for (j = 0; j < modelHeader->numFrames; j++)
    00198      {
    00199           // for all triangles in each frame
    00200           for(i = 0; i < modelHeader->numTris; i++)
    00201           {
    00202                AB = bufIndexPtr[i].meshIndex[0];
    00203                BC = bufIndexPtr[i].meshIndex[1];
    00204                CA = bufIndexPtr[i].meshIndex[2];
    00205                TAB = bufIndexPtr[i].stIndex[0];
    00206                TBC = bufIndexPtr[i].stIndex[1];
    00207                TCA = bufIndexPtr[i].stIndex[2];
    00208
    00209                         VertexNum.SetValue(AB,BC,CA);
    00210                         TexturNum.SetValue(TAB,TBC,TCA);
    00211                         std::pair<ExCVec3D,ExCVec3D> tmp(VertexNum,TexturNum);
    00212                         TmpModel.m_VecTriangle.push_back(tmp);
    00213                 //      logTri<<"AB:"<<AB<<" BC:"<<BC<<" CA:"<<CA<<std::endl;
    00214                 //      logTri<<"TAB:"<<TAB<<" TBC:"<<TBC<<" TCA:"<<TCA<<std::endl;
    00215           }
    00216      }
    00217         //-----------------------------------------------
    00218         //read texture coord  data
    00219         //-----------------------------------------------
    00220         std::cout<<"read texture coord  data "<<std::endl;
    00221         std::vector<ExCVec2D>           *VecTexture;
    00222         VecTexture= new std::vector<ExCVec2D>;
    00223         stPtr = (MD2_stIndex_t*)&buffer[modelHeader->offsetST];
    00224         for (i = 0; i < modelHeader->numST; i++)
    00225         {
    00226                 VecTexture->push_back(ExCVec2D(((float)stPtr[i].s / (float)modelHeader->skinwidth),((float)stPtr[i].t / (float)modelHeader->skinheight)));
    00227         }
    00228         //------------------------------
    00229         //Build Texture Array
    00230         //------------------------------
    00231         std::cout<<"Build Texture Array"<<std::endl;
    00232         TmpModel.TabTextures= new float[modelHeader->numTris*6];
    00233         for(i = 0; i < modelHeader->numTris; i++)
    00234         {
    00235                 TmpModel.TabTextures[0+i*6]=VecTexture->at(TmpModel.m_VecTriangle.at(i).second.GetY()).GetX();
    00236                 TmpModel.TabTextures[1+i*6]=VecTexture->at(TmpModel.m_VecTriangle.at(i).second.GetY()).GetY();
    00237                 TmpModel.TabTextures[2+i*6]=VecTexture->at(TmpModel.m_VecTriangle.at(i).second.GetX()).GetX();
    00238                 TmpModel.TabTextures[3+i*6]=VecTexture->at(TmpModel.m_VecTriangle.at(i).second.GetX()).GetY();
    00239                 TmpModel.TabTextures[4+i*6]=VecTexture->at(TmpModel.m_VecTriangle.at(i).second.GetZ()).GetX();
    00240                 TmpModel.TabTextures[5+i*6]=VecTexture->at(TmpModel.m_VecTriangle.at(i).second.GetZ()).GetY();
    00241         }
    00242         TmpModel.m_numTriangles=modelHeader->numTris;
    00243 /*      //------------------------------
    00244         //Build Vertex Array
    00245         //------------------------------
    00246         std::cout<<"Build Vertex Array size:"<<modelHeader->numFrames*modelHeader->numXYZ*3<<std::endl;
    00247         ExCVec3D VecAB,VecBC,VecCA;
    00248         TmpModel.TabVertices= new float[modelHeader->numFrames*modelHeader->numTris*9];
    00249
    00250
    00251         //int k=modelHeader->numXYZ*108;
    00252         int FrameToDraw;
    00253         std::cout<<"Number Frame:"<<modelHeader->numFrames<<std::endl;
    00254         for(int k = 0; k < modelHeader->numFrames; k++)
    00255         {
    00256                 FrameToDraw=modelHeader->numXYZ*k;
    00257                 //std::cout<<"Fisrt indices of frame To Draw:"<<FrameToDraw<<std::endl;
    00258                 //std::cout<<"Frame*k:"<<k*modelHeader->numFrames<<std::endl;
    00259                 //std::cout<<"First:"<<(0+i*9)+modelHeader->numTris*9*k<<std::endl;
    00260                 for(i = 0; i < modelHeader->numTris; i++)
    00261                 {
    00262                         //----------------
    00263                         //Vertex coord
    00264                         //----------------
    00265                         VecAB.SetX(TmpModel.m_VecVertex.at(TmpModel.m_VecTriangle.at(i).first.GetX()+FrameToDraw).GetX());
    00266                         VecAB.SetY(TmpModel.m_VecVertex.at(TmpModel.m_VecTriangle.at(i).first.GetX()+FrameToDraw).GetY());
    00267                         VecAB.SetZ(TmpModel.m_VecVertex.at(TmpModel.m_VecTriangle.at(i).first.GetX()+FrameToDraw).GetZ());
    00268
    00269                         VecBC.SetX(TmpModel.m_VecVertex.at(TmpModel.m_VecTriangle.at(i).first.GetY()+FrameToDraw).GetX());
    00270                         VecBC.SetY(TmpModel.m_VecVertex.at(TmpModel.m_VecTriangle.at(i).first.GetY()+FrameToDraw).GetY());
    00271                         VecBC.SetZ(TmpModel.m_VecVertex.at(TmpModel.m_VecTriangle.at(i).first.GetY()+FrameToDraw).GetZ());
    00272
    00273                         VecCA.SetX(TmpModel.m_VecVertex.at(TmpModel.m_VecTriangle.at(i).first.GetZ()+FrameToDraw).GetX());
    00274                         VecCA.SetY(TmpModel.m_VecVertex.at(TmpModel.m_VecTriangle.at(i).first.GetZ()+FrameToDraw).GetY());
    00275                         VecCA.SetZ(TmpModel.m_VecVertex.at(TmpModel.m_VecTriangle.at(i).first.GetZ()+FrameToDraw).GetZ());
    00276                         //--------------
    00277                         //Build array with new vertex data
    00278                         //--------------
    00279                                 //std::cout<<"First:"<<(0+i*9)+k*modelHeader->numFrames<<std::endl;
    00280                                 TmpModel.TabVertices[(0+i*9)+modelHeader->numTris*9*k]=VecBC.GetX();
    00281                                 TmpModel.TabVertices[(1+i*9)+modelHeader->numTris*9*k]=VecBC.GetY();
    00282                                 TmpModel.TabVertices[(2+i*9)+modelHeader->numTris*9*k]=VecBC.GetZ();
    00283                                 TmpModel.TabVertices[(3+i*9)+modelHeader->numTris*9*k]=VecAB.GetX();
    00284                                 TmpModel.TabVertices[(4+i*9)+modelHeader->numTris*9*k]=VecAB.GetY();
    00285                                 TmpModel.TabVertices[(5+i*9)+modelHeader->numTris*9*k]=VecAB.GetZ();
    00286                                 TmpModel.TabVertices[(6+i*9)+modelHeader->numTris*9*k]=VecCA.GetX();
    00287                                 TmpModel.TabVertices[(7+i*9)+modelHeader->numTris*9*k]=VecCA.GetY();
    00288                                 TmpModel.TabVertices[(8+i*9)+modelHeader->numTris*9*k]=VecCA.GetZ();
    00289                                 //std::cout<<"Last:"<<(8+i*9)+k*modelHeader->numFrames<<std::endl;
    00290
    00291                                 TmpModel.TabVertices[0+i*9]=VecBC.GetX();
    00292                                 TmpModel.TabVertices[1+i*9]=VecBC.GetY();
    00293                                 TmpModel.TabVertices[2+i*9]=VecBC.GetZ();
    00294                                 TmpModel.TabVertices[3+i*9]=VecAB.GetX();
    00295                                 TmpModel.TabVertices[4+i*9]=VecAB.GetY();
    00296                                 TmpModel.TabVertices[5+i*9]=VecAB.GetZ();
    00297                                 TmpModel.TabVertices[6+i*9]=VecCA.GetX();
    00298                                 TmpModel.TabVertices[7+i*9]=VecCA.GetY();
    00299                                 TmpModel.TabVertices[8+i*9]=VecCA.GetZ();
    00300                 }
    00301                 //std::cout<<"Last:"<<(8+i*9)+modelHeader->numTris*9*k<<std::endl;
    00302         }
    00303 */
    00304         delete VecTexture;
    00305         delete buffer;
    00306
    00307         m_VecExcModel.push_back(TmpModel);
    00308 UnGuard
    00309 }

void ExCModelLoader::LoadMD3 | ( | std::string | strFileName | ) | `[private]`

| Définition à la ligne 33 du fichier ExCModelLoader.cpp. Références Guard, LoadMD3(), et UnGuard. Référencé par LoadMD3(), et LoadModel().
    00034 {
    00035 Guard(void ExCModelLoader::LoadMD3(std::string strFileName))
    00036 UnGuard
    00037 }

int ExCModelLoader::LoadModel | ( | std::string | FileName | ) |

| Définition à la ligne 19 du fichier ExCModelLoader.cpp. Références Guard, Load3DS(), LoadASC(), LoadASE(), LoadEXM(), LoadMD2(), LoadMD3(), LoadModel(), LoadOBJ(), m_VecExcModel, et UnGuard. Référencé par ExCModelLoader(), et LoadModel().
    00020 {
    00021 Guard(int ExCModelLoader::LoadModel(std::string FileName))
    00022         if(FileName.find(".exm")==(FileName.length()-4))LoadEXM(FileName);;
    00023         if(FileName.find(".md2")==(FileName.length()-4))LoadMD2(FileName);
    00024         if(FileName.find(".md3")==(FileName.length()-4))LoadMD3(FileName);
    00025         if(FileName.find(".asc")==(FileName.length()-4))LoadASC(FileName);
    00026         if(FileName.find(".3ds")==(FileName.length()-4))Load3DS(FileName);
    00027         if(FileName.find(".obj")==(FileName.length()-4))LoadOBJ(FileName);
    00028         if(FileName.find(".ase")==(FileName.length()-4))LoadASE(FileName);
    00029         return m_VecExcModel.size();
    00030 UnGuard
    00031 }

void ExCModelLoader::LoadOBJ | ( | std::string | strFileName | ) | `[private]`

| Définition à la ligne 51 du fichier ExCModelLoader.cpp. Références Guard, LoadOBJ(), et UnGuard. Référencé par LoadModel(), et LoadOBJ().
    00052 {
    00053 Guard(void ExCModelLoader::LoadOBJ(std::string strFileName))
    00054 UnGuard
    00055 }

## Documentation des données imbriquées

std::vector<ExCModelEXM> ExCModelLoader::m_VecExcModel

| Définition à la ligne 86 du fichier ExCModeLoader.h. Référencé par LoadEXM(), LoadMD2(), et LoadModel().

La documentation associée à cette classe a été générée à partir des fichiers suivants :

- ExCModeLoader.h
- ExCModelLoader.cpp