+#ifndef MODEL_HPP
+#define MODEL_HPP
+
#include <vector>
#include <map>
#include <set>
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 {
class Node {
public:
- Node(const aiNode &aiNode, GLuint progId, AnimMap *animMap);
+ Node(aiNode &aiNode, GLuint progId, AnimMap *animMap, std::set<std::string> allBones, Node *parent);
+
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;
const std::vector<Node*> &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<Node*> children;
std::vector<unsigned int> meshIndices;
+ const bool isBone;
};
Node* getRoot() { return root; }
BoneTransforms calcBoneTransforms(const Node &n, const float tick, const std::set<std::string> bones, const glm::mat4 parentTrans) const;
void loadModel(const std::string &path);
};
+
+#endif