gKit2 light
Loading...
Searching...
No Matches
tuto9_textures.cpp
Go to the documentation of this file.
1
3
4#include "mat.h"
5#include "mesh.h"
6#include "wavefront.h"
7#include "texture.h"
8
9#include "orbiter.h"
10#include "program.h"
11#include "uniforms.h"
12#include "draw.h"
13
14#include "app.h" // classe Application a deriver
15
16
17class TP : public App
18{
19public:
20 // constructeur : donner les dimensions de l'image, et eventuellement la version d'openGL.
21 TP( ) : App(1024, 640) {}
22
23 int init( )
24 {
25 m_objet= read_mesh("data/cube.obj");
26
27 Point pmin, pmax;
28 m_objet.bounds(pmin, pmax);
29 m_camera.lookat(pmin, pmax);
30
31 // lire une texture sur l'unite 0
32 m_texture0= read_texture(0, "data/debug2x2red.png");
33 // lire une texture sur l'unite 1
34 m_texture1= read_texture(1, "data/pacman.png");
35
36 // creer le shader program
37 m_program= read_program("gkit2_tutos/tuto9_textures.glsl");
38 program_print_errors(m_program);
39
40 // etat openGL par defaut
41 glClearColor(0.2f, 0.2f, 0.2f, 1.f); // couleur par defaut de la fenetre
42
43 glClearDepth(1.f); // profondeur par defaut
44 glDepthFunc(GL_LESS); // ztest, conserver l'intersection la plus proche de la camera
45 glEnable(GL_DEPTH_TEST); // activer le ztest
46
47 return 0; // ras, pas d'erreur
48 }
49
50 // destruction des objets de l'application
51 int quit( )
52 {
53 // etape 3 : detruire le shader program
54 release_program(m_program);
55
56 m_objet.release();
57 glDeleteTextures(1, &m_texture0);
58 glDeleteTextures(1, &m_texture1);
59 return 0;
60 }
61
62 // dessiner une nouvelle image
63 int render( )
64 {
65 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
66
67 // deplace la camera
68 int mx, my;
69 unsigned int mb= SDL_GetRelativeMouseState(&mx, &my);
70 if(mb & SDL_BUTTON(1)) // le bouton gauche est enfonce
71 m_camera.rotation(mx, my);
72 else if(mb & SDL_BUTTON(3)) // le bouton droit est enfonce
73 m_camera.move(mx);
74 else if(mb & SDL_BUTTON(2)) // le bouton du milieu est enfonce
75 m_camera.translation((float) mx / (float) window_width(), (float) my / (float) window_height());
76
77 // etape 2 : dessiner m_objet avec le shader program
78 // configurer le pipeline
79 glUseProgram(m_program);
80
81 // configurer le shader program
82 // . recuperer les transformations
83 Transform model= RotationX(global_time() / 20);
84 Transform view= m_camera.view();
85 Transform projection= m_camera.projection(window_width(), window_height(), 45);
86
87 // . composer les transformations : model, view et projection
88 Transform mvp= projection * view * model;
89
90 // . parametrer le shader program :
91 // . transformation : la matrice declaree dans le vertex shader s'appelle mvpMatrix
92 program_uniform(m_program, "mvpMatrix", mvp);
93
94 // . parametres "supplementaires" :
95 // . utilisation d'une texture configuree sur l'unite 0, le fragment shader declare "uniform sampler2D texture0;"
96 program_use_texture(m_program, "texture0", 0, m_texture0);
97
98 // . utilisation d'une texture configuree sur l'unite 1, le fragment shader declare "uniform sampler2D texture1;"
99 program_use_texture(m_program, "texture1", 1, m_texture1);
100
101 // go !
102 m_objet.draw(m_program);
103 return 1;
104 }
105
106protected:
107 Mesh m_objet;
108 Orbiter m_camera;
109 GLuint m_texture0;
110 GLuint m_texture1;
111 GLuint m_program;
112};
113
114
115int main( int argc, char **argv )
116{
117 TP tp;
118 tp.run();
119
120 return 0;
121}
classe application.
Definition app.h:20
App(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.
Definition app.cpp:11
int run()
execution de l'application.
Definition app.cpp:36
representation d'un objet / maillage.
Definition mesh.h:121
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.
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.
int window_height()
renvoie la hauteur de la fenetre de l'application.
Definition window.cpp:27
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:126
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:218
int program_print_errors(const GLuint program)
affiche les erreurs de compilation.
Definition program.cpp:446
int release_program(const GLuint program)
detruit les shaders et le program.
Definition program.cpp:225
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,...
Definition uniforms.cpp:198
GLuint read_texture(const int unit, const char *filename, const GLenum texel_type)
Definition texture.cpp:133
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