6 #include <OpenGL/glew.h>
9 #include <assimp/scene.h>
10 #include <assimp/Importer.hpp>
11 #include "material.hpp"
12 #include "program.hpp"
19 std::vector<const aiNodeAnim*> nodeAnims;
22 typedef std::map<std::string, std::pair<unsigned int, glm::mat4>> BoneMap;
23 typedef std::map<std::string, std::vector<const Animation>> AnimMap;
24 typedef std::map<std::string, glm::mat4> BoneTransforms;
27 unsigned int ids[4] = {0, 0, 0 ,0};
28 float weights[4] = {1, 0, 0, 0};
32 Mesh(const aiMesh *aiMesh, GLuint progId);
33 GLuint progId, vao, numIndices;
34 unsigned int materialIndex;
39 Model(const std::string &path, Program p);
40 void draw(Skybox skybox, const float tick) const;
44 Node(const aiNode &aiNode, GLuint progId, AnimMap *animMap);
45 void draw(const std::vector<Mesh> &meshes, const std::vector<Material> &materials, const Skybox s, const float tick, glm::mat4 parentModel, BoneTransforms boneTransforms) const;
46 const std::vector<Node*> &getChildren() const { return children; }
47 Node* findNode(const aiNode &aiNode);
53 const AnimMap *animMap;
54 std::vector<Node*> children;
55 std::vector<unsigned int> meshIndices;
58 Node* getRoot() { return root; }
59 Node* find(const aiString name);
60 Node* find(const std::string &name);
63 const Program program;
65 std::vector<Mesh> meshes;
68 std::vector<Material> materials;
70 void loadModel(const std::string &path);
72 Assimp::Importer importer;