8.2.2 Écrire camera.h

Le fichier commence, comme on peut s'en douter, comme tout les autres :

1
2
3
4
5
6
7
8
#ifndef CAMERA_H
#define CAMERA_H

#include <GL/gl.h>
#include <GL/glu.h>
#include <math.h>

#include "vecteur.h"

Bien sur nous n'allons pas réécrire une classe Vecteur mais utiliser celle que je vous fournir (qui est un peu plus complète que celle que l'on a vu dans ce cour).

#include : très utile si vous avez besoin de fonctions mathématiques comme sqrt, sin, cos, tan, acos, asin, atan...

Les fonctions publiques

La déclaration de classe avec ses constructeurs et destructeurs :

1
2
3
4
5
6
class Camera{
	public:
		Camera();     //constructeur par défaut de la caméra
		Camera(const Vecteur & position , double theta, double phi, double rouli);
		Camera(const Camera & camera);
		virtual ~Camera();

Nous allons implémenter deux fonctions de prise de vue :

  • une pour regarder le long de la visée
  • une pour regarder un objet précis

Ce qui donne :

1
2
void see();
		void see(Vecteur object);

Les seteurs (tout ce qu'il faut pour initialiser après coup la Camera) :

1
2
3
4
5
6
void setAll(const Vecteur & position, double theta, double phi, double rouli);
		void setPosition(const Vecteur & position);
		void setAngles(double theta, double phi,double rouli);
		void setTheta(double theta);
		void setPhi(double phi);
		void setRouli(double rouli);

Une fonction pour pouvoir faire bouger la Camera en lui ajoutant un Vecteur de déplacement :

1
void move(const Vecteur & dm);

Des fonctions pour se déplacer le long des axes définit pas les Vecteurs de la Camera :

1
2
3
void moveVisee(double dl);
		void moveUp(double dl);
		void moveLeft(double dl);

J'ai mis moveLeft car cette fonction viendra d'un Vecteur pointant vers la gauche de la Camera dont nous aurons besoin pour construire les autres.

Une fonction pour pouvoir changer la rotation de la Camera quand on veut :

1
void rotation(double dTheta, double dPhi,double dRouli);

Les fonction qui permettent de faire tourner la Camera sur elle-même :

1
2
void Camera::rotationLeft(double dTheta);
		void Camera::rotationRight(double dTheta);

Les geteurs (toutes les fonctions qui renvoient des attributs de la classe) :

1
2
3
4
5
6
Vecteur getPosition() const;
		Vecteur getVisee() const;
		Vecteur getUp() const;
		double getTheta() const;
		double getPhi() const;
		double getRouli() const;

Définition de l'opérateur = :

1
Camera & operator = (const Camera & camera);

Les fonctions privées

La fonction d'initialisation :

1
void initialisation(const Vecteur & position, double theta, double phi, double rouli);

La fonction de copie :

1
void copyCamera(const Camera & camera);

La fonction qui met à jour les Vecteurs de la Camera :

1
void update();

Les attributs de la Camera :

1
2
3
4
5
6
7
8
9
Vecteur p_position;
		Vecteur p_visee;
		Vecteur p_up;
		double p_theta;
		double p_phi;
		double p_rouli;
};

#endif

Un petit résumé

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#ifndef CAMERA_H
#define CAMERA_H

#include "vecteur.h"
#include <GL/gl.h>
#include <GL/glu.h>
#include <math.h>

/** @brief Classe qui se comporte comme une caméra, elle indique à OpenGl comment faire son affichage*/

class Camera{
	public:
		//constructeur par défaut de la caméra
		Camera();
		Camera(const Vecteur & position , double theta, double phi, double rouli);
		Camera(const Camera & camera);
		//destructeur de la Caméra
		virtual ~Camera();
		//fonction qui met en route la caméra et dit a OpenGl où il faut regarder
		void see();
		
		void see(const Vecteur & object);           //regarde à la position object
		
		void setAll(const Vecteur & position, double theta, double phi, double rouli);
		void setPosition(const Vecteur & position);
		void setAngles(double theta, double phi,double rouli);
		void setTheta(double theta);
		void setPhi(double phi);
		void setRouli(double rouli);
		
		void move(const Vecteur & dm);        //change la position de la caméra de dm
		void moveVisee(double dl);
		void moveUp(double dl);
		void moveLeft(double dl);
		
		void rotationLeft(double dTheta);
		void rotationRight(double dTheta);
		
		//change la rotation de la caméra de d
		void rotation(double dTheta, double dPhi,double dRouli);
		
		Vecteur getPosition() const;
		Vecteur getVisee() const;
		Vecteur getUp() const;
		Vecteur getGauche() const;
		double getTheta() const;
		double getPhi() const;
		double getRouli() const;
		
		//operateur =
		Camera & operator = (const Camera & camera);
		
	private:
		//copie la caméra
		void copyCamera(const Camera & camera);              //copie la caméra
		//Fonction qui initialise la caméra
		void initialisation(const Vecteur & position, double theta, double phi, double rouli);
		void update();                                     //met à jour les Vecteurs de la caméra
		///position de la caméra
		Vecteur p_position;             //position de la caméra
		///visée de la caméra
		Vecteur p_visee;                  //visée de la caméra
		///Vecteur qui définit la verticale
		Vecteur p_up;                   //verticale
		///angle d'orientation de la caméra (plan xOy)
		double p_theta;                 //angle d'orientation de la caméra (plan xOy)
		///angle d'orientation de la caméra (plan xOz)
		double p_phi;                   //angle d'orientation de la caméra (plan xOz)
		///angle d'orientation de la caméra (plan yOz)
		double p_rouli;                 //angle d'orientation de la caméra (plan yOz)
		///Vecteur qui sert pour faire du calcul
		Vecteur p_planGauche;
};

#endif

Le fichier camera.h est fait.