gKit2 light
Loading...
Searching...
No Matches
tuto10.cpp
1
3
4#include <cmath>
5
6#include "mat.h"
7#include "mesh.h"
8#include "wavefront.h"
9
10#include "orbiter.h"
11#include "program.h"
12#include "uniforms.h"
13#include "draw.h"
14
15#include "app_time.h" // application + mesure et affichage du temps
16#include "app_camera.h" // gestion camera
17
18
19
20// utilitaire. creation d'une grille / repere.
21Mesh make_grid( const int n= 10 )
22{
23 Mesh grid= Mesh(GL_LINES);
24
25 // grille
26 grid.color(White());
27 float w= float(n-1) / 2;
28 for(int x= 0; x < n; x++)
29 {
30 grid.vertex(x -w, 0, -w);
31 grid.vertex(x -w, 0, w);
32 }
33
34 for(int z= 0; z < n; z++)
35 {
36 grid.vertex(-w, 0, z -w);
37 grid.vertex( w, 0, z -w);
38 }
39
40 // axes XYZ
41 grid.color(Red());
42 grid.vertex(Point(0, 0.1, 0));
43 grid.vertex(Point(1, 0.1, 0));
44
45 grid.color(Green());
46 grid.vertex(Point(0, 0.1, 0));
47 grid.vertex(Point(0, 1.1, 0));
48
49 grid.color(Blue());
50 grid.vertex(Point(0, 0.1, 0));
51 grid.vertex(Point(0, 0, 1));
52
53 return grid;
54}
55
56// utilise AppTime pour les screenshots...
57class TP : public AppTime
58{
59public:
60 // constructeur : donner les dimensions de l'image, et eventuellement la version d'openGL.
61 TP( ) : AppTime(1024, 640) {}
62
63 int init( )
64 {
65 m_grid= make_grid();
66 m_objet= read_mesh("data/cube.obj");
67
68 Point pmin, pmax;
69 m_grid.bounds(pmin, pmax);
70 m_camera.lookat(pmin, pmax);
71
72 // etape 1 : creer le shader program
73 m_program= read_program("gkit2_tutos/tuto10.glsl");
74 program_print_errors(m_program);
75
76 // etat openGL par defaut
77 glClearColor(0.2f, 0.2f, 0.2f, 1.f); // couleur par defaut de la fenetre
78
79 glClearDepth(1.f); // profondeur par defaut
80 glDepthFunc(GL_LESS); // ztest, conserver l'intersection la plus proche de la camera
81 glEnable(GL_DEPTH_TEST); // activer le ztest
82
83 return 0; // ras, pas d'erreur
84 }
85
86 // destruction des objets de l'application
87 int quit( )
88 {
89 // etape 3 : detruire le shader program
90 release_program(m_program);
91 // et les objets
92 m_grid.release();
93 m_objet.release();
94 return 0;
95 }
96
97 // dessiner une nouvelle image
98 int render( )
99 {
100 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
101
102 // gestion des mouvements de la camera.
103 update_camera( m_camera );
104
105 // recharge le shader program
106 if(key_state('r'))
107 {
108 clear_key_state('r'); // une seule fois...
109 reload_program(m_program);
110 program_print_errors(m_program);
111 }
112
113 // etape 2 : dessiner m_objet avec le shader program
114 // configurer le pipeline
115 glUseProgram(m_program);
116
117 // configurer le shader program
118 // . recuperer les transformations
119 Transform model= RotationX(global_time() / 20);
120 Transform view= m_camera.view();
121 Transform projection= m_camera.projection(window_width(), window_height(), 45);
122
123 // . composer les transformations : model, view et projection
124 Transform mv= view * model;
125 Transform mvp= projection * mv;
126
127 // . parametrer le shader program :
128 // . transformation : la matrice declaree dans le vertex shader s'appelle mvpMatrix
129 program_uniform(m_program, "mvpMatrix", mvp);
130
131 // . parametres "supplementaires" :
132
133 // go !
134 m_objet.draw(m_program);
135 // relisez le tuto9 sur l'utilisation des shaders et de mesh
136
137 // et pour afficher un autre cube d'une autre couleur ?
138
139 // dessine aussi le repere et la grille pour le meme point de vue
140 draw(m_grid, Identity(), m_camera);
141
142 return 1;
143 }
144
145protected:
146 Mesh m_objet;
147 Mesh m_grid;
148 Orbiter m_camera;
149 GLuint m_program;
150};
151
152
153int main( int argc, char **argv )
154{
155 TP tp;
156 tp.run();
157
158 return 0;
159}
160
AppTime(const int width, const int height, const int major=3, const int minor=3)
constructeur, dimensions de la fenetre et version d'openGL.
Definition app_time.cpp:8
int run()
execution de l'application.
Definition app.cpp:36
representation d'un objet / maillage.
Definition mesh.h:121
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:97
Mesh & color(const vec4 &c)
definit la couleur du prochain sommet.
Definition mesh.cpp:66
representation de la camera, type orbiter, placee sur une sphere autour du centre de l'objet.
Definition orbiter.h:17
Definition alpha.cpp:58
int render()
a deriver pour afficher les objets. renvoie 1 pour continuer, 0 pour fermer l'application.
Definition tuto10.cpp:98
int quit()
a deriver pour detruire les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
Definition tuto10.cpp:87
int init()
a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
Definition tuto10.cpp:63
int window_height()
renvoie la hauteur de la fenetre de l'application.
Definition window.cpp:27
void clear_key_state(const SDL_Keycode key)
desactive une touche du clavier.
Definition window.cpp:59
int key_state(const SDL_Keycode key)
renvoie l'etat d'une touche du clavier. cf la doc SDL2 pour les codes.
Definition window.cpp:53
int window_width()
renvoie la largeur de la fenetre de l'application.
Definition window.cpp:23
float global_time()
renvoie le temps ecoule depuis le lancement de l'application, en millisecondes.
Definition window.cpp:139
Color Red()
utilitaire. renvoie une couleur rouge.
Definition color.cpp:28
Color Blue()
utilitaire. renvoie une couleur bleue.
Definition color.cpp:38
Color Green()
utilitaire. renvoie une couleur verte.
Definition color.cpp:33
Color White()
utilitaire. renvoie une couleur blanche.
Definition color.cpp:23
Transform Identity()
construit la transformation identite.
Definition mat.cpp:187
Transform RotationX(const float a)
renvoie la matrice representation une rotation de angle degree autour de l'axe X.
Definition mat.cpp:230
Mesh read_mesh(const char *filename)
charge un fichier wavefront .obj et renvoie un mesh compose de triangles non indexes....
Definition wavefront.cpp:14
GLuint read_program(const char *filename, const char *definitions)
Definition program.cpp:217
int program_print_errors(const GLuint program, const char *filename)
affiche les erreurs de compilation.
Definition program.cpp:461
int release_program(const GLuint program)
detruit les shaders et le program.
Definition program.cpp:240
representation d'un point 3d.
Definition vec.h:21
representation d'une transformation, une matrice 4x4, organisee par ligne / row major.
Definition mat.h:21