#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(). |