gKit2 light
tuto3.cpp
Go to the documentation of this file.
1 
3 
4 #include <cstdio>
5 
6 #include "window.h"
7 #include "mesh.h"
8 #include "draw.h"
9 
10 /*
11  par defaut, openGL dessine les objets qui se trouvent entre -1 et 1 sur x, y et z.
12  */
13 
14 Mesh triangle;
15 
16 
17 int init( )
18 {
19  // etape 1 : decrire le triangle, les coordonnees des 3 sommets.
20 
21  // creer un mesh pour stocker les coordonnees des sommets du triangle
22  triangle= Mesh(GL_TRIANGLES);
23 
24  triangle.color(Color(1, 0, 0));
25  triangle.vertex(-0.5, -0.5, 0);
26 
27  triangle.color(Color(0, 1, 0));
28  triangle.vertex(0.5, 0.5, 0);
29 
30  triangle.color(Color(0, 0, 1));
31  triangle.vertex(-0.5, 0.5, 0);
32 
33  return 0; // ras, pas d'erreur
34 }
35 
36 int draw( )
37 {
38  // etape 2 : dessiner l'objet avec opengl
39 
40  // on commence par effacer la fenetre avant de dessiner quelquechose
41  glClear(GL_COLOR_BUFFER_BIT);
42 
43  // on dessine le triangle avec une transformation : rotation autour de Z
44  /*
45  openGL utilise un repere droit, x vers la droite, y vers le haut et z devant (vers l'observateur)
46  donc une rotation autour de l'axe Z permet de faire tourner le triangle dans l'image.
47  */
48  Transform T= RotationZ(45);
49  draw(triangle, T, Identity(), Identity());
50 
51  return 1; // on continue, renvoyer 0 pour sortir de l'application
52 
53 // on peut aussi controler la rotation du triangle au clavier...
54 /*
55  static float angle= 0; // il faudrait declarer angle comme variable globale...
56  if(key_state('j'))
57  angle= angle + 1;
58  if(key_state('k'))
59  angle= angle - 1;
60 
61  Transform T= RotationZ( angle );
62  draw(triangle, T, Identity(), Identity());
63 
64  return 1;
65  */
66 
67 // utiliser une autre transformation : Scale(), Translation(), etc.
68 }
69 
70 int quit( )
71 {
72  // etape 3 : detruire la description du triangle
73  triangle.release();
74  return 0; // ras, pas d'erreur
75 }
76 
77 
78 int main( int argc, char **argv )
79 {
80  // etape 1 : creer la fenetre
81  Window window= create_window(1024, 640);
82  if(window == NULL)
83  // erreur lors de la creation de la fenetre ou de l'init de sdl2
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  // erreur lors de la creation du contexte opengl
90  return 1;
91 
92  // etape 3 : creation des objets
93  if(init() < 0)
94  {
95  printf("[error] init failed.\n");
96  return 1;
97  }
98 
99  // etape 4 : affichage de l'application, tant que la fenetre n'est pas fermee. ou que draw() ne renvoie pas 0
100  run(window, draw);
101 
102  // etape 5 : nettoyage
103  quit();
104  release_context(context);
105  release_window(window);
106  return 0;
107 }
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
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
Transform Identity()
construit la transformation identite.
Definition: mat.cpp:187
Transform RotationZ(const float a)
renvoie la matrice representation une rotation de angle degree autour de l'axe Z.
Definition: mat.cpp:254
int init(std::vector< const char * > &options)
Definition: shader_kit.cpp:96
representation d'une couleur (rgba) transparente ou opaque.
Definition: color.h:14
representation d'une transformation, une matrice 4x4, organisee par ligne / row major.
Definition: mat.h:21
int run(Window window, int(*draw)())
boucle de gestion des evenements de l'application.
Definition: window.cpp:147