X-Git-Url: http://git.lukelau.me/?p=opengl.git;a=blobdiff_plain;f=model.hpp;fp=model.hpp;h=e74d65717973400120fd38eb4f2e4a71ba4418b3;hp=bf6f08f346133920d792870d6a0f42249fe5e0cd;hb=d26c67a51e58c3f70d1689e265e9bebe578b50ad;hpb=5e2b8438a1600a790dc105d25b7d5cd2278864aa diff --git a/model.hpp b/model.hpp index bf6f08f..e74d657 100644 --- a/model.hpp +++ b/model.hpp @@ -1,3 +1,6 @@ +#ifndef MODEL_HPP +#define MODEL_HPP + #include #include #include @@ -20,6 +23,14 @@ inline glm::mat4 aiMatrixToMat4(aiMatrix4x4 from) { return to; } +inline aiMatrix4x4 mat4ToaiMatrix(glm::mat4 from) { + aiMatrix4x4 to; + for (int i = 0; i < 4; i++) + for (int j = 0; j < 4; j++) + to[i][j] = from[j][i]; + return to; +} + class Model { struct Animation { @@ -49,23 +60,29 @@ class Model { class Node { public: - Node(const aiNode &aiNode, GLuint progId, AnimMap *animMap); + Node(aiNode &aiNode, GLuint progId, AnimMap *animMap, std::set allBones, Node *parent); + void draw(const std::vector &meshes, const std::vector &materials, const Skybox s, const float tick, const BoneTransforms &boneTransforms, glm::mat4 parentModel) const; const std::vector &getChildren() const { return children; } Node* findNode(const aiNode &aiNode); - const aiNode &ai; + aiNode &ai; // an extra transform glm::mat4 transform = glm::mat4(1); glm::mat4 totalTrans(const glm::mat4 parentTrans, const float tick) const; + const Node *parent; + + bool operator==(const Node &rhs) const; + private: const GLuint progId; const AnimMap *animMap; std::vector children; std::vector meshIndices; + const bool isBone; }; Node* getRoot() { return root; } @@ -85,3 +102,5 @@ class Model { BoneTransforms calcBoneTransforms(const Node &n, const float tick, const std::set bones, const glm::mat4 parentTrans) const; void loadModel(const std::string &path); }; + +#endif