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< ExCModelEXMm_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 :
Généré le Tue Oct 28 12:43:53 2003 pour ExNihilo par doxygen 1.3.4