Object hierarchies
[opengl.git] / model.hpp
index 0339538429cc94ae87292ff3f53e56cd460777a6..98c630e83306e36c72053760629eba52d52970e4 100644 (file)
--- a/model.hpp
+++ b/model.hpp
@@ -6,27 +6,44 @@
 #endif
 #include <glm/glm.hpp>
 #include <assimp/scene.h>
+#include <assimp/Importer.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 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<Mesh> &meshes, 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<glm::vec3> vertices;
-                       std::vector<glm::vec3> normals;
-                       std::vector<glm::vec2> texCoords;
-                       std::vector<GLuint> indices;
+                               std::vector<Node*> children;
+                               std::vector<unsigned int> meshIndices;
                };
                
+               Node* getRoot() { return root; }
+               Node* find(const std::string &name);
+       
+       private:
+               const GLuint progId;
+               
                std::vector<Mesh> meshes;
+               Node *root;
                void loadModel(const std::string &path);
+
+               Assimp::Importer importer;
 };