gKit2 light

- Main Page
- Related Pages
- Modules
- Classes
- Files

- File List
- File Members

tuto7.cpp
Go to the documentation of this file.
1
3
4 #include "wavefront.h"
5 #include "texture.h"
6
7 #include "orbiter.h"
8 #include "draw.h"
9 #include "app.h" // classe Application a deriver
10
11
12 class TP : public App
13 {
14 public:
15 // constructeur : donner les dimensions de l'image, et eventuellement la version d'openGL.
16 TP( ) : App(1024, 640) {}
17
18 // creation des objets de l'application
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 // dessiner une nouvelle image
49 int render( )
50 {
51 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
52
53 // deplace la camera
54 int mx, my;
55 unsigned int mb= SDL_GetRelativeMouseState(&mx, &my);
56 if(mb & SDL_BUTTON(1)) // le bouton gauche est enfonce
57 m_camera.rotation(mx, my);
58 else if(mb & SDL_BUTTON(3)) // le bouton droit est enfonce
59 m_camera.move(mx);
60 else if(mb & SDL_BUTTON(2)) // le bouton du milieu est enfonce
61 m_camera.translation((float) mx / (float) window_width(), (float) my / (float) window_height());
62
63 draw(m_objet, m_camera, m_texture);
64
65 return 1;
66 }
67
68 protected:
69 Mesh m_objet;
70 GLuint m_texture;
71 Orbiter m_camera;
72 };
73
74
75 int main( int argc, char **argv )
76 {
77 // il ne reste plus qu'a creer un objet application et la lancer
78 TP tp;
79 tp.run();
80
81 return 0;
82 }
Orbiter
representation de la camera, type orbiter, placee sur une sphere autour du centre de l'objet...
Definition: orbiter.h:16
TP::init
int init()
a deriver pour creer les objets openGL.
Definition: tuto7.cpp:19
draw.h
Mesh::bounds
void bounds(Point &pmin, Point &pmax)
renvoie min et max les coordonnees des extremites des positions des sommets de l'objet (boite engloba...
Definition: mesh.cpp:153
Mesh
representation d'un objet / maillage.
Definition: mesh.h:88
Orbiter::move
void move(const float z)
rapproche / eloigne la camera du centre.
Definition: orbiter.cpp:33
texture.h
App::run
int run()
execution de l'application.
Definition: app.cpp:21
read_texture
GLuint read_texture(const int unit, const char *filename, const GLenum texel_type)
Definition: texture.cpp:98
draw
void draw(Mesh &m, const Transform &model, const Transform &view, const Transform &projection, const GLuint texture)
applique une texture a la surface de l'objet. ne fonctionne que si les coordonnees de textures sont f...
Definition: draw.cpp:6
TP::quit
int quit()
a deriver pour detruire les objets openGL.
Definition: tuto7.cpp:40
window_width
int window_width()
renvoie la largeur de la fenetre de l'application.
Definition: window.cpp:14
Mesh::release
void release()
detruit les objets openGL.
Definition: mesh.cpp:19
Orbiter::lookat
void lookat(const Point &center, const float size)
observe le point center a une distance size.
Definition: orbiter.cpp:7
App::App
App(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.cpp:6
Orbiter::translation
void translation(const float x, const float y)
deplace le centre / le point observe.
Definition: orbiter.cpp:27
wavefront.h
TP
Definition: tuto7.cpp:12
Orbiter::rotation
void rotation(const float x, const float y)
change le point de vue / la direction d'observation.
Definition: orbiter.cpp:21
window_height
int window_height()
renvoie la hauteur de la fenetre de l'application.
Definition: window.cpp:18
Point
representation d'un point 3d.
Definition: vec.h:19
app.h
TP::render
int render()
a deriver pour afficher les objets.
Definition: tuto7.cpp:49
orbiter.h
App
classe application.
Definition: app.h:20
read_mesh
Mesh read_mesh(const char *filename)
charge un fichier wavefront .obj et renvoie un mesh compose de triangles non indexes. utiliser glDrawArrays pour l'afficher. a detruire avec Mesh::release( ).
Definition: wavefront.cpp:8