gKit2 light
Loading...
Searching...
No Matches
tuto5.cpp File Reference

utiliser mesh pour charger un objet .obj et le dessiner du point de vue d'une camera + controle de la camera a la souris More...

#include "window.h"
#include "mesh.h"
#include "wavefront.h"
#include "orbiter.h"
#include "draw.h"
#include <stdio.h>

Go to the source code of this file.

Functions

int init ()
int draw ()
int quit ()
int main (int argc, char **argv)

Variables

Mesh objet
Orbiter camera

Detailed Description

utiliser mesh pour charger un objet .obj et le dessiner du point de vue d'une camera + controle de la camera a la souris

Definition in file tuto5.cpp.

Function Documentation

◆ init()

int init ( )

Definition at line 16 of file tuto5.cpp.

17{
18 // etape 1 : charger un objet
19 objet= read_mesh("data/flat_bbox.obj");
20
21 // etape 2 : creer une camera pour observer l'objet
22 // construit l'englobant de l'objet, les extremites de sa boite englobante
23 Point pmin, pmax;
24 objet.bounds(pmin, pmax);
25
26 // regle le point de vue de la camera pour observer l'objet
27 camera.lookat(pmin, pmax);
28
29 // etat openGL par defaut
30 glClearColor(0.2f, 0.2f, 0.2f, 1.f); // couleur par defaut de la fenetre
31
32 // etape 3 : configuration du pipeline.
33/* pour obtenir une image correcte lorsque l'on dessine plusieurs triangles, il faut choisir lequel conserver pour chaque pixel...
34 on conserve le plus proche de la camera, celui que l'on voit normalement. ce test revient a considerer que les objets sont opaques.
35 */
36 glClearDepth(1.f); // profondeur par defaut
37 glDepthFunc(GL_LESS); // ztest, conserver l'intersection la plus proche de la camera
38 glEnable(GL_DEPTH_TEST); // activer le ztest
39
40 return 0; // ras, pas d'erreur
41}
Mesh read_mesh(const char *filename)
charge un fichier wavefront .obj et renvoie un mesh compose de triangles non indexes....
Definition wavefront.cpp:14
representation d'un point 3d.
Definition vec.h:21

◆ draw()

int draw ( void )

Definition at line 43 of file tuto5.cpp.

44{
45 // etape 2 : dessiner l'objet avec opengl
46
47 // on commence par effacer la fenetre avant de dessiner quelquechose
48 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
49 // on efface aussi le zbuffer
50
51 // on dessine le triangle du point de vue de la camera
52 draw(objet, camera);
53
54 return 1; // on continue, renvoyer 0 pour sortir de l'application
55
56/* on peut aussi controler la camera avec les mouvements de la souris
57 // recupere les mouvements de la souris, utilise directement SDL2
58 int mx, my;
59 unsigned int mb= SDL_GetRelativeMouseState(&mx, &my);
60
61 // deplace la camera
62 if(mb & SDL_BUTTON(1)) // le bouton gauche est enfonce
63 // tourne autour de l'objet
64 camera.rotation(mx, my);
65
66 else if(mb & SDL_BUTTON(3)) // le bouton droit est enfonce
67 // approche / eloigne l'objet
68 camera.move(mx);
69
70 else if(mb & SDL_BUTTON(2)) // le bouton du milieu est enfonce
71 // deplace le point de rotation
72 camera.translation((float) mx / (float) window_width(), (float) my / (float) window_height());
73
74 draw(objet, camera);
75
76 return 1;
77 */
78
79/* ou encore plus simple : en utilisant un utilitaire de app_camera.h
80 // #include "app_camera.h"
81
82 update_camera( camera );
83 */
84}

◆ quit()

int quit ( )

Definition at line 86 of file tuto5.cpp.

87{
88 // etape 3 : detruire la description du triangle
89 objet.release();
90 return 0; // ras, pas d'erreur
91}

◆ main()

int main ( int argc,
char ** argv )

Definition at line 94 of file tuto5.cpp.

95{
96 // etape 1 : creer la fenetre
97 Window window= create_window(1024, 640);
98 if(window == NULL)
99 return 1;
100
101 // etape 2 : creer un contexte opengl pour pouvoir dessiner
102 Context context= create_context(window);
103 if(context == NULL)
104 return 1;
105
106 // etape 3 : creation des objets
107 if(init() < 0)
108 {
109 printf("[error] init failed.\n");
110 return 1;
111 }
112
113 // etape 4 : affichage de l'application, tant que la fenetre n'est pas fermee. ou que draw() ne renvoie pas 0
114 run(window, draw);
115
116 // etape 5 : nettoyage
117 quit();
118 release_context(context);
119 release_window(window);
120 return 0;
121}
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)

Variable Documentation

◆ objet

Mesh objet

Definition at line 13 of file tuto5.cpp.

◆ camera

Orbiter camera

Definition at line 14 of file tuto5.cpp.