gKit2 light
Loading...
Searching...
No Matches
tuto6.cpp
Go to the documentation of this file.
1
3// utiliser mesh pour charger un objet .obj
4// camera pour le dessiner du point de vue d'une camera + controle de la camera a la souris
5// texture : creation a partir d'un fichier, utilisation avec draw(mesh, ...) et destruction avec glDeleteTextures( )
6
7#include <stdio.h>
8#include "window.h"
9
10#include "mesh.h"
11#include "wavefront.h" // pour charger un objet au format .obj
12#include "texture.h"
13
14#include "orbiter.h"
15
16#include "draw.h" // pour dessiner du point de vue d'une camera
17#include "app_camera.h" // gestion camera
18
19Mesh objet;
20GLuint texture;
21Orbiter camera;
22
23int init( )
24{
25 // etape 1 : charger un objet
26 objet= read_mesh("data/cube.obj");
27
28 // etape 2 : creer une camera pour observer l'objet
29 // construit l'englobant de l'objet, les extremites de sa boite englobante
30 Point pmin, pmax;
31 objet.bounds(pmin, pmax);
32
33 // regle le point de vue de la camera pour observer l'objet
34 camera.lookat(pmin, pmax);
35
36 // etape 3 : charger une texture a aprtir d'un fichier .bmp, .jpg, .png, .tga, etc, utilise read_image( ) et sdl_image
37/*
38 openGL peut utiliser plusieurs textures simultanement pour dessiner un objet, il faut les numeroter.
39 une texture et ses parametres sont selectionnes sur une unite de texture.
40 et ce sont les unites de texture qui sont utilisees pour dessiner un objet.
41
42 l'exemple cree la texture sur l'unite 0 avec les parametres par defaut
43 */
44 texture= read_texture(0, "data/debug2x2red.png");
45
46 // etat openGL par defaut
47 glClearColor(0.2f, 0.2f, 0.2f, 1.f); // couleur par defaut de la fenetre
48
49 // etape 3 : configuration du pipeline.
50 glClearDepth(1.f); // profondeur par defaut
51 glDepthFunc(GL_LESS); // ztest, conserver l'intersection la plus proche de la camera
52 glEnable(GL_DEPTH_TEST); // activer le ztest
53
54 return 0; // ras, pas d'erreur
55}
56
57int draw( )
58{
59 // etape 2 : dessiner l'objet avec opengl
60
61 // on commence par effacer la fenetre avant de dessiner quelquechose
62 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
63 // on efface aussi le zbuffer
64
65 // gestion des mouvements de la souris
66 update_camera( camera );
67
68 // passer la texture en parametre
69 draw(objet, camera, texture);
70 return 1;
71}
72
73int quit( )
74{
75 // etape 3 : detruire la description de l'objet
76 objet.release();
77
78 // et la texture
79 glDeleteTextures(1, &texture);
80
81 return 0; // ras, pas d'erreur
82}
83
84
85int main( int argc, char **argv )
86{
87 // etape 1 : creer la fenetre
88 Window window= create_window(1024, 640);
89 if(window == NULL)
90 return 1;
91
92 // etape 2 : creer un contexte opengl pour pouvoir dessiner
93 Context context= create_context(window);
94 if(context == NULL)
95 return 1;
96
97 // etape 3 : creation des objets
98 if(init() < 0)
99 {
100 printf("[error] init failed.\n");
101 return 1;
102 }
103
104 // etape 4 : affichage de l'application, tant que la fenetre n'est pas fermee. ou que draw() ne renvoie pas 0
105 run(window, draw);
106
107 // etape 5 : nettoyage
108 quit();
109 release_context(context);
110 release_window(window);
111 return 0;
112}
representation d'un objet / maillage.
Definition mesh.h:121
representation de la camera, type orbiter, placee sur une sphere autour du centre de l'objet.
Definition orbiter.h:17
Context create_context(Window window)
cree et configure un contexte opengl
Definition window.cpp:358
void release_window(Window window)
destruction de la fenetre.
Definition window.cpp:328
int run(Window window, int(*draw)())
boucle de gestion des evenements de l'application.
Definition window.cpp:158
void printf(Text &text, const int px, const int py, const char *format,...)
affiche un texte a la position x, y. meme utilisation que printf().
Definition text.cpp:140
Window create_window(const int w, const int h, const int major, const int minor)
creation d'une fenetre pour l'application.
Definition window.cpp:262
void release_context(Context context)
detruit le contexte openGL.
Definition window.cpp:439
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:133
int init(std::vector< const char * > &options)
representation d'un point 3d.
Definition vec.h:21