10 #include <OpenGL/glew.h>
12 #include <glm/glm.hpp>
13 #include <assimp/scene.h>
14 #include "material.hpp"
15 #include "program.hpp"
23 std::vector<const aiNodeAnim*> nodeAnims;
26 typedef std::map<std::string, std::pair<unsigned int, aiBone*>> BoneMap;
27 typedef std::map<std::string, std::vector<const Animation>> AnimMap;
28 typedef std::map<std::string, glm::mat4> BoneTransforms;
31 unsigned int ids[4] = {0, 0, 0 ,0};
32 float weights[4] = {1, 0, 0, 0};
36 Mesh(const aiMesh *aiMesh, GLuint progId);
37 GLuint progId, vao, numIndices;
38 unsigned int materialIndex;
44 Model(const aiScene *scene, Program p);
45 void draw(Skybox skybox, const float tick) const;
49 Node(aiNode &aiNode, GLuint progId, AnimMap *animMap, std::set<std::string> allBones, Node *parent);
51 void draw(const std::vector<Mesh> &meshes, const std::vector<Material> &materials, const Skybox s, const float tick, const BoneTransforms &boneTransforms, glm::mat4 parentModel) const;
52 const std::vector<Node*> &getChildren() const { return children; }
53 Node* findNode(const aiNode &aiNode);
57 glm::mat4 transform = glm::mat4(1);
59 glm::mat4 totalTrans(const glm::mat4 parentTrans, const float tick) const;
62 const Node &getRoot() const;
64 bool operator==(const Node &rhs) const;
69 const AnimMap *animMap;
70 std::vector<Node*> children;
71 std::vector<unsigned int> meshIndices;
75 Node& getRoot() const { return *root; }
76 Node* find(const aiString name) const;
77 Node* find(const std::string &name) const;
79 std::pair<glm::vec3, float> closestVertex(Model::Node &node, glm::vec3 a, glm::vec3 b, glm::mat4 parentTrans = glm::mat4(1)) const;
82 const Program program;
84 std::vector<Mesh> meshes;
87 std::vector<Material> materials;
91 BoneTransforms calcBoneTransforms(const Node &n, const float tick, const std::set<std::string> bones, const glm::mat4 parentTrans) const;
92 void loadModel(const std::string &path);