| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- #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<Vertex> 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<Face> faces;
- };
- std::vector<Vec3f> vertices;
- std::vector<Vec3f> normals;
- std::vector<Vec2f> texcoords;
- std::vector<ObjGroup*> groups;
- std::vector<MaterialInfo*> materials;
- void loadMaterialFile(std::string fileName, std::string dirName);
- public:
- ObjModel(std::string filename);
- ~ObjModel(void);
- void draw();
- };
|