background image

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