5.2 Les matrices

Maintenant que le FBO est créé, nous pouvons passer à la création du second couple de matrices, celles qui seront dédiées à la première passe. Ces matrices porteront quasiment le même nom que celles que nous avons l'habitude de manipuler :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void SceneOpenGL::bouclePrincipale(){
	// Variables
	unsigned int frameRate (1000 / 50);
	Uint32 debutBoucle(0), finBoucle(0), tempsEcoule(0);

	// Frame Buffer
	FrameBuffer frameBuffer(512, 512);
	frameBuffer.charger();

	// Matrices (première passe)
	mat4 projectionFBO, modelviewFBO;

	....
}

L'initialisation de ces matrices sera elle-aussi quasiment identique. La seule chose qui va différer dans cette initialisation c'est le rapport des pixels pour la matrice de projection (le ratio).

De base, celui-ci est relatif à la taille de votre fenêtre, tout dépend de ce que vous avez mis avant. Cependant le rendu de la première passe s'effectue dans le FBO, le rapport doit donc est relatif à la taille de ce dernier. Vu que nous avons spécifié une taille de 512x512 pixels, le rapport sera donc de 512 / 512. Nous utiliserons les getters sur la largeur et la hauteur du FBO pour avoir accès à ces valeurs, ce qui sera utile en cas de changement de ces dimensions :

1
2
3
4
5
6
7
// Matrices (première passe)
mat4 projectionFBO;
mat4 modelviewFBO;

// Initialisation
projectionFBO = perspective(70.0, (double)frameBuffer.getLargeur() / frameBuffer.getHauteur(), 1.0, 100.0);
modelviewFBO = mat4(1.0);

Si vous vous posez la question, sachez que l'autre couple de matrices n'a pas besoin d'être modifié, elles sont très bien comme ça.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void SceneOpenGL::bouclePrincipale(){
	// Variables
	unsigned int frameRate (1000 / 50);
	Uint32 debutBoucle(0), finBoucle(0), tempsEcoule(0);

	// Frame Buffer
	FrameBuffer frameBuffer(512, 512);
	frameBuffer.charger();

	// Matrices (première passe)
	mat4 projectionFBO;
	mat4 modelviewFBO;
	projectionFBO = perspective(70.0, (double)frameBuffer.getLargeur() / frameBuffer.getHauteur(), 1.0, 100.0);
	modelviewFBO = mat4(1.0);

	// Matrices (seconde passe)
	mat4 projection;
	mat4 modelview;
	projection = perspective(70.0, (double) m_largeurFenetre / m_hauteurFenetre, 1.0, 100.0);
	modelview = mat4(1.0);

	// Caméra
	....
}