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(); 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 :
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:
Camera();
Camera(const Vecteur & position , double theta, double phi, double rouli);
Camera(const Camera & camera);
virtual ~Camera();
void see();
void see(const Vecteur & 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); void moveVisee(double dl);
void moveUp(double dl);
void moveLeft(double dl);
void rotationLeft(double dTheta);
void rotationRight(double dTheta);
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;
Camera & operator = (const Camera & camera);
private:
void copyCamera(const Camera & camera); void initialisation(const Vecteur & position, double theta, double phi, double rouli);
void update(); ///position de la caméra
Vecteur p_position; ///visée de la caméra
Vecteur p_visee; ///Vecteur qui définit la verticale
Vecteur p_up; ///angle d'orientation de la caméra (plan xOy)
double p_theta; ///angle d'orientation de la caméra (plan xOz)
double p_phi; ///angle d'orientation de la caméra (plan yOz)
double p_rouli; ///Vecteur qui sert pour faire du calcul
Vecteur p_planGauche;
};
#endif
|
Le fichier camera.h est fait.
|