diff options
Diffstat (limited to 'src/ObjModel.cpp')
| -rw-r--r-- | src/ObjModel.cpp | 104 | 
1 files changed, 57 insertions, 47 deletions
| diff --git a/src/ObjModel.cpp b/src/ObjModel.cpp index f23cfc3..8933da8 100644 --- a/src/ObjModel.cpp +++ b/src/ObjModel.cpp @@ -6,56 +6,66 @@ ObjModel::ObjModel() {}  ObjModel::ObjModel(std::string fileName)
  {
 +	std::chrono::high_resolution_clock::time_point time1 = std::chrono::high_resolution_clock::now();
 +
  	int hlp = 0;
  	std::ifstream f(fileName);
 -	std::string s0;
 -	while (getline(f, s0)) {
 -		std::stringstream ss0(s0);
 -		std::string s1 = "";
 -		ss0 >> s1;
 -		if (s1.compare(0, s1.length(), "v") == 0) {
 -			ss0 >> s1;
 -			float x = std::stof(s1);
 -			ss0 >> s1;
 -			float y = std::stof(s1);
 -			ss0 >> s1;
 -			float z = std::stof(s1);
 -			Vertice t(x, y, z, 1.0f, 0.0f, 0.0f);
 -			vertices.push_back(t);
 -		}
 -		else if (s1.compare(0, s1.length(), "vn") == 0) {
 -			ss0 >> s1;
 -			float x = std::stof(s1);
 -			ss0 >> s1;
 -			float y = std::stof(s1);
 -			ss0 >> s1;
 -			float z = std::stof(s1);
 -			Vector4f v(x, y, z, 0.0f);
 -			normals.push_back(v);
 -		}
 -		else if (s1.compare(0, s1.length(), "vt") == 0) {
 -			ss0 >> s1;
 -			float u = std::stof(s1);
 -			ss0 >> s1;
 -			float v = std::stof(s1);
 -			Texture_Coordinates kt;
 -			kt.u = u;	kt.v = v;
 -			uvcoo.push_back(kt);
 -		}
 -		else if (s1.compare(0, s1.length(), "f") == 0) {
 -			Triangle pt;
 -			for (int i = 0; i < 3; i++) {
 -				ss0 >> s1;
 -				std::stringstream ss1(s1);
 -				std::string s2;
 -				for (int j = 0; std::getline(ss1, s2, '/'); j++) {
 -					pt.p[i][j] = std::stoi(s2);
 -				}
 -			}
 -			faces.push_back(pt);
 -		}
 -	}
 +  if (f.is_open()) {
 +    std::string s0;
 +    while (getline(f, s0)) {
 +      std::stringstream ss0(s0);
 +      std::string s1 = "";
 +      ss0 >> s1;
 +      if (s1.compare(0, s1.length(), "v") == 0) {
 +        ss0 >> s1;
 +        float x = std::stof(s1);
 +        ss0 >> s1;
 +        float y = std::stof(s1);
 +        ss0 >> s1;
 +        float z = std::stof(s1);
 +        Vertice t(x, y, z, 1.0f, 0.0f, 0.0f);
 +        vertices.push_back(t);
 +      }
 +      else if (s1.compare(0, s1.length(), "vn") == 0) {
 +        ss0 >> s1;
 +        float x = std::stof(s1);
 +        ss0 >> s1;
 +        float y = std::stof(s1);
 +        ss0 >> s1;
 +        float z = std::stof(s1);
 +        Vector4f v(x, y, z, 0.0f);
 +        normals.push_back(v);
 +      }
 +      else if (s1.compare(0, s1.length(), "vt") == 0) {
 +        ss0 >> s1;
 +        float u = std::stof(s1);
 +        ss0 >> s1;
 +        float v = std::stof(s1);
 +        Texture_Coordinates kt;
 +        kt.u = u;	kt.v = v;
 +        uvcoo.push_back(kt);
 +      }
 +      else if (s1.compare(0, s1.length(), "f") == 0) {
 +        Triangle pt;
 +        for (int i = 0; i < 3; i++) {
 +          ss0 >> s1;
 +          std::stringstream ss1(s1);
 +          std::string s2;
 +          for (int j = 0; std::getline(ss1, s2, '/'); j++) {
 +            pt.p[i][j] = std::stoi(s2);
 +          }
 +        }
 +        faces.push_back(pt);
 +      }
 +    }
 +    isLoaded = true;
 +  }
 +  else {
 +    isLoaded = false;
 +  }
 +	std::chrono::high_resolution_clock::time_point time2 = std::chrono::high_resolution_clock::now();
 +	loadingTime = std::chrono::duration_cast<std::chrono::duration<double>>(time2 - time1);
  }
  ObjModel::ObjModel(const ObjModel& a) 
 | 
