/* * Created by Brett Terpstra 6920201 on 17/10/22. * Copyright (c) 2022 Brett Terpstra. All Rights Reserved. */ #ifndef STEP_2_MODELS_H #define STEP_2_MODELS_H #include #include namespace Raytracing { struct Triangle { vec4 vertex1, vertex2, vertex3; bool hasNormals = false; vec4 normal1, normal2, normal3; vec4 uv1, uv2, uv3; Triangle(const vec4& v1, const vec4& v2, const vec4& v3): vertex1(v1), vertex2(v2), vertex3(v3) {} Triangle(const vec4& v1, const vec4& v2, const vec4& v3, const vec4& n1, const vec4& n2, const vec4& n3): vertex1(v1), vertex2(v2), vertex3(v3), hasNormals(true), normal1(n1), normal2(n2), normal3(n3) {} }; struct ModelData { // storing all this data is memory inefficient // since normals and vertices are only vec3s // and uvs are vec2s // TODO: create lower order vector classes std::vector vertices; std::vector uvs; std::vector normals; std::vector indices; std::vector toTriangles() { } }; class ModelLoader { private: public: virtual ModelData loadModel(std::string file) = 0; }; class OBJLoader : public ModelLoader { private: public: virtual ModelData loadModel(std::string file); }; } #endif //STEP_2_MODELS_H