8.4.2 Écrire apptest.cpp

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();
}

//destructeur
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();
}

//destructeur
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.