class Mesh {
public:
Mesh();
~Mesh();
void quad_mesh( glm::vec3 const & bottom_left, glm::vec3 const & top_right );
Vertex
*
add_vertex(glm::vec3 const & position);
Face
*
add_face(std::vector<Vertex
*
> const & vertices);
std::vector<Vertex
*
> const & get_vertices();
std::vector<Face
*
> const & get_faces();
std::vector<HalfEdge
*
> const & get_half_edges();
void clear();
private:
std::vector<Vertex
*
> vertices_;
std::vector<HalfEdge
*
> half_edges_;
std::vector<Face
*
> faces_;
};
Έχοντας ορίσει την παραπάνω κλάση, καθίσταται δυνατή η δημιουργία αντικειμένων που
ενσωματώνουν μια τέτοια δομή. Σε αυτό το σημείο, κρίνεται σκόπιμο να διευκρινιστεί ότι, προ-
κειμένου να διευκολυνθεί η μετάβαση από τη δομή Half-Edge Mesh στα δεδομένα που απαιτεί
ο μηχανισμός απόδοσης (όπως vertex buffers και index buffers), υλοποιήθηκε μία επιπλέον εν-
διάμεση κλάση με την ονομασία Mesh.
class Mesh {
public :
Mesh( he::Mesh const & he_mesh );
Mesh const & operator=( Mesh const & );
~Mesh();
void draw() const;
std::vector< glm::vec3 > get_vertices() const;
std::vector< glm::vec3 > get_colors() const;
std::vector< glm::vec2 > get_tex_coords() const;
void set_tex_coords(const std::vector<glm::vec2>& tex_coords);
private:
std::unique_ptr< Mesh_impl > m_impl;
};
31