gKit2 light
app_camera.cpp
1 
2 #include "texture.h"
3 #include "app_camera.h"
4 
5 AppCamera::AppCamera( const int width, const int height, const int major, const int minor, const int samples )
6  : App(width, height, major, minor, samples), m_camera()
7 {
8  // projection par defaut, adaptee a la fenetre
9  m_camera.projection(window_width(), window_height(), 45);
10 }
11 
12 AppCamera::~AppCamera( ) {}
13 
14 int AppCamera::prerender( )
15 {
16  // recupere les mouvements de la souris
17  int mx, my;
18  unsigned int mb= SDL_GetRelativeMouseState(&mx, &my);
19  int mousex, mousey;
20  SDL_GetMouseState(&mousex, &mousey);
21 
22  // deplace la camera
23  if(mb & SDL_BUTTON(1))
24  m_camera.rotation(mx, my); // tourne autour de l'objet
25  else if(mb & SDL_BUTTON(3))
26  m_camera.translation((float) mx / (float) window_width(), (float) my / (float) window_height()); // deplace le point de rotation
27  else if(mb & SDL_BUTTON(2))
28  m_camera.move(mx); // approche / eloigne l'objet
29 
30  SDL_MouseWheelEvent wheel= wheel_event();
31  if(wheel.y != 0)
32  {
34  m_camera.move(8.f * wheel.y); // approche / eloigne l'objet
35  }
36 
37  const char *orbiter_filename= "app_orbiter.txt";
38  // copy / export / write orbiter
39  if(key_state('c'))
40  {
41  clear_key_state('c');
42  m_camera.write_orbiter(orbiter_filename);
43 
44  }
45  // paste / read orbiter
46  if(key_state('v'))
47  {
48  clear_key_state('v');
49 
50  Orbiter tmp;
51  if(tmp.read_orbiter(orbiter_filename) < 0)
52  // ne pas modifer la camera en cas d'erreur de lecture...
53  tmp= m_camera;
54 
55  m_camera= tmp;
56  }
57 
58  // screenshot
59  if(key_state('s'))
60  {
61  static int calls= 1;
62  clear_key_state('s');
63  screenshot("app", calls++);
64  }
65 
66  // appelle la fonction update() de la classe derivee
67  return update(global_time(), delta_time());
68 }
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, const int samples=0)
constructeur, dimensions de la fenetre et version d'openGL.
Definition: app_camera.cpp:5
classe application.
Definition: app.h:20
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:116
void move(const float z)
rapproche / eloigne la camera du centre.
Definition: orbiter.cpp:33
Transform projection(const int width, const int height, const float fov)
fixe la projection reglee pour une image d'aspect width / height, et une demi ouverture de fov degres...
Definition: orbiter.cpp:47
void translation(const float x, const float y)
deplace le centre / le point observe.
Definition: orbiter.cpp:27
void rotation(const float x, const float y)
change le point de vue / la direction d'observation.
Definition: orbiter.cpp:21
int write_orbiter(const char *filename)
enregistre la position de l'orbiter dans un fichier texte.
Definition: orbiter.cpp:150
int window_height()
renvoie la hauteur de la fenetre de l'application.
Definition: window.cpp:29
void clear_key_state(const SDL_Keycode key)
desactive une touche du clavier.
Definition: window.cpp:48
void clear_wheel_event()
desactive l'evenement.
Definition: window.cpp:116
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:42
SDL_MouseWheelEvent wheel_event()
renvoie le dernier evenement. etat de la molette de la souris / glisser sur le pad.
Definition: window.cpp:112
int window_width()
renvoie la largeur de la fenetre de l'application.
Definition: window.cpp:25
float delta_time()
renvoie le temps ecoule depuis la derniere frame, en millisecondes.
Definition: window.cpp:137
float global_time()
renvoie le temps ecoule depuis le lancement de l'application, en millisecondes.
Definition: window.cpp:128
int screenshot(const char *filename)
enregistre le contenu de la fenetre dans un fichier. doit etre de type .png / .bmp
Definition: texture.cpp:188