コード例 #1
0
ファイル: ObjParser.cpp プロジェクト: Artegam/Engine
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;
}
コード例 #2
0
ファイル: objModel.cpp プロジェクト: ozkriff/marauder-cpp11
// 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);
}