gKit2 light
tuto8.cpp
Go to the documentation of this file.
1 
3 
4 #include "mat.h"
5 #include "wavefront.h"
6 #include "texture.h"
7 
8 #include "orbiter.h"
9 #include "draw.h"
10 #include "app.h" // classe Application a deriver
11 
12 
13 class TP : public App
14 {
15 public:
16  // constructeur : donner les dimensions de l'image, et eventuellement la version d'openGL.
17  TP( ) : App(1024, 640) {}
18 
19  int init( )
20  {
21  m_objet= read_mesh("data/cube.obj");
22 
23  Point pmin, pmax;
24  m_objet.bounds(pmin, pmax);
25  m_camera.lookat(pmin, pmax);
26 
27  m_texture= read_texture(0, "data/debug2x2red.png");
28 
29  // etat openGL par defaut
30  glClearColor(0.2f, 0.2f, 0.2f, 1.f); // couleur par defaut de la fenetre
31 
32  glClearDepth(1.f); // profondeur par defaut
33  glDepthFunc(GL_LESS); // ztest, conserver l'intersection la plus proche de la camera
34  glEnable(GL_DEPTH_TEST); // activer le ztest
35 
36  return 0; // ras, pas d'erreur
37  }
38 
39  // destruction des objets de l'application
40  int quit( )
41  {
42  m_objet.release();
43  glDeleteTextures(1, &m_texture);
44 
45  return 0;
46  }
47 
48  int update( const float time, const float delta )
49  {
50  // modifier l'orientation du cube a chaque image.
51  // time est le temps ecoule depuis le demarrage de l'application, en millisecondes,
52  // delta est le temps ecoule depuis l'affichage de la derniere image / le dernier appel a draw(), en millisecondes.
53 
54  m_model= RotationY(time / 20);
55  return 0;
56  }
57 
58  // dessiner une nouvelle image
59  int render( )
60  {
61  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
62 
63  // deplace la camera
64  int mx, my;
65  unsigned int mb= SDL_GetRelativeMouseState(&mx, &my);
66  if(mb & SDL_BUTTON(1)) // le bouton gauche est enfonce
67  m_camera.rotation(mx, my);
68  else if(mb & SDL_BUTTON(3)) // le bouton droit est enfonce
69  m_camera.move(mx);
70  else if(mb & SDL_BUTTON(2)) // le bouton du milieu est enfonce
71  m_camera.translation((float) mx / (float) window_width(), (float) my / (float) window_height());
72 
73  draw(m_objet, m_model, m_camera, m_texture);
74 
75  /* on pourrait obtenir le meme resultat sans utiliser App::update( ).
76  les parametres time et update sont renvoyes par les fonctions global_time() et delta_time() :
77  draw(m_objet, RotationY(global_time() / 20), m_camera, m_texture);
78  */
79 
80  return 1;
81  }
82 
83 protected:
84  Transform m_model;
85  Mesh m_objet;
86  GLuint m_texture;
87  Orbiter m_camera;
88 };
89 
90 
91 int main( int argc, char **argv )
92 {
93  TP tp;
94  tp.run();
95 
96  return 0;
97 }
classe application.
Definition: app.h:20
int run()
execution de l'application.
Definition: app.cpp:36
representation d'un objet / maillage.
Definition: mesh.h:112
void bounds(Point &pmin, Point &pmax) const
renvoie min et max les coordonnees des extremites des positions des sommets de l'objet (boite engloba...
Definition: mesh.cpp:501
void release()
detruit les objets openGL.
Definition: mesh.cpp:62
representation de la camera, type orbiter, placee sur une sphere autour du centre de l'objet.
Definition: orbiter.h:17
void lookat(const Point &center, const float size)
observe le point center a une distance size.
Definition: orbiter.cpp:7
void move(const float z)
rapproche / eloigne la camera du centre.
Definition: orbiter.cpp:33
void translation(const float x, const float y)
deplace le centre / le point observe.
Definition: orbiter.cpp:27
void rotation(const float x, const float y)
change le point de vue / la direction d'observation.
Definition: orbiter.cpp:21
Definition: alpha.cpp:59
int render()
a deriver pour afficher les objets. renvoie 1 pour continuer, 0 pour fermer l'application.
Definition: tuto8.cpp:59
int quit()
a deriver pour detruire les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
Definition: tuto8.cpp:40
int update(const float time, const float delta)
a deriver et redefinir pour animer les objets en fonction du temps.
Definition: tuto8.cpp:48
int init()
a deriver pour creer les objets openGL. renvoie -1 pour indiquer une erreur, 0 sinon.
Definition: tuto8.cpp:19
int window_height()
renvoie la hauteur de la fenetre de l'application.
Definition: window.cpp:29
int window_width()
renvoie la largeur de la fenetre de l'application.
Definition: window.cpp:25
Transform RotationY(const float a)
renvoie la matrice representation une rotation de a degree autour de l'axe Y.
Definition: mat.cpp:242
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_texture(const int unit, const char *filename, const GLenum texel_type)
Definition: texture.cpp:154
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