#endif
#include <glm/glm.hpp>
#include <assimp/scene.h>
+#include <assimp/Importer.hpp>
+#include "material.hpp"
+#include "program.hpp"
+#include "skybox.hpp"
class Model {
- public:
- Model(const std::string &path, GLuint progId): progId(progId) {
- loadModel(path);
- }
- void draw();
- private:
- const GLuint progId;
struct Mesh {
Mesh(const aiMesh *aiMesh, GLuint progId);
+ GLuint progId, vao, numIndices;
+ unsigned int materialIndex;
+ };
- GLuint vao, vertexVbo, normalVbo, indicesVbo;
+ public:
+ Model(const std::string &path, Program p);
+ void draw(Skybox skybox) const;
- std::vector<glm::vec3> vertices;
- std::vector<glm::vec3> normals;
- std::vector<glm::vec2> texCoords;
- std::vector<GLuint> indices;
+ class Node {
+ public:
+ Node(const aiNode &aiNode, GLuint progId);
+ void draw(const std::vector<Mesh> &meshes, const std::vector<Material> &materials, const Skybox s, glm::mat4 parentModel) const;
+ const std::vector<Node*> &getChildren() const { return children; }
+ Node* findNode(const aiNode &aiNode);
+ glm::mat4 model = glm::mat4(1);
+ const aiNode &ai;
+ private:
+ const GLuint progId;
+
+ std::vector<Node*> children;
+ std::vector<unsigned int> meshIndices;
};
+ Node* getRoot() { return root; }
+ Node* find(const std::string &name);
+
+ private:
+ const Program program;
+
std::vector<Mesh> meshes;
+ Node *root;
+
+ std::vector<Material> materials;
+
void loadModel(const std::string &path);
+
+ Assimp::Importer importer;
};