#include "Header.h" using namespace std; #pragma once class ModelLoader { public: ModelLoader(); ~ModelLoader(); }; class Vec3f { public: union { struct { float x, y, z; }; float v[3]; }; Vec3f(); Vec3f(Vec3f &other); Vec3f(float x, float y, float z); float& operator [](int); }; class Vec2f { public: union { struct { float x, y; }; float v[2]; }; Vec2f(); Vec2f(float x, float y); Vec2f(Vec2f &other); float& operator [](int); }; class ObjModel { private: class Vertex { public: int position; int normal; int texcoord; }; class Face { public: list vertices; }; class Texture { GLuint index; public: Texture(const std::string &fileName); void bind(); }; class MaterialInfo { public: MaterialInfo(); std::string name; Texture* texture; bool hasTexture; }; class ObjGroup { public: std::string name; int materialIndex; list faces; }; std::vector vertices; std::vector normals; std::vector texcoords; std::vector groups; std::vector materials; void loadMaterialFile(std::string fileName, std::string dirName); public: ObjModel(std::string filename); ~ObjModel(void); void draw(); };