gKit2 light
Loading...
Searching...
No Matches
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
16Mesh triangle;
17Orbiter camera;
18
19int 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
41int 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
71int quit( )
72{
73 // etape 3 : detruire la description du triangle
74 triangle.release();
75 return 0; // ras, pas d'erreur
76}
77
78
79int 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: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
int init(std::vector< const char * > &options)
representation d'une couleur (rgba) transparente ou opaque.
Definition color.h:14