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 Model(std::vector<std::string> blendshapes, std::string neutral, Program p);
37 Model(const aiScene *scene, Program p);
38 void draw(Skybox skybox, const float tick) const;
41 Mesh(const aiMesh *aiMesh, GLuint progId);
42 GLuint progId, vao, numIndices;
44 unsigned int materialIndex;
47 void updatePosBuffer() const;
52 Node(aiNode &aiNode, GLuint progId, AnimMap *animMap, std::set<std::string> allBones, Node *parent);
54 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;
55 const std::vector<Node*> &getChildren() const { return children; }
56 Node* findNode(const aiNode &aiNode);
60 glm::mat4 transform = glm::mat4(1);
62 glm::mat4 totalTrans(const glm::mat4 parentTrans, const float tick) const;
65 const Node &getRoot() const;
67 bool operator==(const Node &rhs) const;
72 const AnimMap *animMap;
73 std::vector<Node*> children;
74 std::vector<unsigned int> meshIndices;
78 Node& getRoot() const { return *root; }
79 Node* find(const aiString name) const;
80 Node* find(const std::string &name) const;
87 VertexLookup closestVertex(Model::Node &node, glm::vec3 a, glm::vec3 b, glm::mat4 parentTrans = glm::mat4(1)) const;
89 std::vector<Mesh> meshes;
92 const Program program;
95 std::vector<Material> materials;
99 BoneTransforms calcBoneTransforms(const Node &n, const float tick, const std::set<std::string> bones, const glm::mat4 parentTrans) const;
100 void loadModel(const std::string &path);