19 Mesh make_grid(
const int n= 10 )
25 for(
int x= 0; x < n; x++)
27 float px= float(x) - float(n)/2 + .5f;
32 for(
int z= 0; z < n; z++)
34 float pz= float(z) - float(n)/2 + .5f;
62 TP(
const int msaa= 1 ) :
AppCamera(1024, 640, 4,3, msaa) {}
68 m_repere= make_grid(20);
70 Point grid_pmin, grid_pmax;
71 m_repere.
bounds(grid_pmin, grid_pmax);
77 m_objet.
bounds(pmin, pmax);
79 pmin=
min(pmin, grid_pmin);
80 pmax=
max(pmax, grid_pmax);
88 for(
unsigned i= 0; i < m_textures.size(); i++)
93 for(
int i= 0; i < materials.
count(); i++)
103 m_groups= m_objet.
groups();
112 glClearColor(0.2f, 0.2f, 0.2f, 1.f);
115 glDepthFunc(GL_LESS);
116 glEnable(GL_DEPTH_TEST);
118 glEnable(GL_MULTISAMPLE);
119 glEnable(GL_SAMPLE_ALPHA_TO_COVERAGE);
135 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
145 reload_program(m_program,
"tutos/alpha_notexture.glsl");
149 glBindVertexArray(m_vao);
150 glUseProgram(m_program);
163 for(
unsigned i= 0; i < m_groups.size(); i++)
173 glDrawArrays(GL_TRIANGLES, m_groups[i].first, m_groups[i].n);
192 std::vector<GLuint> m_textures;
193 std::vector<TriangleGroup> m_groups;
197 int main(
int argc,
char **argv )
const Orbiter & camera() const
renvoie l'orbiter gere par l'application.
AppCamera(const int width, const int height, const int major=3, const int minor=3, const int samples=0)
constructeur, dimensions de la fenetre et version d'openGL.
representation d'un objet / maillage.
unsigned int vertex(const vec3 &p)
insere un sommet de position p, et ses attributs (s'ils sont definis par color(), texcoord(),...
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....
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...
void release()
detruit les objets openGL.
Mesh & color(const vec4 &c)
definit la couleur du prochain sommet.
const Materials & materials() const
renvoie la description des matieres.
void lookat(const Point ¢er, const float size)
observe le point center a une distance size.
Transform projection(const int width, const int height, const float fov)
fixe la projection reglee pour une image d'aspect width / height, et une demi ouverture de fov degres...
Transform view() const
renvoie la transformation vue.
int render()
a deriver pour afficher les objets. renvoie 1 pour continuer, 0 pour fermer l'application.
int quit()
a deriver pour detruire les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
int init()
a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
void clear_key_state(const SDL_Keycode key)
desactive une touche du clavier.
void printf(Text &text, const int px, const int py, const char *format,...)
affiche un texte a la position x, y. meme utilisation que printf().
int key_state(const SDL_Keycode key)
renvoie l'etat d'une touche du clavier. cf la doc SDL2 pour les codes.
Color Red()
utilitaire. renvoie une couleur rouge.
Color Blue()
utilitaire. renvoie une couleur bleue.
Color Green()
utilitaire. renvoie une couleur verte.
Color White()
utilitaire. renvoie une couleur blanche.
Point max(const Point &a, const Point &b)
renvoie la plus grande composante de chaque point. x, y, z= max(a.x, b.x), max(a.y,...
Transform Identity()
construit la transformation identite.
Point min(const Point &a, const Point &b)
renvoie la plus petite composante de chaque point. x, y, z= min(a.x, b.x), min(a.y,...
Mesh read_mesh(const char *filename)
charge un fichier wavefront .obj et renvoie un mesh compose de triangles non indexes....
int screenshot(const char *filename)
enregistre le contenu de la fenetre dans un fichier. doit etre de type .png / .bmp
GLuint read_program(const char *filename, const char *definitions)
void program_uniform(const GLuint program, const char *uniform, const std::vector< unsigned > &v)
affecte un tableau de valeurs a un uniform du shader program.
int program_print_errors(const GLuint program)
affiche les erreurs de compilation.
void program_use_texture(const GLuint program, const char *uniform, const int unit, const GLuint texture, const GLuint sampler)
configure le pipeline et le shader program pour utiliser une texture, et des parametres de filtrage,...
GLuint read_texture(const int unit, const char *filename, const GLenum texel_type)
int diffuse_texture
indice de la texture de la couleur de base, ou -1.
Color diffuse
couleur diffuse / de base.
int filename_count() const
renvoie le nombre de noms de fichiers de textures.
const Material & material(const int id) const
renvoie la ieme matiere.
int count() const
nombre de matieres.
const char * filename(const int id) const
renvoie le nombre de noms de fichiers de textures.
const char * name(const int id) const
renvoie le nom de la ieme matiere.
representation d'un point 3d.