#include "program.hpp"
#include "skybox.hpp"
-inline glm::mat4 aiMatrixToMat4(aiMatrix4x4 from) {
- glm::mat4 to;
- for (int i = 0; i < 4; i++)
- for (int j = 0; j < 4; j++)
- to[i][j] = from[j][i];
- 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 {
float weights[4] = {1, 0, 0, 0};
};
+ public:
+ Model(std::vector<std::string> blendshapes, std::string neutral, Program p);
+ Model(const aiScene *scene, Program p);
+ void draw(Skybox skybox, const float tick) const;
+
struct Mesh {
Mesh(const aiMesh *aiMesh, GLuint progId);
GLuint progId, vao, numIndices;
+ GLuint vbos[6];
unsigned int materialIndex;
BoneMap boneMap;
+ const aiMesh &ai;
+ void updatePosBuffer() const;
};
- public:
- Model(const aiScene *scene, Program p);
- void draw(Skybox skybox, const float tick) const;
-
class Node {
public:
Node(aiNode &aiNode, GLuint progId, AnimMap *animMap, std::set<std::string> allBones, Node *parent);
const bool isBone;
};
- Node* getRoot() { return root; }
+ Node& getRoot() const { return *root; }
Node* find(const aiString name) const;
Node* find(const std::string &name) const;
- private:
- const Program program;
+ struct VertexLookup {
+ glm::vec3 pos;
+ int meshIdx, vertIdx;
+ float distance;
+ };
+ VertexLookup closestVertex(Model::Node &node, glm::vec3 a, glm::vec3 b, glm::mat4 parentTrans = glm::mat4(1)) const;
std::vector<Mesh> meshes;
+
+ private:
+ const Program program;
Node *root;
std::vector<Material> materials;