Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

Changeset 8375 in orxonox.OLD


Ignore:
Timestamp:
Jun 14, 2006, 11:59:40 AM (18 years ago)
Author:
patrick
Message:

bsp: md3 mesh reading progress

Location:
branches/bsp_model/src/lib/graphics/importer/md3
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • branches/bsp_model/src/lib/graphics/importer/md3/md3_data.cc

    r8374 r8375  
    224224int MD3Data::readMeshes(FILE* pFile, int fileOffset)
    225225{
     226  int    localFileOffset = fileOffset;                          //!< local file offset
     227
    226228  this->meshes = new MD3Mesh*[this->header->meshNum];
    227229
     
    230232    this->meshes[i] = new MD3Mesh();
    231233
    232     bool bTriangles, bTexVecs, bVertices, bTextures;            //!< the parts that have been read so far
     234    bool   bTriangles, bTexVecs, bVertices, bTextures;            //!< the parts that have been read so far
    233235
    234236    //start reading mesh data
    235 
     237    MD3MeshHeader* md = new MD3MeshHeader;
     238    fread(md, 1, sizeof(MD3MeshHeader), pFile);
     239    this->meshes[i]->header = md;
     240    localFileOffset += sizeof(MD3MeshHeader);
     241
     242    if( unlikely(this->meshes[i]->header->id != MD3_IDENT))
     243    {
     244      PRINTF(1)("Wrong MD3 mesh file tag, file %s could be corrupt\n", this->filename.c_str());
     245      return false;
     246    }
     247
     248    // check which parts to be loaded
     249    bTriangles = ( this->meshes[i]->header->triangleNum == 0);
     250    bTexVecs = ( this->meshes[i]->header->vertexNum == 0);
     251    bVertices = ( this->meshes[i]->header->meshFrameNum == 0);
     252    bTextures = ( this->meshes[i]->header->textureNum == 0);
     253
     254    // now read the data block whise
     255    while( !(bTriangles && bTexVecs && bVertices && bTextures))
     256    {
     257      if( localFileOffset == this->meshes[i]->header->triangleStart  && !bTriangles)
     258      {
     259        localFileOffset += this->readMeshTriangles(pFile, localFileOffset);
     260        bTriangles = true;
     261      }
     262      else if( localFileOffset == this->meshes[i]->header->textureStart && !bTextures)
     263      {
     264        fileOffset += this->readMeshTextures(pFile, localFileOffset);
     265        bTextures = true;
     266      }
     267      else if( localFileOffset == this->meshes[i]->header->texVecStart && !bTexVecs)
     268      {
     269        localFileOffset += this->readMeshTexVecs(pFile, localFileOffset);
     270        bTexVecs = true;
     271      }
     272      else if( fileOffset == this->meshes[i]->header->vertexStart && !bVertices)
     273      {
     274        localFileOffset += this->readMeshVertices(pFile, localFileOffset);
     275        bVertices = true;
     276      }
     277    }
    236278  }
    237   return 0;
    238 }
    239 
    240 }
    241 
     279  return localFileOffset - fileOffset;
     280}
     281
     282}
     283
  • branches/bsp_model/src/lib/graphics/importer/md3/md3_data.h

    r8372 r8375  
    8989
    9090
     91   int readMeshTriangles(FILE* pFile, int fileOffset);
     92   int readMeshTextures(FILE* pFile, int fileOffset);
     93   int readMeshTexVecs(FILE* pFile, int fileOffset);
     94   int readMeshVertices(FILE* pFile, int fileOffset);
     95
    9196 public:
    9297
Note: See TracChangeset for help on using the changeset viewer.