gKit2 light
Loading...
Searching...
No Matches
app_camera.cpp
1
2#include "texture.h"
3#include "app_camera.h"
4
5AppCamera::AppCamera( const int width, const int height, const int major, const int minor )
6 : App(width, height, major, minor), m_camera()
7{
8 // projection par defaut, adaptee a la fenetre
9 m_camera.projection(window_width(), window_height(), 45);
10}
11
12AppCamera::~AppCamera( ) {}
13
14int AppCamera::prerender( )
15{
16 update_camera( m_camera );
17
18 // appelle la fonction update() de la classe derivee
19 return update(global_time(), delta_time());
20}
21
22
23void update_camera( Orbiter& camera )
24{
25 // recupere les mouvements de la souris
26 int mx, my;
27 unsigned int mb= SDL_GetRelativeMouseState(&mx, &my);
28
29 // deplace la camera
30 if(mb & SDL_BUTTON(1))
31 camera.rotation(mx, my); // tourne autour de l'objet
32 else if(mb & SDL_BUTTON(3))
33 camera.translation( float(mx) / float(window_width()), float(my) / float(window_height()));
34 // deplace le point de rotation
35 else if(mb & SDL_BUTTON(2))
36 camera.move(mx); // approche / eloigne l'objet
37
38 // molette / scroll
39 SDL_MouseWheelEvent wheel= wheel_event();
40 if(wheel.y != 0)
41 {
43 camera.move(8.f * wheel.y); // approche / eloigne l'objet
44 }
45
46 const char *orbiter_filename= "app_orbiter.txt";
47 // copy / export / write orbiter
48 if(key_state('c'))
49 {
50 clear_key_state('c');
51 camera.write_orbiter(orbiter_filename);
52 }
53 // paste / read orbiter
54 if(key_state('v'))
55 {
56 clear_key_state('v');
57
58 Orbiter tmp;
59 if(tmp.read_orbiter(orbiter_filename) == 0)
60 // ne modifie camera que si la lecture est correcte...
61 camera= tmp;
62 }
63
64 // screenshot
65 if(key_state('s'))
66 {
67 static int calls= 1;
68
69 clear_key_state('s');
70 screenshot("app", calls++);
71 }
72}
void update_camera(Orbiter &camera)
gestion de la camera, clavier / souris.
virtual int update(const float time, const float delta)
a deriver et redefinir pour animer les objets en fonction du temps.
Definition app_camera.h:31
AppCamera(const int width, const int height, const int major=3, const int minor=3)
constructeur, dimensions de la fenetre et version d'openGL.
Definition app_camera.cpp:5
App(const int width, const int height, const int major=3, const int minor=3)
constructeur, dimensions de la fenetre et version d'openGL.
Definition app.cpp:11
representation de la camera, type orbiter, placee sur une sphere autour du centre de l'objet.
Definition orbiter.h:17
int read_orbiter(const char *filename)
relit la position de l'orbiter depuis un fichier texte.
Definition orbiter.cpp:127
int window_height()
renvoie la hauteur de la fenetre de l'application.
Definition window.cpp:27
void clear_key_state(const SDL_Keycode key)
desactive une touche du clavier.
Definition window.cpp:59
void clear_wheel_event()
desactive l'evenement.
Definition window.cpp:127
int key_state(const SDL_Keycode key)
renvoie l'etat d'une touche du clavier. cf la doc SDL2 pour les codes.
Definition window.cpp:53
SDL_MouseWheelEvent wheel_event()
renvoie le dernier evenement. etat de la molette de la souris / glisser sur le pad.
Definition window.cpp:123
int window_width()
renvoie la largeur de la fenetre de l'application.
Definition window.cpp:23
float delta_time()
renvoie le temps ecoule depuis la derniere frame, en millisecondes.
Definition window.cpp:148
float global_time()
renvoie le temps ecoule depuis le lancement de l'application, en millisecondes.
Definition window.cpp:139
int screenshot(const char *filename)
enregistre le contenu de la fenetre dans un fichier. doit etre de type .png / .bmp
Definition texture.cpp:178