/*! * \file include/Mesh.h * \brief OpenGL Mesh * * \author xythobuz */ #ifndef _MESH_H_ #define _MESH_H_ #include #include #include #include #include struct IndexedRectangle { unsigned int v1, v2, v3, v4; // Vertex list indices unsigned int texture; // Index into object-texture list IndexedRectangle(unsigned int t, unsigned int _v1, unsigned int _v2, unsigned int _v3, unsigned int _v4 = 0) : v1(_v1), v2(_v2), v3(_v3), v4(_v4), texture(t) { } }; struct IndexedColoredRectangle { unsigned int v1, v2, v3, v4; unsigned char r, g, b; IndexedColoredRectangle(unsigned char _r, unsigned char _g, unsigned char _b, unsigned int _v1, unsigned int _v2, unsigned int _v3, unsigned int _v4 = 0) : v1(_v1), v2(_v2), v3(_v3), v4(_v4), r(_r), g(_g), b(_b) { } }; // -------------------------------------- class Mesh { public: Mesh(const std::vector& vertices, const std::vector& rectangles, const std::vector& triangles, const std::vector& coloredRectangles, const std::vector& coloredTriangles); void prepare(); void display(glm::mat4 MVP); private: std::vector indices; std::vector vertices; std::vector uvs; std::vector textures; std::vector indicesColor; std::vector verticesColor; std::vector colors; }; // -------------------------------------- struct PackedVertex { glm::vec3 pos; glm::vec2 uv; unsigned int tex; PackedVertex(glm::vec3 p, glm::vec2 u, unsigned int t) : pos(p), uv(u), tex(t) { } bool operator<(const PackedVertex& v) const { return memcmp(this, &v, sizeof(PackedVertex)) > 0; } }; struct PackedColoredVertex { glm::vec3 pos; glm::vec3 col; PackedColoredVertex(glm::vec3 p, glm::vec3 c) : pos(p), col(c) { } bool operator<(const PackedColoredVertex& v) const { return memcmp(this, &v, sizeof(PackedColoredVertex)) > 0; } }; template bool findSimilarVertex(T& v, std::map m, unsigned short& s) { auto it = m.find(v); if (it == m.end()) return false; else { s = it->second; return true; } } #endif