Implémentons le tout dans apptest.cpp :
Les fonctions publiques
1
2
3
4
5
6
7
8
9
10
11
12
|
#include "apptest.h"
AppTest::AppTest(double width, double height, double near, doublefar, double angle, const std::string & titre, const std::string & icon)
:SDLOpenGl_app(width, height, near, far, angle, titre, icon)
{
this->init();
}
AppTest::~AppTest(){
gluDeleteQuadric(p_params);
}
|
On appel le constructeur parent comme d'habitude, et on oublie pas d'appeler init pour initialiser le GLUquadric* ni de le détruire dans le destructeur.
Ensuite l'affichage :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
void AppTest::draw(){
glBegin(GL_QUADS);
glColor3ub(255, 0, 0);
glVertex3d(10.0, 10.0, 0.0);
glVertex3d(10.0, -10.0, 0.0);
glVertex3d(-10.0, -10.0, 0.0);
glVertex3d(-10.0, 10.0, 0.0);
glEnd();
glColor3ub(255, 255, 255);
gluSphere(p_params, 1.0, 20, 20);
glTranslated(5.0, 5.0, 5.0);
glColor3ub(0, 0, 255);
gluSphere(p_params, 1.0, 20, 20);
}
|
La fonction de calcul qui va aussi gérer les touches :
1
2
3
4
5
6
7
8
9
10
|
void AppTest::update(float dt){
if(this->keyEventMade("forward")){camera.moveVisee(dt*VITESSE_CAMERA);}
if(this->keyEventMade("backward")){camera.moveVisee(-dt*VITESSE_CAMERA);}
if(this->keyEventMade("right")){camera.moveLeft(-dt*VITESSE_CAMERA);}
if(this->keyEventMade("left")){camera.moveLeft(dt*VITESSE_CAMERA);}
if(this->keyEventMade("turnUp")){this->rotationCamera(0, -dt*VITESSE_ROTATION_CAMERA, 0);}
if(this->keyEventMade("turnDown")){this->rotationCamera(0, dt*VITESSE_ROTATION_CAMERA, 0);}
if(this->keyEventMade("turnRight")){camera.rotationRight(dt*VITESSE_ROTATION_CAMERA);}
if(this->keyEventMade("turnLeft")){camera.rotationLeft(dt*VITESSE_ROTATION_CAMERA);}
}
|
On gère toutes les touches pour bouger la Camera.
Et enfin nous initialisons le tout :
1
2
3
4
5
6
7
8
9
10
11
|
void AppTest::init(){
this->addKeyEvent("forward", SDLK_z, false);
this->addKeyEvent("backward", SDLK_s, false);
this->addKeyEvent("right", SDLK_d, false);
this->addKeyEvent("left", SDLK_q, false);
this->addKeyEvent("turnUp", SDLK_UP, false);
this->addKeyEvent("turnDown", SDLK_DOWN, false);
this->addKeyEvent("turnRight", SDLK_RIGHT, false);
this->addKeyEvent("turnLeft", SDLK_LEFT, false);
p_params = gluNewQuadric();
}
|
On pourrait rajouter d'autres touches mais c'est suffisant pour s'amuser avec les fonctions d'affichage de OpenGl.
Pour résumer :
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
|
#include "apptest.h"
const double VITESSE_CAMERA(2.0);
const double VITESSE_ROTATION_CAMERA(0.1);
AppTest::AppTest(double width, double height, double near, double far, double angle, const std::string & titre, const std::string & icon)
:SDLOpenGl_app(width, height, near, far, angle, titre, icon)
{
this->init();
}
AppTest::~AppTest(){
gluDeleteQuadric(p_params);
}
void AppTest::draw(){
glBegin(GL_QUADS);
glColor3ub(255, 0, 0);
glVertex3d(10.0, 10.0, 0.0);
glVertex3d(10.0, -10.0, 0.0);
glVertex3d(-10.0, -10.0, 0.0);
glVertex3d(-10.0, 10.0, 0.0);
glEnd();
glColor3ub(255, 255, 255);
gluSphere(p_params, 1.0, 20, 20);
glTranslated(5.0, 5.0, 5.0);
glColor3ub(0, 0, 255);
gluSphere(p_params, 1.0, 20, 20);
}
void AppTest::update(float dt){
if(this->keyEventMade("forward")){camera.moveVisee(dt*VITESSE_CAMERA);}
if(this->keyEventMade("backward")){camera.moveVisee(-dt*VITESSE_CAMERA);}
if(this->keyEventMade("right")){camera.moveLeft(-dt*VITESSE_CAMERA);}
if(this->keyEventMade("left")){camera.moveLeft(dt*VITESSE_CAMERA);}
if(this->keyEventMade("turnUp")){this->rotationCamera(0, -dt*VITESSE_ROTATION_CAMERA, 0);}
if(this->keyEventMade("turnDown")){this->rotationCamera(0, dt*VITESSE_ROTATION_CAMERA, 0);}
if(this->keyEventMade("turnRight")){camera.rotationRight(dt*VITESSE_ROTATION_CAMERA);}
if(this->keyEventMade("turnLeft")){camera.rotationLeft(dt*VITESSE_ROTATION_CAMERA);}
}
void AppTest::init(){
this->addKeyEvent("forward", SDLK_z, false);
this->addKeyEvent("backward", SDLK_s, false);
this->addKeyEvent("right", SDLK_d, false);
this->addKeyEvent("left", SDLK_q, false);
this->addKeyEvent("turnUp", SDLK_UP, false);
this->addKeyEvent("turnDown", SDLK_DOWN, false);
this->addKeyEvent("turnRight", SDLK_RIGHT, false);
this->addKeyEvent("turnLeft", SDLK_LEFT, false);
p_params = gluNewQuadric();
}
|
On va finir par arriver au bout.
|