gKit2 light
Loading...
Searching...
No Matches
tuto9.cpp
Go to the documentation of this file.
1
3
4#include "mat.h"
5#include "mesh.h"
6#include "wavefront.h"
7
8#include "orbiter.h"
9#include "program.h"
10#include "uniforms.h"
11#include "draw.h"
12
13#include "app_camera.h" // classe Application a deriver
14
15
16class TP : public AppCamera
17{
18public:
19 // constructeur : donner les dimensions de l'image, et eventuellement la version d'openGL.
20 TP( ) : AppCamera(1024, 640) {}
21
22 int init( )
23 {
24 // charge un obet
25 m_objet= read_mesh("data/cube.obj");
26
27 // parametre la camera pour observer l'objet
28 Point pmin, pmax;
29 m_objet.bounds(pmin, pmax);
30 camera().lookat(pmin, pmax);
31
32 // cree le shader program
33 m_program= read_program("gkit2_tutos/tuto9_color.glsl");
34 program_print_errors(m_program);
35
36 // etat openGL par defaut
37 glClearColor(0.2f, 0.2f, 0.2f, 1.f); // couleur par defaut de la fenetre
38
39 glClearDepth(1.f); // profondeur par defaut
40 glDepthFunc(GL_LESS); // ztest, conserver l'intersection la plus proche de la camera
41 glEnable(GL_DEPTH_TEST); // activer le ztest
42
43 return 0; // ras, pas d'erreur
44 }
45
46 // destruction des objets de l'application
47 int quit( )
48 {
49 // detruire le shader program
50 release_program(m_program);
51 // et l'objet...
52 m_objet.release();
53 return 0;
54 }
55
56 // dessiner une nouvelle image
57 int render( )
58 {
59 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
60
61 // configurer le pipeline
62 glUseProgram(m_program);
63
64 // configurer le shader program
65 // . recuperer les transformations
66 Transform model= RotationX(global_time() / 20); // fait tourner l'objet sur lui meme en fonction du temps
67 Transform view= camera().view();
68 Transform projection= camera().projection();
69
70 // . composer les transformations : model, view et projection
71 Transform mvp= projection * view * model;
72
73 // . parametrer le shader program :
74 // . transformation : la matrice declaree dans le vertex shader s'appelle 'mvpMatrix'
75 program_uniform(m_program, "mvpMatrix", mvp);
76
77 // . parametre "supplementaire" :
78 // . couleur des pixels, la couleur declaree dans le fragment shader s'appelle 'color'
79 program_uniform(m_program, "color", Color(1, 1, 0, 1));
80
81 // go !
82 m_objet.draw(m_program);
83
84 return 1;
85 }
86
87protected:
88 Mesh m_objet;
89 Transform m_model;
90 GLuint m_program;
91};
92
93
94int main( int argc, char **argv )
95{
96 TP tp;
97 tp.run();
98
99 return 0;
100}
classe application.
Definition app_camera.h:19
const Orbiter & camera() const
renvoie l'orbiter gere par l'application.
Definition app_camera.h:37
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.
Definition app_camera.cpp:5
int run()
execution de l'application.
Definition app.cpp:36
representation d'un objet / maillage.
Definition mesh.h:121
void lookat(const Point &center, const float size)
observe le point center a une distance size.
Definition orbiter.cpp:7
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...
Definition orbiter.cpp:48
Transform view() const
renvoie la transformation vue.
Definition orbiter.cpp:41
Definition alpha.cpp:58
int render()
a deriver pour afficher les objets. renvoie 1 pour continuer, 0 pour fermer l'application.
Definition tuto9.cpp:57
int quit()
a deriver pour detruire les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
Definition tuto9.cpp:47
int init()
a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
Definition tuto9.cpp:22
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
representation d'une couleur (rgba) transparente ou opaque.
Definition color.h:14
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