gKit2 light

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

- File List
- File Members

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= make_rotationZ( angle );
62 draw(triangle, T, make_identity(), make_identity());
63
64 return 1;
65 */
66 // utiliser une autre transformation : make_scale(), make_translation(), etc.
67 }
68
69 int quit( )
70 {
71 // etape 3 : detruire la description du triangle
72 triangle.release();
73 return 0; // ras, pas d'erreur
74 }
75
76
77 int main( int argc, char **argv )
78 {
79 // etape 1 : creer la fenetre
80 Window window= create_window(1024, 640);
81 if(window == NULL)
82 return 1; // erreur lors de la creation de la fenetre ou de l'init de sdl2
83
84 // etape 2 : creer un contexte opengl pour pouvoir dessiner
85 Context context= create_context(window);
86 if(context == NULL)
87 return 1; // erreur lors de la creation du contexte opengl
88
89 // etape 3 : creation des objets
90 if(init() < 0)
91 {
92 printf("[error] init failed.\n");
93 return 1;
94 }
95
96 // etape 4 : affichage de l'application, tant que la fenetre n'est pas fermee. ou que draw() ne renvoie pas 0
97 run(window, draw);
98
99 // etape 5 : nettoyage
100 quit();
101 release_context(context);
102 release_window(window);
103 return 0;
104 }
create_context
Context create_context(Window window, const int major, const int minor)
cree et configure un contexte opengl
Definition: window.cpp:252
draw.h
window.h
mesh.h
Mesh::color
Mesh & color(const vec4 &c)
definit la couleur du prochain sommet.
Definition: mesh.cpp:37
Mesh
representation d'un objet / maillage.
Definition: mesh.h:88
Color
representation d'une couleur (rgba) transparente ou opaque.
Definition: color.h:13
Identity
Transform Identity()
construit la transformation identite.
Definition: mat.cpp:103
Mesh::vertex
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:56
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
Mesh::release
void release()
detruit les objets openGL.
Definition: mesh.cpp:19
create_window
Window create_window(const int w, const int h)
creation d'une fenetre pour l'application.
Definition: window.cpp:186
RotationZ
Transform RotationZ(const float a)
renvoie la matrice representation une rotation de angle degree autour de l'axe Z. ...
Definition: mat.cpp:170
printf
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
Transform
representation d'une transformation, une matrice 4x4, organisee par ligne / row major.
Definition: mat.h:20
release_context
void release_context(Context context)
detruit le contexte openGL.
Definition: window.cpp:306
release_window
void release_window(Window window)
destruction de la fenetre.
Definition: window.cpp:222
run
int run(Window window, int(*draw)(void))
fonction principale. gestion des evenements et appel de la fonction draw de l'application.