From 400410fcd436d5e4310bfa779f0309c5fae5b2c2 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sat, 16 Jan 2021 18:09:15 +0000 Subject: Initial commit Stripped back and formatted from https://github.com/BennyQBD/ModernOpenGLTutorial/ --- obj_loader.h | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 obj_loader.h (limited to 'obj_loader.h') diff --git a/obj_loader.h b/obj_loader.h new file mode 100644 index 0000000..5a1eabf --- /dev/null +++ b/obj_loader.h @@ -0,0 +1,53 @@ +#ifndef OBJ_LOADER_H_INCLUDED +#define OBJ_LOADER_H_INCLUDED + +#include +#include +#include + +struct OBJIndex { + unsigned int vertexIndex; + unsigned int uvIndex; + unsigned int normalIndex; + + bool + operator<(const OBJIndex & r) const + { + return vertexIndex < r.vertexIndex; + } +}; + +class IndexedModel { +public: + std::vector positions; + std::vector texCoords; + std::vector normals; + std::vector indices; + + void CalcNormals(); +}; + +class OBJModel { +public: + std::vector OBJIndices; + std::vector vertices; + std::vector uvs; + std::vector normals; + bool hasUVs; + bool hasNormals; + + OBJModel(const std::string & fileName); + + IndexedModel ToIndexedModel(); + +private: + unsigned int FindLastVertexIndex( + const std::vector & indexLookup, const OBJIndex * currentIndex, const IndexedModel & result); + void CreateOBJFace(const std::string & line); + + glm::vec2 ParseOBJVec2(const std::string & line); + glm::vec3 ParseOBJVec3(const std::string & line); + OBJIndex ParseOBJIndex(const std::string & token, bool * hasUVs, bool * hasNormals); +}; + +#endif // OBJ_LOADER_H_INCLUDED -- cgit v1.2.3