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

ExCMap.cpp

Aller à la documentation de ce fichier.
00001 /*
00002  * ExNihilo 3D Engine
00003  * 
00004  *  This program is free software; you can redistribute it and/or modify
00005  *  it under the terms of the GNU General Public License as published by
00006  *  the Free Software Foundation; either version 2 of the License, or
00007  *  (at your option) any later version.
00008  *
00009  *  This program is distributed in the hope that it will be useful,
00010  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  *  GNU Library General Public License for more details.
00013  *
00014  *  You should have received a copy of the GNU General Public License
00015  *  along with this program; if not, write to the Free Software
00016  *  Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00017  *
00018  * Please read AUTHORS file !!!
00019  * 
00020  * $Id: ExCMap.cpp,v 1.16 2002/08/01 18:45:58 data Exp $
00021  *
00022  */
00023 
00024 #include "ExCMap.h"
00025 
00026 ExCMap::ExCMap(void)
00027 {
00028         m_ShowSkybox=true;
00029         m_ShowMesh=true;
00030         m_OctreeState=false;
00031         m_ShowOctreeSubdivision=false;
00032 #ifdef UNIX_SRC
00033         // This is very awfull but it segfault without it
00034         m_VecMesh.reserve (1000);
00035         m_VecVertex.reserve (1000);
00036 #endif
00037 }
00038 
00039 ExCMap::~ExCMap(void)
00040 {
00041 }
00042 
00043 void ExCMap::BuildSkyBox(void)
00044 {
00045 Guard(void ExMap::BuildSkyBox(void))
00046                 
00047                 glDeleteLists(m_GlSkyBoxListId,1);      //delete old list
00048                 m_GlSkyBoxListId=glGenLists(1); //Ask for a new free list
00049                 glNewList(m_GlSkyBoxListId,GL_COMPILE);
00050 
00051                 glEnable(GL_TEXTURE_2D);
00052                 glDisable(GL_LIGHTING);
00053                 ManagerTexture->SetActiveTexture(m_STextureBoxNameFront);
00054                 glBegin(GL_QUADS);
00055                         // Front Face
00056                         glColor4f(1, 1, 1, 1);
00057                         glTexCoord2f(1.0f, 1.0f); glVertex3f(-500.0f,  500.0f,  500.0f);
00058                         glTexCoord2f(0.0f, 1.0f); glVertex3f( 500.0f,  500.0f,  500.0f);
00059                         glTexCoord2f(0.0f, 0.0f); glVertex3f( 500.0f, -500.0f,  500.0f);
00060                         glTexCoord2f(1.0f, 0.0f); glVertex3f(-500.0f, -500.0f,  500.0f);
00061                 glEnd();
00062                 ManagerTexture->SetActiveTexture(m_STextureBoxNameBack);
00063                 glBegin(GL_QUADS);
00064                         // Back Face
00065                         glTexCoord2f(1.0f, 0.0f); glVertex3f( 500.0f, -500.0f, -500.0f);
00066                         glTexCoord2f(1.0f, 1.0f); glVertex3f( 500.0f,  500.0f, -500.0f);
00067                         glTexCoord2f(0.0f, 1.0f); glVertex3f(-500.0f,  500.0f, -500.0f);
00068                         glTexCoord2f(0.0f, 0.0f); glVertex3f(-500.0f, -500.0f, -500.0f);
00069                 glEnd();
00070                 ManagerTexture->SetActiveTexture(m_STextureBoxNameTop);
00071                 glBegin(GL_QUADS);
00072                         // Top Face
00073                         glTexCoord2f(0.0f, 1.0f); glVertex3f( 500.0f,  500.0f, -500.0f);
00074                         glTexCoord2f(0.0f, 0.0f); glVertex3f( 500.0f,  500.0f,  500.0f);
00075                         glTexCoord2f(1.0f, 0.0f); glVertex3f(-500.0f,  500.0f,  500.0f);
00076                         glTexCoord2f(1.0f, 1.0f); glVertex3f(-500.0f,  500.0f, -500.0f);
00077                 glEnd();
00078                 ManagerTexture->SetActiveTexture(m_STextureBoxNameBottom);
00079                 glBegin(GL_QUADS);
00080                         // Bottom Face
00081             glTexCoord2f(1.0f, 1.0f); glVertex3f(-500.0f, -500.0f,  500.0f);
00082                         glTexCoord2f(0.0f, 1.0f); glVertex3f( 500.0f, -500.0f,  500.0f);
00083                         glTexCoord2f(0.0f, 0.0f); glVertex3f( 500.0f, -500.0f, -500.0f);
00084                         glTexCoord2f(1.0f, 0.0f); glVertex3f(-500.0f, -500.0f, -500.0f);
00085                 glEnd();
00086                 ManagerTexture->SetActiveTexture(m_STextureBoxNameRight);
00087                 glBegin(GL_QUADS);
00088                         // Right face
00089                         glTexCoord2f(1.0f, 0.0f); glVertex3f( 500.0f, -500.0f,  500.0f);
00090                         glTexCoord2f(1.0f, 1.0f); glVertex3f( 500.0f,  500.0f,  500.0f);
00091                         glTexCoord2f(0.0f, 1.0f); glVertex3f( 500.0f,  500.0f, -500.0f);
00092                         glTexCoord2f(0.0f, 0.0f); glVertex3f( 500.0f, -500.0f, -500.0f);
00093                 glEnd();
00094                 ManagerTexture->SetActiveTexture(m_STextureBoxNameLeft);
00095                 glBegin(GL_QUADS);
00096                 // Left Face
00097                         glTexCoord2f(1.0f, 1.0f); glVertex3f(-500.0f,  500.0f, -500.0f);
00098                         glTexCoord2f(0.0f, 1.0f); glVertex3f(-500.0f,  500.0f,  500.0f);
00099                         glTexCoord2f(0.0f, 0.0f); glVertex3f(-500.0f, -500.0f,  500.0f);
00100                         glTexCoord2f(1.0f, 0.0f); glVertex3f(-500.0f, -500.0f, -500.0f);
00101 
00102                 glEnd();
00103                 glDisable(GL_TEXTURE_2D);
00104                 glEnable(GL_LIGHTING);
00105 
00106                 glEndList();
00107 UnGuard
00108 }
00109 
00110 void ExCMap::DrawAllMesh(void)
00111 {
00112 Guard(void ExMap::DrawAllMesh(void))
00113         glCallList(m_GlListId);
00114 UnGuard
00115 }
00116 
00117 void ExCMap::DrawMeshInFrustrum(void)
00118 {
00119 Guard(void ExMap::DrawMeshInFrustrum(void))
00120         //DrawAllMesh();
00121         //m_Octree.Draw();
00122         Frustrum.CalculateFrustum();
00123         glColor3f(1.0f, 1.0f, 1.0f);
00124         glDisable(GL_LIGHTING);
00125         glEnable(GL_TEXTURE_2D);
00126         int i=0;
00127         int pointinfrustrum=0;
00128 
00129         for(m_ItVecMesh=m_VecMesh.begin();m_ItVecMesh!=m_VecMesh.end();++m_ItVecMesh)
00130         {
00131                 ManagerTexture->SetActiveTexture(m_ItVecMesh->GetMaterial());
00132                 if(Frustrum.PointInFrustum(m_ItVecMesh->A.GetX(),m_ItVecMesh->A.GetY(),m_ItVecMesh->A.GetZ()))
00133                 {
00134                         pointinfrustrum++;
00135                 }
00136                 if(Frustrum.PointInFrustum(m_ItVecMesh->B.GetX(),m_ItVecMesh->B.GetY(),m_ItVecMesh->B.GetZ()))
00137                 {
00138                         pointinfrustrum++;
00139                 }
00140                 if(Frustrum.PointInFrustum(m_ItVecMesh->C.GetX(),m_ItVecMesh->C.GetY(),m_ItVecMesh->C.GetZ()))
00141                 {
00142                         pointinfrustrum++;
00143                 }
00144                 
00145                 if(pointinfrustrum>1)
00146                 {
00147                         glBegin(GL_TRIANGLES);
00148                                 glTexCoord2f(m_ItVecMesh->A.GetU(), m_ItVecMesh->A.GetV());
00149                                 glVertex3f(m_ItVecMesh->A.GetX(),m_ItVecMesh->A.GetY(),m_ItVecMesh->A.GetZ());
00150                                 glTexCoord2f(m_ItVecMesh->B.GetU(), m_ItVecMesh->B.GetV());
00151                                 glVertex3f(m_ItVecMesh->B.GetX(),m_ItVecMesh->B.GetY(),m_ItVecMesh->B.GetZ());
00152                                 glTexCoord2f(m_ItVecMesh->C.GetU(), m_ItVecMesh->C.GetV());
00153                                 glVertex3f(m_ItVecMesh->C.GetX(),m_ItVecMesh->C.GetY(),m_ItVecMesh->C.GetZ());
00154                         glEnd();
00155                 }
00156                 i++;
00157                 pointinfrustrum=0;
00158         }       
00159         glEnable(GL_LIGHTING);
00160         glDisable(GL_TEXTURE_2D);
00161 UnGuard
00162 }
00163 
00164 void ExCMap::Draw(void)
00165 {
00166 Guard(void ExMap::Draw(void))
00167         if(m_ShowSkybox)glCallList(m_GlSkyBoxListId);
00168         glPushMatrix();
00169         glRotatef(-90,1.0f,0.0f,0.0f);
00170         if(m_ShowMesh)
00171         {                                                  
00172                 if(m_OctreeState)
00173                 {
00174                         DrawMeshInFrustrum();   
00175                 }else
00176                 {
00177                         DrawAllMesh();
00178                 }
00179         }
00180         glPopMatrix();
00181 
00182 UnGuard
00183 }
00184 
00185 void ExCMap::BuilList(void)
00186 {
00187 Guard(void ExMap::BuilList(void))
00188         m_GlListId=glGenLists(1);
00189         glNewList(m_GlListId,GL_COMPILE);
00190                 glColor3f(1.0f, 1.0f, 1.0f);
00191                 glDisable(GL_LIGHTING);
00192                 glEnable(GL_TEXTURE_2D);
00193                 int i=0;
00194                 
00195                 for(m_ItVecMesh=m_VecMesh.begin();m_ItVecMesh!=m_VecMesh.end();++m_ItVecMesh)
00196                 {
00197                         ManagerTexture->SetActiveTexture(m_ItVecMesh->GetMaterial());
00198                         glBegin(GL_TRIANGLES);
00199                         glTexCoord2f(m_ItVecMesh->A.GetU(), m_ItVecMesh->A.GetV());
00200                         glVertex3f(m_ItVecMesh->A.GetX(),m_ItVecMesh->A.GetY(),m_ItVecMesh->A.GetZ());
00201                         glTexCoord2f(m_ItVecMesh->B.GetU(), m_ItVecMesh->B.GetV());
00202                         glVertex3f(m_ItVecMesh->B.GetX(),m_ItVecMesh->B.GetY(),m_ItVecMesh->B.GetZ());
00203                         glTexCoord2f(m_ItVecMesh->C.GetU(), m_ItVecMesh->C.GetV());
00204                         glVertex3f(m_ItVecMesh->C.GetX(),m_ItVecMesh->C.GetY(),m_ItVecMesh->C.GetZ());
00205                         glEnd();
00206                         i++;
00207                 }
00208                 
00209                 glEnable(GL_LIGHTING);
00210                 glDisable(GL_TEXTURE_2D);
00211         glEndList();
00212 UnGuard
00213 }
00214 
00215 
00216 void ExCMap::BuildOctree(void)
00217 {
00218 Guard(void ExMap::BuildOctree(void))
00219         m_Octree.SetManagerTexture(ManagerTexture);
00220         m_Octree.Build(m_VecMesh);
00221 UnGuard
00222 }
00223 
00224 void ExCMap::BuildVertexArrays(void)
00225 {
00226 Guard(void ExMap::BuildVertexArrays(void))
00227         /*int i=0;
00228         float   *g_vertexArray;    // vertex array
00229         //float   *g_colorArray;     // color array
00230         float   *g_texcoordArray;  // texture array
00231 
00232         g_vertexArray= new float[m_VecMesh.size()*3][3];
00233         //g_colorArray=  new float[m_VecMesh.size()*3][3];
00234         g_texcoordArray= new float[m_VecMesh.size()*3][2];
00235 
00236         for(m_ItVecMesh=m_VecMesh.begin();m_ItVecMesh!=m_VecMesh.end();++m_ItVecMesh)
00237         {
00238                 //ManagerTexture->SetActiveTexture(m_ItVecMesh->GetMaterial());
00239                 
00240                 g_texcoordArray[i][0]=m_ItVecMesh->A.GetU(); 
00241                 g_texcoordArray[i][1]=m_ItVecMesh->A.GetV();
00242 
00243                 g_vertexArray[i][0]=m_ItVecMesh->A.GetX();
00244                 g_vertexArray[i][0]=m_ItVecMesh->A.GetY();
00245                 g_vertexArray[i][0]=m_ItVecMesh->A.GetZ();
00246                 
00247                 g_texcoordArray[i+1][0]=m_ItVecMesh->B.GetU();
00248                 g_texcoordArray[i+1][1]=m_ItVecMesh->B.GetV();
00249                 
00250                 g_vertexArray[i+1][0]=m_ItVecMesh->B.GetX();
00251                 g_vertexArray[i+1][0]=m_ItVecMesh->B.GetY();
00252                 g_vertexArray[i+1][0]=m_ItVecMesh->B.GetZ();
00253 
00254                 g_texcoordArray[i+2][0]=m_ItVecMesh->C.GetU();
00255                 g_texcoordArray[i+2][1]=m_ItVecMesh->C.GetV();
00256                 
00257                 g_vertexArray[i+2][0]=m_ItVecMesh->C.GetX();
00258                 g_vertexArray[i+2][0]=m_ItVecMesh->C.GetY();
00259                 g_vertexArray[i+2][0]=m_ItVecMesh->C.GetZ();
00260                 
00261                 i++;
00262         }
00263         // enable the vertex arrays being used
00264         glEnableClientState(GL_VERTEX_ARRAY);
00265         //glEnableClientState(GL_COLOR_ARRAY);
00266         glEnableClientState(GL_TEXTURE_COORD_ARRAY);
00267           // pass the pointers to OpenGL
00268         glVertexPointer(3, GL_FLOAT, 0, g_vertexArray);
00269         //glColorPointer(3, GL_FLOAT, 0, g_colorArray);
00270         glTexCoordPointer(2, GL_FLOAT, 0, g_texcoordArray);*/
00271 UnGuard
00272 }
00273 
00274 bool ExCMap::LoadMap(const char *FileName)
00275 {
00276 Guard(void ExCMap::LoadMap(const char *FileName))
00277         char                    ch;
00278         int                             RetVal; 
00279         std::string             StBuffer;
00280         char                    Buff[255];
00281         int                             FileSize;
00282         ExCVertex               VertexBuff;
00283         ExCMesh                 MeshBuff;
00284         int                             MeshNumber=0;
00285         
00286         FILE *MapFile;
00287         memset(Buff,0,255);
00288 #ifdef UNIX_SRC
00289         sprintf (Buff, PREFIX "/ExNihilo/Data/Modeles/%s", FileName);
00290 #else
00291         sprintf(Buff,"../Data/Modeles/%s",FileName);
00292 #endif
00293         MapFile=fopen(Buff,"r");
00294         
00295         if(!MapFile)
00296         {
00297                 *Consol<<"File not found:"<<Buff<<std::endl;
00298                 return false;
00299         }else
00300         {       
00301                 *Consol<<"Loading map File :"<<FileName<<std::endl;
00302 
00303                 fseek(MapFile,0,SEEK_END);
00304                 FileSize=ftell(MapFile);
00305                 //Start of file
00306                 fseek(MapFile,0,SEEK_SET);
00307                 do
00308                 {
00309                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00310                 }while(ch!='#');
00311                 //reading file type;
00312                 do
00313                 {
00314                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00315                         StBuffer=StBuffer+ch;   
00316                 }while(ch!='#');
00317                 if(strcmp(StBuffer.data(),"map#")==0)
00318                 {
00319                 //read top skybox texture
00320                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00321                         do
00322                         {
00323                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00324                                         StBuffer=StBuffer+ch;
00325                         }while(ch!='#');
00326                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00327                         StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00328                         m_STextureBoxNameTop=new char[strlen(StBuffer.data()-5)];
00329                         memset(m_STextureBoxNameTop,0,strlen(StBuffer.data()-5));
00330                         StBuffer.copy(m_STextureBoxNameTop,strlen(StBuffer.data())-4,0);
00331                 //read bottom skybox texture
00332                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00333                         do
00334                         {
00335                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00336                                         StBuffer=StBuffer+ch;
00337                         }while(ch!='#');
00338                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00339                         StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00340                         m_STextureBoxNameBottom=new char[strlen(StBuffer.data()-5)];
00341                         memset(m_STextureBoxNameBottom,0,strlen(StBuffer.data()-5));
00342                         StBuffer.copy(m_STextureBoxNameBottom,strlen(StBuffer.data())-4,0);
00343                 //read front skybox texture
00344                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00345                         do
00346                         {
00347                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00348                                         StBuffer=StBuffer+ch;
00349                         }while(ch!='#');
00350                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00351                         StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00352                         m_STextureBoxNameFront=new char[strlen(StBuffer.data()-5)];
00353                         memset(m_STextureBoxNameFront,0,strlen(StBuffer.data()-5));
00354                         StBuffer.copy(m_STextureBoxNameFront,strlen(StBuffer.data())-4,0);
00355                 //read back skybox texture
00356                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00357                         do
00358                         {
00359                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00360                                         StBuffer=StBuffer+ch;
00361                         }while(ch!='#');
00362                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00363                         StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00364                         m_STextureBoxNameBack=new char[strlen(StBuffer.data()-5)];
00365                         memset(m_STextureBoxNameBack,0,strlen(StBuffer.data()-5));
00366                         StBuffer.copy(m_STextureBoxNameBack,strlen(StBuffer.data())-4,0);
00367                 //read left skybox texture
00368                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00369                         do
00370                         {
00371                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00372                                         StBuffer=StBuffer+ch;
00373                         }while(ch!='#');
00374                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00375                         StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00376                         m_STextureBoxNameLeft=new char[strlen(StBuffer.data()-5)];
00377                         memset(m_STextureBoxNameLeft,0,strlen(StBuffer.data()-5));
00378                         StBuffer.copy(m_STextureBoxNameLeft,strlen(StBuffer.data())-4,0);
00379                 //read right skybox texture
00380                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00381                         do
00382                         {
00383                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00384                                         StBuffer=StBuffer+ch;
00385                         }while(ch!='#');
00386                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00387                         StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00388                         m_STextureBoxNameRight=new char[strlen(StBuffer.data()-5)];
00389                         memset(m_STextureBoxNameRight,0,strlen(StBuffer.data()-5));
00390                         StBuffer.copy(m_STextureBoxNameRight,strlen(StBuffer.data())-4,0);
00391                         
00392                 // read number of vertex
00393                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00394                         do
00395                         {
00396                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00397                                         StBuffer=StBuffer+ch;
00398                         }while(ch!='#');
00399                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00400                         StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00401                         try
00402                         {
00403                                 m_NumberVertex=atol(StBuffer.data());
00404                         }catch(...)
00405                         {
00406                                 m_NumberVertex=0;
00407                         }
00408                 // read vertex
00409 #ifdef UNIX_SRC
00410                         m_VecVertex.resize (m_NumberVertex + 2);
00411 #endif
00412                         std::cout << __LINE__ << std::endl;
00413                         for(int i=0;i<m_NumberVertex;i++)
00414                         {
00415                                 //read x
00416                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00417                                 do
00418                                 {
00419                                                 RetVal=fread(&ch,sizeof(char),1,MapFile);
00420                                                 StBuffer=StBuffer+ch;
00421                                 }while(ch!='#');
00422                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00423                                 StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00424                                 try
00425                                 {
00426                                         VertexBuff.SetX(atof(StBuffer.data()));
00427                                         //cout<<"X:"<<atof(StBuffer.data());
00428                                 }catch(...)
00429                                 {
00430                                         m_NumberMesh=0;
00431                                 }
00432                         //read y
00433                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00434                                 do
00435                                 {
00436                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00437                                         StBuffer=StBuffer+ch;
00438                                 }while(ch!='#');
00439                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00440                                 //StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00441                                 try
00442                                 {
00443                                         VertexBuff.SetY(atof(StBuffer.data()));
00444                                         //cout<<" Y:"<<atof(StBuffer.data());
00445                                 }catch(...)
00446                                 {
00447                                         VertexBuff.SetY(0);
00448                                 }
00449                         //read z
00450                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00451                                 do
00452                                 {
00453                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00454                                         StBuffer=StBuffer+ch;
00455                                 }while(ch!='#');
00456                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00457                                 //StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00458                                 try
00459                                 {
00460                                         VertexBuff.SetZ(atof(StBuffer.data()));
00461                                         //cout<<" Z:"<<atof(StBuffer.data())<<endl;
00462                                 }catch(...)
00463                                 {
00464                                         VertexBuff.SetZ(0);
00465                                 }
00466                         //read u
00467                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00468                                 do
00469                                 {
00470                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00471                                         StBuffer=StBuffer+ch;
00472                                 }while(ch!='#');
00473                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00474                                 StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00475                                 try
00476                                 {
00477                                         VertexBuff.SetU(atof(StBuffer.data()));
00478                                 }catch(...)
00479                                 {
00480                                         VertexBuff.SetU(0);
00481                                 }
00482                         //read v
00483                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00484                                 do
00485                                 {
00486                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00487                                         StBuffer=StBuffer+ch;
00488                                 }while(ch!='#');
00489                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00490                                 StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00491                                 try
00492                                 {
00493                                         VertexBuff.SetV(atof(StBuffer.data()));
00494                                 }catch(...)
00495                                 {
00496                                         VertexBuff.SetV(0);
00497                                 }
00498                                 m_VecVertex.push_back(VertexBuff);                              
00499                         }
00500                 // read number of mesh
00501                         StBuffer.erase(StBuffer.begin(),StBuffer.end());
00502                         do
00503                         {
00504                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00505                                         StBuffer=StBuffer+ch;
00506                         }while(ch!='#');
00507                         StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00508                         StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00509                         try
00510                         {
00511                                 m_NumberMesh=atol(StBuffer.data());
00512                         }catch(...)
00513                         {
00514                                 m_NumberMesh=0;
00515                         }
00516                 // read mesh
00517 #ifdef UNIX_SRC
00518                         m_VecMesh.resize (m_NumberMesh + 2);
00519 #endif
00520                         for(int j=0;j<m_NumberMesh;j++) {
00521                         //read vertex a number
00522                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00523                                 do {
00524                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00525                                         StBuffer=StBuffer+ch;
00526                                 } while(ch!='#');
00527                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00528                                 StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00529                                 try {
00530                                         MeshBuff.A=m_VecVertex.at(atoi(StBuffer.data()));
00531                                 } catch(...) {
00532                                         MeshBuff.A=(ExCVertex(0.0f,0.0f,0.0f));
00533                                 }
00534                         //read vertex b number
00535                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00536                                 do {
00537                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00538                                         StBuffer=StBuffer+ch;
00539                                 } while(ch!='#');
00540                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00541                                 
00542                                 try {
00543                                         MeshBuff.B=m_VecVertex.at(atoi(StBuffer.data()));
00544                                 } catch(...) {
00545                                         MeshBuff.B=(ExCVertex(0.0f,0.0f,0.0f));
00546                                 }
00547                         //read vertex c number
00548                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00549                                 do {
00550                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00551                                         StBuffer=StBuffer+ch;
00552                                 } while(ch!='#');
00553                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00554                                 try {
00555                                         MeshBuff.C=m_VecVertex.at(atoi(StBuffer.data()));
00556                                 } catch(...) {
00557                                         MeshBuff.C=(ExCVertex(0.0f,0.0f,0.0f));
00558                                 }
00559                         //read AB
00560                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00561                                 do {
00562                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00563                                         StBuffer=StBuffer+ch;
00564                                 } while(ch!='#');
00565                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00566                                 try {
00567                                         MeshBuff.m_AB=atoi(StBuffer.data());
00568                                 } catch(...) {
00569                                         MeshBuff.m_AB=0;
00570                                 }
00571                         //read BC
00572                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00573                                 do {
00574                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00575                                         StBuffer=StBuffer+ch;
00576                                 } while(ch!='#');
00577                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00578                                 try {
00579                                         MeshBuff.m_BC=atoi(StBuffer.data());
00580                                 } catch(...) {
00581                                         MeshBuff.m_BC=0;
00582                                 }
00583                         //read CA
00584                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00585                                 do {
00586                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00587                                         StBuffer=StBuffer+ch;
00588                                 } while(ch!='#');
00589                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00590                                 try {
00591                                         MeshBuff.m_CA=atoi(StBuffer.data());
00592                                 } catch(...) {
00593                                         MeshBuff.m_CA=0;
00594                                 }
00595                         //read material
00596                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00597                                 do {
00598                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00599                                         StBuffer=StBuffer+ch;
00600                                 } while(ch!='#');
00601                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00602                                 MeshBuff.SetMaterial(StBuffer.data());
00603                                 ManagerTexture->AddTexture(StBuffer.data());
00604                         //read smothing
00605                                 StBuffer.erase(StBuffer.begin(),StBuffer.end());
00606                                 do {
00607                                         RetVal=fread(&ch,sizeof(char),1,MapFile);
00608                                         StBuffer=StBuffer+ch;
00609                                 } while(ch!='#');
00610                                 StBuffer.erase(StBuffer.end()-1,StBuffer.end());
00611                                 StBuffer.erase(StBuffer.begin(),StBuffer.begin()+1);
00612                                 try {
00613                                         MeshBuff.m_Smoothing=atoi(StBuffer.data());
00614                                 } catch(...) {
00615                                         MeshBuff.m_Smoothing=0;
00616                                 }
00617                                 MeshBuff.m_MeshNumber=MeshNumber;
00618                                 MeshNumber++;
00619                                 m_VecMesh.push_back(MeshBuff);
00620                         }
00621                         
00622                 }else
00623                 {
00624                         *Consol<<FileName<<"is not a valide map file"<<std::endl;
00625                         return false;
00626                 }
00627                 
00628                 fclose(MapFile);
00629                 ManagerTexture->AddTexture(m_STextureBoxNameTop);
00630                 ManagerTexture->SetActiveTexture(m_STextureBoxNameTop);
00631                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
00632                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
00633                 ManagerTexture->AddTexture(m_STextureBoxNameBottom);
00634                 ManagerTexture->SetActiveTexture(m_STextureBoxNameBottom);
00635                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
00636                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
00637                 ManagerTexture->AddTexture(m_STextureBoxNameFront);
00638                 ManagerTexture->SetActiveTexture(m_STextureBoxNameFront);
00639                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
00640                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
00641                 ManagerTexture->AddTexture(m_STextureBoxNameBack);
00642                 ManagerTexture->SetActiveTexture(m_STextureBoxNameBack);
00643                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
00644                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
00645                 ManagerTexture->AddTexture(m_STextureBoxNameLeft);
00646                 ManagerTexture->SetActiveTexture(m_STextureBoxNameLeft);
00647                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
00648                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
00649                 ManagerTexture->AddTexture(m_STextureBoxNameRight);
00650                 ManagerTexture->SetActiveTexture(m_STextureBoxNameRight);
00651                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP);
00652                 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP);
00653                 BuildOctree();
00654                 BuilList();
00655                 BuildVertexArrays();
00656                 BuildSkyBox();
00657                 *Consol<<FileName<<" map file loaded with "<<m_NumberVertex<<" vertex and "<<m_NumberMesh<<" faces"<<std::endl;
00658         }
00659         return true;
00660 UnGuard
00661 }

Généré le Tue Aug 6 20:25:25 2002 pour ExNihilo par doxygen1.2.17