X-Git-Url: https://git.lukelau.me/?p=opengl.git;a=blobdiff_plain;f=model.hpp;h=98c630e83306e36c72053760629eba52d52970e4;hp=0339538429cc94ae87292ff3f53e56cd460777a6;hb=ba5e08bf25de722d907748ce55b27a45b2b270bf;hpb=b64cd5a5ec09e6f051583371045ef7080c69b776 diff --git a/model.hpp b/model.hpp index 0339538..98c630e 100644 --- a/model.hpp +++ b/model.hpp @@ -6,27 +6,44 @@ #endif #include #include +#include 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 vao; + GLuint numIndices; + }; - GLuint vao, vertexVbo, normalVbo, indicesVbo; + public: + Model(const std::string &path, GLuint progId); + void draw() const; + + class Node { + public: + Node(const aiNode &aiNode, GLuint progId); + void draw(const std::vector &meshes, glm::mat4 parentModel) const; + const std::vector &getChildren() const { return children; } + Node* findNode(const aiNode &aiNode); + glm::mat4 model = glm::mat4(1); + const aiNode &ai; + private: + const GLuint progId; - std::vector vertices; - std::vector normals; - std::vector texCoords; - std::vector indices; + std::vector children; + std::vector meshIndices; }; + Node* getRoot() { return root; } + Node* find(const std::string &name); + + private: + const GLuint progId; + std::vector meshes; + Node *root; void loadModel(const std::string &path); + + Assimp::Importer importer; };