gKit2 light
tuto7_camera.cpp
Go to the documentation of this file.
1 
3 
4 
5 #include "wavefront.h"
6 #include "texture.h"
7 
8 #include "orbiter.h"
9 #include "draw.h"
10 #include "app_camera.h" // classe Application a deriver
11 
12 
13 // utilitaire. creation d'une grille / repere.
14 Mesh make_grid( const int n= 10 )
15 {
16  Mesh grid= Mesh(GL_LINES);
17 
18  // grille
19  grid.color(White());
20  for(int x= 0; x < n; x++)
21  {
22  float px= float(x) - float(n)/2 + .5f;
23  grid.vertex(Point(px, 0, - float(n)/2 + .5f));
24  grid.vertex(Point(px, 0, float(n)/2 - .5f));
25  }
26 
27  for(int z= 0; z < n; z++)
28  {
29  float pz= float(z) - float(n)/2 + .5f;
30  grid.vertex(Point(- float(n)/2 + .5f, 0, pz));
31  grid.vertex(Point(float(n)/2 - .5f, 0, pz));
32  }
33 
34  // axes XYZ
35  grid.color(Red());
36  grid.vertex(Point(0, .1, 0));
37  grid.vertex(Point(1, .1, 0));
38 
39  grid.color(Green());
40  grid.vertex(Point(0, .1, 0));
41  grid.vertex(Point(0, 1, 0));
42 
43  grid.color(Blue());
44  grid.vertex(Point(0, .1, 0));
45  grid.vertex(Point(0, .1, 1));
46 
47  glLineWidth(2);
48 
49  return grid;
50 }
51 
52 
53 class TP : public AppCamera
54 {
55 public:
56  // constructeur : donner les dimensions de l'image, et eventuellement la version d'openGL.
57  TP( ) : AppCamera(1024, 640) {}
58 
59  // creation des objets de l'application
60  int init( )
61  {
62  // decrire un repere / grille
63  m_repere= make_grid(10);
64 
65  // charge un objet
66  m_cube= read_mesh("data/cube.obj");
67 
68  // un autre objet
69  m_objet= Mesh(GL_TRIANGLES);
70  {
71  // ajouter des triplets de sommet == des triangles dans objet...
72  }
73 
74  // etat openGL par defaut
75  glClearColor(0.2f, 0.2f, 0.2f, 1.f); // couleur par defaut de la fenetre
76 
77  glClearDepth(1.f); // profondeur par defaut
78  glDepthFunc(GL_LESS); // ztest, conserver l'intersection la plus proche de la camera
79  glEnable(GL_DEPTH_TEST); // activer le ztest
80 
81  return 0; // pas d'erreur, sinon renvoyer -1
82  }
83 
84  // destruction des objets de l'application
85  int quit( )
86  {
87  m_objet.release();
88  m_repere.release();
89  return 0; // pas d'erreur
90  }
91 
92  // dessiner une nouvelle image
93  int render( )
94  {
95  glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
96 
97  // dessine le repere, place au centre du monde, pour le point de vue de la camera
98  draw(m_repere, /* model */ Identity(), camera());
99 
100  // dessine un cube, lui aussi place au centre du monde
101  draw(m_cube, /* model */ Identity(), camera());
102 
103  // dessine le meme cube, a un autre endroit.
104  // il faut modifier la matrice model, qui sert a ca : placer un objet dans le monde, ailleurs qu'a l'origine.
105  // par exemple, pour dessiner un 2ieme cube a la verticale au dessus du premier cube :
106  // la transformation est une translation le long du vecteur Y= (0, 1, 0), si on veut placer le cube plus haut, il suffit d'utiliser une valeur > 1
107  Transform t= Translation(0, 2, 0);
108  draw(m_cube, /* model */ t, camera());
109 
110  // comment dessiner m_objet ??
111 
112  // et sans le superposer au cube deja dessine ?
113 
114  // continuer, afficher une nouvelle image
115  // tant que la fenetre est ouverte...
116  return 1;
117  }
118 
119 protected:
120  Mesh m_objet;
121  Mesh m_cube;
122  Mesh m_repere;
123 };
124 
125 
126 int main( int argc, char **argv )
127 {
128  // il ne reste plus qu'a creer un objet application et la lancer
129  TP tp;
130  tp.run();
131 
132  return 0;
133 }
classe application.
Definition: app_camera.h:19
const Orbiter & camera() const
renvoie l'orbiter gere par l'application.
Definition: app_camera.h:37
int run()
execution de l'application.
Definition: app.cpp:36
representation d'un objet / maillage.
Definition: mesh.h:112
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:111
void release()
detruit les objets openGL.
Definition: mesh.cpp:64
Mesh & color(const vec4 &c)
definit la couleur du prochain sommet.
Definition: mesh.cpp:80
Definition: alpha.cpp:59
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.
Color Red()
utilitaire. renvoie une couleur rouge.
Definition: color.cpp:57
Color Blue()
utilitaire. renvoie une couleur bleue.
Definition: color.cpp:67
Color Green()
utilitaire. renvoie une couleur verte.
Definition: color.cpp:62
Color White()
utilitaire. renvoie une couleur blanche.
Definition: color.cpp:52
Transform Identity()
construit la transformation identite.
Definition: mat.cpp:187
Transform Translation(const Vector &v)
renvoie la matrice representant une translation par un vecteur.
Definition: mat.cpp:216
Mesh read_mesh(const char *filename)
charge un fichier wavefront .obj et renvoie un mesh compose de triangles non indexes....
Definition: wavefront.cpp: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