gKit2 light
tuto4.cpp
Go to the documentation of this file.
1 
3 
4 #include <stdio.h>
5 #include "window.h"
6 #include "mesh.h"
7 
8 #include "orbiter.h" // camera
9 
10 #include "draw.h" // pour dessiner du point de vue d'une camera
11 
12 /*
13  par defaut, openGL dessine les objets qui se trouvent entre -1 et 1 sur x, y et z.
14  */
15 
16 Mesh triangle;
17 Orbiter camera;
18 
19 int init( )
20 {
21  // etape 1 : decrire le triangle, les coordonnees des 3 sommets.
22 
23  // creer un mesh pour stocker les coordonnees des sommets du triangle
24  triangle= Mesh(GL_TRIANGLES);
25 
26  triangle.color(Color(1, 0, 0));
27  triangle.vertex(-0.5, -0.5, 0);
28 
29  triangle.color(Color(0, 1, 0));
30  triangle.vertex(0.5, 0.5, 0);
31 
32  triangle.color(Color(0, 0, 1));
33  triangle.vertex(-0.5, 0.5, 0);
34 
35  // etape 2 : creer une camera par defaut, elle est placee en 0, 0, 5 et regarde les objets situes en 0, 0, 0
36  camera= Orbiter();
37 
38  return 0; // ras, pas d'erreur
39 }
40 
41 int draw( )
42 {
43  // etape 2 : dessiner l'objet avec opengl
44 
45  // on commence par effacer la fenetre avant de dessiner quelquechose
46  glClear(GL_COLOR_BUFFER_BIT);
47 
48  // on dessine le triangle du point de vue de la camera
49  draw(triangle, camera);
50 
51  return 1; // on continue, renvoyer 0 pour sortir de l'application
52 
53 // on peut aussi controler la position de la camera, au clavier, par exemple
54 /*
55  float avance= 0;
56  if(key_state('j'))
57  avance= 1;
58  if(key_state('k'))
59  avance= -1;
60 
61  camera.move(avance);
62  //~ camera.translation(avance / 100, 0);
63  draw(triangle, camera);
64 
65  return 1;
66  */
67  // et ses rotations, cf Orbiter::rotation( ), Orbiter::translation( )...
68  // on peut aussi recuperer les mouvements de la souris et l'utiliser pour controler la camera... cf SDL_GetRelativeMouseState( )
69 }
70 
71 int quit( )
72 {
73  // etape 3 : detruire la description du triangle
74  triangle.release();
75  return 0; // ras, pas d'erreur
76 }
77 
78 
79 int main( int argc, char **argv )
80 {
81  // etape 1 : creer la fenetre
82  Window window= create_window(1024, 640);
83  if(window == NULL)
84  return 1;
85 
86  // etape 2 : creer un contexte opengl pour pouvoir dessiner
87  Context context= create_context(window);
88  if(context == NULL)
89  return 1;
90 
91  // etape 3 : creation des objets
92  if(init() < 0)
93  {
94  printf("[error] init failed.\n");
95  return 1;
96  }
97 
98  // etape 4 : affichage de l'application, tant que la fenetre n'est pas fermee. ou que draw() ne renvoie pas 0
99  run(window, draw);
100 
101  // etape 5 : nettoyage
102  quit();
103  release_context(context);
104  release_window(window);
105  return 0;
106 }
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
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:356
void release_window(Window window)
destruction de la fenetre.
Definition: window.cpp:325
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, const int samples)
creation d'une fenetre pour l'application.
Definition: window.cpp:259
void release_context(Context context)
detruit le contexte openGL.
Definition: window.cpp:422
int init(std::vector< const char * > &options)
Definition: shader_kit.cpp:96
representation d'une couleur (rgba) transparente ou opaque.
Definition: color.h:14
int run(Window window, int(*draw)())
boucle de gestion des evenements de l'application.
Definition: window.cpp:147