#pragma once #include "GL/glew.h" #include #include #include "assimp\scene.h" #include "assimp\mesh.h" #include "../Shader.h" #include "../SceneContext.h" #include "../Dataset.h" #include "../ModelView.h" enum Transformation { Rotation, Translation, Scaling }; enum CullFace { NONE = GL_NONE, FRONT = GL_FRONT, BACK = GL_BACK, FRONT_BACK = GL_FRONT_AND_BACK }; enum RenderType { OBJ, NO_INDEX }; class Mesh { public: struct MeshEntry { enum BUFFERS { VERTEX_BUFFER, NORMAL_BUFFER, COLOR_BUFFER, TEXCOORD_BUFFER, INDEX_BUFFER }; GLuint vao; GLuint vbo[5]; unsigned int elementCount; RenderType renderType; unsigned int dset_size = 0; GLuint ssbo; glm::vec3 ssbo_data[3]; aiColor3D dcolor; aiColor3D acolor; aiColor3D scolor; float shininessStrength; MeshEntry(aiMesh *mesh, const aiScene* scene, Mesh * m); MeshEntry(Dataset &set, Mesh *m); ~MeshEntry(); Mesh * parent; void render(); }; public: Mesh(const char *filename, Shader *sh); Mesh(Dataset &dataset, Shader *sh); ~Mesh(void); std::vector meshEntries; private: std::vector> _transformations; void enableCulling(); void disableCulling(); public: Model model; CullFace cullMode = NONE; void effectTransformations(); void addRotation(glm::vec4 vec); void addTranslation(glm::vec4 vec); void addScaling(glm::vec4 vec); glm::vec4 translateToPivot(glm::vec3); void removeLastTransformations(int n); glm::vec3 getPosition(); Shader *shader; void draw(SceneContext ctx); };