#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; explicit 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); static glm::vec2 ParseOBJVec2(const std::string & line); static glm::vec3 ParseOBJVec3(const std::string & line); static OBJIndex ParseOBJIndex(const std::string & token, bool * hasUVs, bool * hasNormals); }; #endif // OBJ_LOADER_H_INCLUDED