6 #include <OpenGL/glew.h>
9 #include <assimp/scene.h>
10 #include "material.hpp"
11 #include "program.hpp"
14 inline glm::mat4 aiMatrixToMat4(aiMatrix4x4 from) {
16 for (int i = 0; i < 4; i++)
17 for (int j = 0; j < 4; j++)
18 to[i][j] = from[j][i];
26 std::vector<const aiNodeAnim*> nodeAnims;
29 typedef std::map<std::string, std::pair<unsigned int, glm::mat4>> BoneMap;
30 typedef std::map<std::string, std::vector<const Animation>> AnimMap;
31 typedef std::map<std::string, glm::mat4> BoneTransforms;
34 unsigned int ids[4] = {0, 0, 0 ,0};
35 float weights[4] = {1, 0, 0, 0};
39 Mesh(const aiMesh *aiMesh, GLuint progId);
40 GLuint progId, vao, numIndices;
41 unsigned int materialIndex;
46 Model(const aiScene *scene, Program p);
47 void draw(Skybox skybox, const float tick) const;
51 Node(const aiNode &aiNode, GLuint progId, AnimMap *animMap);
52 void draw(const std::vector<Mesh> &meshes, const std::vector<Material> &materials, const Skybox s, const float tick, glm::mat4 parentModel, BoneTransforms boneTransforms) const;
53 const std::vector<Node*> &getChildren() const { return children; }
54 Node* findNode(const aiNode &aiNode);
60 const AnimMap *animMap;
61 std::vector<Node*> children;
62 std::vector<unsigned int> meshIndices;
65 Node* getRoot() { return root; }
66 Node* find(const aiString name);
67 Node* find(const std::string &name);
70 const Program program;
72 std::vector<Mesh> meshes;
75 std::vector<Material> materials;
77 void loadModel(const std::string &path);