vector<Objet3D> ObjParser::readFile (const char * filename, vector<Objet3D> pObjets) { FILE* fichier; char ligne[255]; objets = pObjets; cptFaces = 0; cptObjects = 0; vObj = new Objet3D(); //Un objet par fichier vObj->setNom(filename); fichier = fopen(filename, "r"); while(!feof(fichier)) { ligne[0] = '\0'; fscanf(fichier, "%s", ligne); if(strcmp((const char*)ligne, (char*)"v") == 0) readVertex(fichier); if(strcmp((const char*)ligne, (char*)"vn") == 0) readVertexNormal(fichier); if(strcmp((const char*)ligne, (char*)"o") == 0) readObject(fichier); if(strcmp((const char*)ligne, (char*)"f") == 0) readFace(fichier); if(strcmp((const char*)ligne, (char*)"mtllib") == 0) { readMaterialLibrary(fichier); char mtlfilename[50]; sprintf(mtlfilename, ".\\ressources\\%s", nomMtlLib); readMtlFile(mtlfilename); } if(strcmp((const char*)ligne, (char*)"usemtl") == 0) readMaterialUsed(fichier); } //ASCH 02/08/15 - Insère le dernier objet lu en mémoire. insertObject(); cptFaces = 0; fclose(fichier); return objets; }
// TODO "usemtl filename" void ObjModel::read(const std::string& filename) { auto* file = std::fopen(filename.c_str(), "r"); if (!file) { throw std::runtime_error(std::string("can't find file: ") + filename); } char buffer[100]; while (std::fgets(buffer, 100, file)) { if (buffer[0] == 'v' && buffer[1] == ' ') { mVertices.push_back(readVertexCoord(buffer)); } else if (buffer[0] == 'v' && buffer[1] == 'n') { mVertices.push_back(readVertexNormal(buffer)); } else if (buffer[0] == 'v' && buffer[1] == 't') { mTextureCoords.push_back(readTextureCoords(buffer)); } else if (buffer[0] == 'f' && buffer[1] == ' ') { mFaces.push_back(readFace(buffer)); } } std::fclose(file); }