#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) |
|
|
Définition à la ligne 4 du fichier ExCModelLoader.cpp.
00005 {
00006
00007 }
|
|
|
Définition à la ligne 9 du fichier ExCModelLoader.cpp. Références LoadModel().
00010 {
00011 LoadModel(FileName);
00012 }
|
|
|
Définition à la ligne 14 du fichier ExCModelLoader.cpp.
00015 {
00016
00017 }
|
|
|
Définition à la ligne 45 du fichier ExCModelLoader.cpp. Références Guard, Load3DS(), et UnGuard. Référencé par Load3DS(), et LoadModel().
|
|
|
Définition à la ligne 39 du fichier ExCModelLoader.cpp. Références Guard, LoadASC(), et UnGuard. Référencé par LoadASC(), et LoadModel().
|
|
|
Définition à la ligne 57 du fichier ExCModelLoader.cpp. Références Guard, LoadASE(), et UnGuard. Référencé par LoadASE(), et LoadModel().
|
|
|
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 }
|
|
|
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 }
|
|
|
Définition à la ligne 33 du fichier ExCModelLoader.cpp. Références Guard, LoadMD3(), et UnGuard. Référencé par LoadMD3(), et LoadModel().
|
|
|
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 }
|
|
|
Définition à la ligne 51 du fichier ExCModelLoader.cpp. Références Guard, LoadOBJ(), et UnGuard. Référencé par LoadModel(), et LoadOBJ().
|
|
|
Définition à la ligne 86 du fichier ExCModeLoader.h. Référencé par LoadEXM(), LoadMD2(), et LoadModel(). |
1.3.4