aboutsummaryrefslogtreecommitdiff
path: root/src/ObjModel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/ObjModel.cpp')
-rw-r--r--src/ObjModel.cpp104
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)