gKit2 light
Loading...
Searching...
No Matches
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.
14Mesh make_grid( const int n= 10 )
15{
16 Mesh grid= Mesh(GL_LINES);
17
18 // grille
19 grid.color(White());
20 float w= float(n-1) / 2;
21 for(int x= 0; x < n; x++)
22 {
23 grid.vertex(x -w, 0, -w);
24 grid.vertex(x -w, 0, w);
25 }
26
27 for(int z= 0; z < n; z++)
28 {
29 grid.vertex(-w, 0, z -w);
30 grid.vertex( w, 0, z -w);
31 }
32
33 // axes XYZ
34 grid.color(Red());
35 grid.vertex(Point(0, .1, 0));
36 grid.vertex(Point(1, .1, 0));
37
38 grid.color(Green());
39 grid.vertex(Point(0, .1, 0));
40 grid.vertex(Point(0, 1, 0));
41
42 grid.color(Blue());
43 grid.vertex(Point(0, .1, 0));
44 grid.vertex(Point(0, .1, 1));
45
46 glLineWidth(2);
47
48 return grid;
49}
50
51
52class TP : public AppCamera
53{
54public:
55 // constructeur : donner les dimensions de l'image, et eventuellement la version d'openGL.
56 TP( ) : AppCamera(1024, 640) {}
57
58 // creation des objets de l'application
59 int init( )
60 {
61 // decrire un repere / grille
62 m_repere= make_grid(10);
63
64 // charge un objet
65 m_cube= read_mesh("data/cube.obj");
66
67 // un autre objet
68 m_objet= Mesh(GL_TRIANGLES);
69 {
70 // ajouter des triplets de sommet == des triangles dans objet...
71 }
72
73 // etat openGL par defaut
74 glClearColor(0.2f, 0.2f, 0.2f, 1.f); // couleur par defaut de la fenetre
75
76 glClearDepth(1.f); // profondeur par defaut
77 glDepthFunc(GL_LESS); // ztest, conserver l'intersection la plus proche de la camera
78 glEnable(GL_DEPTH_TEST); // activer le ztest
79
80 return 0; // pas d'erreur, sinon renvoyer -1
81 }
82
83 // destruction des objets de l'application
84 int quit( )
85 {
86 m_objet.release();
87 m_repere.release();
88 return 0; // pas d'erreur
89 }
90
91 // dessiner une nouvelle image
92 int render( )
93 {
94 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
95
96 // dessine le repere, place au centre du monde, pour le point de vue de la camera
97 draw(m_repere, /* model */ Identity(), camera());
98
99 // dessine un cube, lui aussi place au centre du monde
100 draw(m_cube, /* model */ Identity(), camera());
101
102 // dessine le meme cube, a un autre endroit.
103 // il faut modifier la matrice model, qui sert a ca : placer un objet dans le monde, ailleurs qu'a l'origine.
104 // par exemple, pour dessiner un 2ieme cube a la verticale au dessus du premier cube :
105 // 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
106 Transform t= Translation(0, 2, 0);
107 draw(m_cube, /* model */ t, camera());
108
109 // comment dessiner m_objet ??
110
111 // et sans le superposer au cube deja dessine ?
112
113 // continuer, afficher une nouvelle image
114 // tant que la fenetre est ouverte...
115 return 1;
116 }
117
118protected:
119 Mesh m_objet;
120 Mesh m_cube;
121 Mesh m_repere;
122};
123
124
125int main( int argc, char **argv )
126{
127 // il ne reste plus qu'a creer un objet application et la lancer
128 TP tp;
129 tp.run();
130
131 return 0;
132}
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)
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
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
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.
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 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