From cf3e1771a342764ca26b2af843f173d1e994ed9f Mon Sep 17 00:00:00 2001 From: Mateja Date: Fri, 19 Feb 2021 15:10:53 +0100 Subject: Add load model check. Don't render if model and/or texture is not loaded. --- src/ObjModel.cpp | 100 +++++++++++++++++++++++++++++-------------------------- 1 file changed, 53 insertions(+), 47 deletions(-) (limited to 'src/ObjModel.cpp') diff --git a/src/ObjModel.cpp b/src/ObjModel.cpp index aa81cec..8933da8 100644 --- a/src/ObjModel.cpp +++ b/src/ObjModel.cpp @@ -10,53 +10,59 @@ ObjModel::ObjModel(std::string fileName) 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>(time2 - time1); -- cgit v1.2.3