6 #include <unordered_map>
13 #include "materials.h"
116 Mesh( ) : m_positions(), m_texcoords(), m_normals(), m_colors(), m_indices(),
118 m_color(
White()), m_primitives(GL_POINTS), m_vao(0), m_buffer(0), m_index_buffer(0), m_vertex_buffer_size(0), m_index_buffer_size(0), m_update_buffers(
false) {}
121 Mesh(
const GLenum
primitives ) : m_positions(), m_texcoords(), m_normals(), m_colors(), m_indices(),
122 m_color(
White()), m_primitives(
primitives), m_vao(0), m_buffer(0), m_index_buffer(0), m_vertex_buffer_size(0), m_index_buffer_size(0), m_update_buffers(false) {}
128 Mesh(
const GLenum
primitives,
const std::vector<vec3>& positions );
130 Mesh(
const GLenum
primitives,
const std::vector<vec3>& positions,
const std::vector<unsigned>& indices );
132 Mesh(
const GLenum
primitives,
const std::vector<vec3>& positions,
133 const std::vector<vec2>& texcoords,
134 const std::vector<vec3>& normals,
135 const std::vector<vec4>& colors,
136 const std::vector<unsigned>& indices );
149 Mesh&
color(
const float r,
const float g,
const float b,
const float a= 1) {
return color(
vec4(r, g, b, a)); }
168 unsigned int vertex(
const float x,
const float y,
const float z ) {
return vertex(
vec3(x, y, z)); }
185 Mesh&
triangle(
const unsigned int a,
const unsigned int b,
const unsigned int c );
224 Mesh&
color(
const unsigned int id,
const float r,
const float g,
const float b,
const float a= 1) {
return color(
id,
vec4(r, g, b, a)); }
231 Mesh&
normal(
const unsigned int id,
const float x,
const float y,
const float z ) {
return normal(
id,
vec3(x, y, z)); }
239 void vertex(
const unsigned int id,
const vec3& p );
243 void vertex(
const unsigned int id,
const float x,
const float y,
const float z ) {
vertex(
id,
vec3(x, y, z)); }
275 std::vector<TriangleGroup>
groups( );
277 std::vector<TriangleGroup>
groups(
const std::vector<unsigned int>& triangle_properties );
290 int vertex_count( )
const {
return (
int) m_positions.size(); }
321 const std::vector<vec3>& positions( )
const {
return m_positions; }
322 const std::vector<vec2>& texcoords( )
const {
return m_texcoords; }
323 const std::vector<vec3>& normals( )
const {
return m_normals; }
324 const std::vector<vec4>& colors( )
const {
return m_colors; }
325 const std::vector<unsigned int>& indices( )
const {
return m_indices; }
329 bool has_texcoord( )
const {
return m_texcoords.size() == m_positions.size(); }
330 bool has_normal( )
const {
return m_normals.size() == m_positions.size(); }
331 bool has_color( )
const {
return m_colors.size() == m_positions.size(); }
332 bool has_material_index( )
const {
return int(m_triangle_materials.size()) ==
triangle_count(); }
354 bool operator== (
const Mesh& m )
const
362 GLuint
create_buffers(
const bool use_texcoord,
const bool use_normal,
const bool use_color,
const bool use_material_index );
364 void draw(
const GLuint program,
const bool use_position,
const bool use_texcoord,
const bool use_normal,
const bool use_color,
const bool use_material_index );
366 void draw(
const int first,
const int n,
const GLuint program,
const bool use_position,
const bool use_texcoord,
const bool use_normal,
const bool use_color,
const bool use_material_index );
370 int update_buffers(
const bool use_texcoord,
const bool use_normal,
const bool use_color,
const bool use_material_index );
373 std::vector<vec3> m_positions;
374 std::vector<vec2> m_texcoords;
375 std::vector<vec3> m_normals;
376 std::vector<vec4> m_colors;
378 std::vector<unsigned int> m_indices;
381 std::vector<unsigned int> m_triangle_materials;
388 GLuint m_index_buffer;
389 size_t m_vertex_buffer_size;
390 size_t m_index_buffer_size;
392 bool m_update_buffers;
representation d'un objet / maillage.
std::size_t texcoord_buffer_size() const
renvoie la taille (en octets) du texcoord buffer.
const float * color_buffer() const
renvoie l'adresse de la couleur du premier sommet. par convention, la couleur est un vec4,...
unsigned int vertex(const Point &p)
insere un sommet de position p, et ses attributs (s'ils sont definis par color(), texcoord(),...
unsigned int vertex(const vec3 &p)
insere un sommet de position p, et ses attributs (s'ils sont definis par color(), texcoord(),...
Mesh & texcoord(const vec2 &uv)
definit les coordonnees de texture du prochain sommet.
void vertex(const unsigned int id, const float x, const float y, const float z)
modifie la position du sommet d'indice id.
Mesh()
constructeur par defaut.
const float * vertex_buffer() const
renvoie l'adresse de la position du premier sommet. permet de construire les vertex buffers openGL....
GLuint create_buffers(const bool use_texcoord, const bool use_normal, const bool use_color, const bool use_material_index)
construit les buffers et le vertex array object necessaires pour dessiner l'objet avec openGL....
Mesh(const GLenum primitives)
constructeur.
void vertex(const unsigned int id, const Point &p)
modifie la position du sommet d'indice id.
const std::vector< unsigned int > & material_indices() const
renvoie les indices des matieres des triangles.
Mesh & material(const unsigned int id)
definit la matiere du prochain triangle. id est l'indice d'une matiere ajoutee dans materials(),...
Mesh & restart_strip()
demarre un nouveau strip. a utiliser avec un objet composes de GL_TRIANGLE_STRIP, doit aussi fonction...
Mesh & color(const unsigned int id, const float r, const float g, const float b, const float a=1)
modifie la couleur du sommet d'indice id.
std::vector< TriangleGroup > groups()
renvoie les groupes de triangles de meme matiere. re-organise les triangles. permet d'afficher l'obje...
void bounds(Point &pmin, Point &pmax) const
renvoie min et max les coordonnees des extremites des positions des sommets de l'objet (boite engloba...
Mesh & color(const unsigned int id, const Color &c)
modifie la couleur du sommet d'indice id.
Color default_color() const
renvoie la couleur par defaut du mesh, utilisee si les sommets n'ont pas de couleur associee.
void draw(const GLuint program, const bool use_position, const bool use_texcoord, const bool use_normal, const bool use_color, const bool use_material_index)
dessine l'objet avec un shader program.
Mesh & color(const Color &c)
definit la couleur du prochain sommet.
std::size_t index_buffer_size() const
renvoie la taille (en octets) de l'index buffer.
int create(const GLenum primitives)
construit les objets openGL.
void clear()
vide la description.
Mesh & triangle(const unsigned int a, const unsigned int b, const unsigned int c)
Mesh & color(const float r, const float g, const float b, const float a=1)
definit la couleur du prochain sommet.
Mesh & normal(const vec3 &n)
definit la normale du prochain sommet.
unsigned int vertex(const float x, const float y, const float z)
insere un sommet de position p, et ses attributs (s'ils sont definis par color(), texcoord(),...
int triangle_count() const
renvoie le nombre de triangles.
std::size_t vertex_buffer_size() const
renvoie la longueur (en octets) du vertex buffer.
const Material & triangle_material(const unsigned int id) const
renvoie la matiere d'un triangle.
Mesh & texcoord(const unsigned int id, const float x, const float y)
modifie les coordonnees du sommet d'indice id.
int triangle_material_index(const unsigned int id) const
renvoie l'indice de la matiere d'un triangle.
const float * texcoord_buffer() const
renvoie l'adresse des coordonnees de textures du premier sommet. par convention, c'est un vec2,...
const void * index_buffer() const
renvoie l'adresse du premier indice du premier triangle. par convention c'est un uint,...
Mesh & normal(const float x, const float y, const float z)
definit la normale du prochain sommet.
Mesh & index(const int a)
int vertex_count() const
renvoie le nombre de sommets.
Mesh & normal(const unsigned int id, const Vector &n)
modifie la normale du sommet d'indice id.
Mesh & normal(const unsigned int id, const float x, const float y, const float z)
modifie la normale du sommet d'indice id.
GLenum primitives() const
renvoie le type de primitives.
void release()
detruit les objets openGL.
Mesh & color(const vec4 &c)
definit la couleur du prochain sommet.
Mesh & triangle_last(const int a, const int b, const int c)
Mesh & texcoord(const float x, const float y)
definit les coordonnees de texture du prochain sommet.
bool has_position() const
verifie que les attributs sont decrits de maniere coherente.
Mesh & normal(const Vector &n)
definit la normale du prochain sommet.
const Materials & materials() const
renvoie la description des matieres.
std::size_t normal_buffer_size() const
renvoie la longueur (en octets) du normal buffer.
std::size_t color_buffer_size() const
renvoie la taille (en octets) du color buffer.
const float * normal_buffer() const
renvoie l'adresse de la normale du premier sommet. par convention, la normale est un vec3,...
int index_count() const
renvoie le nombre d'indices de sommets.
Color White()
utilitaire. renvoie une couleur blanche.
int first
premier triangle du groupe
int index
indice de la "propriete"du groupe de triangles, par defaut : indice de la matiere
int n
nombre de triangles du groupe
representation d'un ensemble de triangles de meme matiere.
representation d'une couleur (rgba) transparente ou opaque.
representation d'un point 3d.
representation d'un triangle.
representation d'un vecteur 3d.
vecteur generique, utilitaire.
vecteur generique, utilitaire.
vecteur generique 4d, ou 3d homogene, utilitaire.