gKit2 light

- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List
- File Members

mesh.h
Go to the documentation of this file.
1
2 #ifndef _MESH_H
3 #define _MESH_H
4
5 #include <vector>
6 #include <unordered_map>
7
8 #include "glcore.h"
9
10 #include "vec.h"
11 #include "mat.h"
12 #include "color.h"
13
14
17
87 class Mesh
89 {
90 public:
92 Mesh( ) : m_positions(), m_texcoords(), m_normals(), m_colors(), m_indices(),
93 m_color(White()), m_primitives(GL_POINTS), m_vao(0), m_program(0), m_update_buffers(false) {}
94
96 Mesh( const GLenum primitives ) : m_positions(), m_texcoords(), m_normals(), m_colors(), m_indices(),
97 m_color(White()), m_primitives(primitives), m_vao(0), m_program(0), m_update_buffers(false) {}
98
100 int create( const GLenum primitives );
102 void release( );
103
105 Color default_color( ) const { return m_color; }
107 Mesh& default_color( const Color& color );
108
110 Mesh& color( const vec4& c );
112 Mesh& color( const Color& c ) { return color(vec4(c.r, c.g, c.b, c.a)); }
114 Mesh& color( const float r, const float g, const float b, const float a= 1) { return color(Color(r, g, b, a)); }
115
117 Mesh& normal( const vec3& n );
119 Mesh& normal( const Vector& n ) { return normal(vec3(n)); }
121 Mesh& normal( const float x, const float y, const float z ) { return normal(vec3(x, y, z)); }
122
124 Mesh& texcoord( const vec2& uv );
126 Mesh& texcoord( const float x, const float y ) { return texcoord(vec2(x, y)); }
127
129 unsigned int vertex( const vec3& p );
131 unsigned int vertex( const Point& p ) { return vertex(vec3(p)); }
133 unsigned int vertex( const float x, const float y, const float z ) { return vertex(vec3(x, y, z)); }
134
144 Mesh& triangle( const unsigned int a, const unsigned int b, const unsigned int c );
145
155 Mesh& triangle_last( const int a, const int b, const int c );
156
158 Mesh& restart_strip( );
159
161 Mesh& color( const unsigned int id, const vec4& c );
163 Mesh& color( const unsigned int id, const Color& c ) { return color(id, vec4(c.r, c.g, c.b, c.a)); }
165 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)); }
166
168 Mesh& normal( const unsigned int id, const vec3& n );
170 Mesh& normal( const unsigned int id, const Vector& n ) { return normal(id, vec3(n)); }
172 Mesh& normal( const unsigned int id, const float x, const float y, const float z ) { return normal(id, vec3(x, y, z)); }
173
175 Mesh& texcoord( const unsigned int id, const vec2& uv );
177 Mesh& texcoord( const unsigned int id, const float x, const float y ) { return texcoord(id, vec2(x, y)); }
178
180 void vertex( const unsigned int id, const vec3& p );
182 void vertex( const unsigned int id, const Point& p ) { vertex(id, vec3(p)); }
184 void vertex( const unsigned int id, const float x, const float y, const float z ) { vertex(id, vec3(x, y, z)); }
185
187 void bounds( Point& pmin, Point& pmax );
188
190 int vertex_count( ) const { return (int) m_positions.size(); }
192 int index_count( ) const { return (int) m_indices.size(); }
193
195 const float *vertex_buffer( ) const { return &m_positions.front().x; }
197 std::size_t vertex_buffer_size( ) const { return m_positions.size() * sizeof(vec3); }
198
200 const float *normal_buffer( ) const { return &m_normals.front().x; }
202 std::size_t normal_buffer_size( ) const { return m_normals.size() * sizeof(vec3); }
203
205 const float *texcoord_buffer( ) const { return &m_texcoords.front().x; }
207 std::size_t texcoord_buffer_size( ) const { return m_texcoords.size() * sizeof(vec2); }
208
210 const float *color_buffer( ) const { return &m_colors.front().x; }
212 std::size_t color_buffer_size( ) const { return m_colors.size() * sizeof(vec4); }
213
215 const void *index_buffer( ) const { return &m_indices.front(); }
217 std::size_t index_buffer_size( ) const { return m_indices.size() * sizeof(unsigned int); }
218
230 const void *attribute_buffer( const unsigned int id ) const;
232 std::size_t attribute_buffer_size( const unsigned int id ) const;
233
234 //
235 const std::vector<vec3>& positions( ) const { return m_positions; }
236 const std::vector<vec2>& texcoords( ) const { return m_texcoords; }
237 const std::vector<vec3>& normals( ) const { return m_normals; }
238 const std::vector<vec4>& colors( ) const { return m_colors; }
239 const std::vector<unsigned int>& indices( ) const { return m_indices; }
240 GLenum primitives( ) const { return m_primitives; }
241
250 static Mesh& error( )
251 {
252 static Mesh mesh;
253 return mesh;
254 }
255
256 bool operator== ( const Mesh& m ) const
257 {
258 return (this == &m);
259 }
260
268 void draw( const Transform& model, const Transform& view, const Transform& projection,
269 const bool use_light, const Point& light, const Color& light_color,
270 const bool use_texture, const GLuint texture );
271
274 GLuint create_buffers( const bool use_texcoord= true, const bool use_normal= true, const bool use_color= true );
275
277
291 GLuint create_program( const bool use_texcoord= true, const bool use_normal= true, const bool use_color= true, const bool use_light= false );
292
293 int update_buffers( const bool use_texcoord, const bool use_normal, const bool use_color );
294
295 protected:
296 std::vector<vec3> m_positions;
297 std::vector<vec2> m_texcoords;
298 std::vector<vec3> m_normals;
299 std::vector<vec4> m_colors;
300
301 std::vector<unsigned int> m_indices;
302
303 std::unordered_map<unsigned int, GLuint> m_state_map;
304 unsigned int m_state;
305
306 Color m_color;
307
308 GLenum m_primitives;
309 GLuint m_vao;
310 GLuint m_program;
311
312 bool m_update_buffers;
313 };
314
316 #endif
Mesh::restart_strip
Mesh & restart_strip()
demarre un nouveau strip. a utiliser avec un objet composes de GL_TRIANGLE_STRIP, doit aussi fonction...
Definition: mesh.cpp:141
Mesh::normal_buffer
const float * normal_buffer() const
renvoie l'adresse de la normale du premier sommet. par convention, la normale est un vec3...
Definition: mesh.h:200
Mesh::index_buffer_size
std::size_t index_buffer_size() const
renvoie la taille (en octets) de l'index buffer.
Definition: mesh.h:217
Mesh::color
Mesh & color(const float r, const float g, const float b, const float a=1)
definit la couleur du prochain sommet.
Definition: mesh.h:114
Mesh::color
Mesh & color(const unsigned int id, const Color &c)
modifie la couleur du sommet d'indice id.
Definition: mesh.h:163
Mesh::vertex_buffer
const float * vertex_buffer() const
renvoie l'adresse de la position du premier sommet. permet de construire les vertex buffers openGL...
Definition: mesh.h:195
Mesh::index_count
int index_count() const
renvoie le nombre d'indices de sommets.
Definition: mesh.h:192
Mesh::bounds
void bounds(Point &pmin, Point &pmax)
renvoie min et max les coordonnees des extremites des positions des sommets de l'objet (boite engloba...
Definition: mesh.cpp:153
Mesh::color
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.
Definition: mesh.h:165
vec3
vecteur generique, utilitaire.
Definition: vec.h:104
Mesh::color
Mesh & color(const Color &c)
definit la couleur du prochain sommet.
Definition: mesh.h:112
Mesh::draw
void draw(const Transform &model, const Transform &view, const Transform &projection, const bool use_light, const Point &light, const Color &light_color, const bool use_texture, const GLuint texture)
Definition: mesh.cpp:271
vec2
vecteur generique, utilitaire.
Definition: vec.h:94
Mesh::normal_buffer_size
std::size_t normal_buffer_size() const
renvoie la longueur (en octets) du normal buffer.
Definition: mesh.h:202
Mesh::color
Mesh & color(const vec4 &c)
definit la couleur du prochain sommet.
Definition: mesh.cpp:37
Mesh
representation d'un objet / maillage.
Definition: mesh.h:88
Color
representation d'une couleur (rgba) transparente ou opaque.
Definition: color.h:13
Mesh::vertex
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()...
Definition: mesh.h:133
Mesh::vertex_buffer_size
std::size_t vertex_buffer_size() const
renvoie la longueur (en octets) du vertex buffer.
Definition: mesh.h:197
Mesh::vertex
unsigned int vertex(const Point &p)
insere un sommet de position p, et ses attributs (s'ils sont definis par color(), texcoord()...
Definition: mesh.h:131
Mesh::triangle
Mesh & triangle(const unsigned int a, const unsigned int b, const unsigned int c)
Definition: mesh.cpp:119
Mesh::create_program
GLuint create_program(const bool use_texcoord=true, const bool use_normal=true, const bool use_color=true, const bool use_light=false)
construit un shader program configure.
Definition: mesh.cpp:250
Mesh::create_buffers
GLuint create_buffers(const bool use_texcoord=true, const bool use_normal=true, const bool use_color=true)
Definition: mesh.cpp:196
Mesh::texcoord_buffer
const float * texcoord_buffer() const
renvoie l'adresse des coordonnees de textures du premier sommet. par convention, c'est un vec2...
Definition: mesh.h:205
Mesh::texcoord
Mesh & texcoord(const unsigned int id, const float x, const float y)
modifie les coordonnees du sommet d'indice id.
Definition: mesh.h:177
Mesh::vertex
unsigned int vertex(const vec3 &p)
insere un sommet de position p, et ses attributs (s'ils sont definis par color(), texcoord()...
Definition: mesh.cpp:56
vec4
vecteur generique 4d, ou 3d homogene, utilitaire.
Definition: vec.h:121
Mesh::attribute_buffer_size
std::size_t attribute_buffer_size(const unsigned int id) const
renvoie la taille (en octets) d'un attribut.
Definition: mesh.cpp:182
Mesh::attribute_buffer
const void * attribute_buffer(const unsigned int id) const
Definition: mesh.cpp:169
Mesh::create
int create(const GLenum primitives)
construit les objets openGL.
Definition: mesh.cpp:13
Mesh::color_buffer_size
std::size_t color_buffer_size() const
renvoie la taille (en octets) du color buffer.
Definition: mesh.h:212
Mesh::texcoord
Mesh & texcoord(const float x, const float y)
definit les coordonnees de texture du prochain sommet.
Definition: mesh.h:126
Vector
representation d'un vecteur 3d.
Definition: vec.h:42
White
Color White()
utilitaire. renvoie une couleur blanche.
Definition: color.cpp:10
Mesh::release
void release()
detruit les objets openGL.
Definition: mesh.cpp:19
mat.h
Mesh::index_buffer
const void * index_buffer() const
renvoie l'adresse du premier indice du premier triangle. par convention c'est un uint, 1, GL_UNSIGNED_INT.
Definition: mesh.h:215
Mesh::error
static Mesh & error()
Definition: mesh.h:250
Mesh::texcoord_buffer_size
std::size_t texcoord_buffer_size() const
renvoie la taille (en octets) du texcoord buffer.
Definition: mesh.h:207
Mesh::triangle_last
Mesh & triangle_last(const int a, const int b, const int c)
Definition: mesh.cpp:130
color.h
Transform
representation d'une transformation, une matrice 4x4, organisee par ligne / row major.
Definition: mat.h:20
Point
representation d'un point 3d.
Definition: vec.h:19
Mesh::vertex
void vertex(const unsigned int id, const float x, const float y, const float z)
modifie la position du sommet d'indice id.
Definition: mesh.h:184
Mesh::normal
Mesh & normal(const vec3 &n)
definit la normale du prochain sommet.
Definition: mesh.cpp:43
Mesh::normal
Mesh & normal(const unsigned int id, const Vector &n)
modifie la normale du sommet d'indice id.
Definition: mesh.h:170
Mesh::vertex_count
int vertex_count() const
renvoie le nombre de sommets.
Definition: mesh.h:190
Mesh::Mesh
Mesh(const GLenum primitives)
constructeur.
Definition: mesh.h:96
Mesh::normal
Mesh & normal(const Vector &n)
definit la normale du prochain sommet.
Definition: mesh.h:119
Mesh::normal
Mesh & normal(const unsigned int id, const float x, const float y, const float z)
modifie la normale du sommet d'indice id.
Definition: mesh.h:172
Mesh::Mesh
Mesh()
constructeur par defaut.
Definition: mesh.h:92
Mesh::texcoord
Mesh & texcoord(const vec2 &uv)
definit les coordonnees de texture du prochain sommet.
Definition: mesh.cpp:49
Mesh::normal
Mesh & normal(const float x, const float y, const float z)
definit la normale du prochain sommet.
Definition: mesh.h:121
vec.h
Mesh::vertex
void vertex(const unsigned int id, const Point &p)
modifie la position du sommet d'indice id.
Definition: mesh.h:182
Mesh::color_buffer
const float * color_buffer() const
renvoie l'adresse de la couleur du premier sommet. par convention, la couleur est un vec4...
Definition: mesh.h:210
Mesh::default_color
Color default_color() const
renvoie la couleur par defaut du mesh, utilisee si les sommets n'ont pas de couleur associee...
Definition: mesh.h:105