11.2.9 La fonction pour le mode à la première personne

Cette fonction est un tout petit peut plus compliqué que les autre (en même temps ce n'est pas dur) :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void SimpleCameraGl3::modeFPS(float mouseX, float mouseY, float midWidth, float midHeight, float coefSensibiliteX, float coefSensibiliteY, float phiMin, float phiMax){
	p_theta = ((float)(mouseX - midWidth))*coefSensibiliteX;
	p_phi = ((float)(mouseY - midHeight))*coefSensibiliteY;
	if(p_phi < phiMin){
		p_phi = phiMin;
		SDL_WarpMouseInWindow(p_windowId, midWidth + p_theta/coefSensibiliteX , midHeight + phiMin/coefSensibiliteY);
	}
	if(p_phi > phiMax){
		p_phi = phiMax;
		SDL_WarpMouseInWindow(p_windowId, midWidth + p_theta/coefSensibiliteX , midHeight + phiMax/coefSensibiliteY);
	}
	
	if(p_theta < -180){
		p_theta = 180 + (p_theta + 180);
		SDL_WarpMouseInWindow(p_windowId, midWidth + p_theta/coefSensibiliteX , midHeight + p_phi/coefSensibiliteY);
	}
	if(p_theta > 180){
		p_theta = -180 + (p_theta - 180);
		SDL_WarpMouseInWindow(p_windowId, midWidth + p_theta/coefSensibiliteX , midHeight + p_phi/coefSensibiliteY);
	}
// 	en fait on a fait les calculs à l'envers alors on change theta
	p_theta = -p_theta;
}

En fait, on compte le nombre de pixels qu'a fait la souris et on dit que c'est un angle.

La variable p_phi à un max et un min car c'est l'inclinaison de la caméra (on ne peut jamais regarder pile au plafond, en tout cas sans se pencher en arrière). Tandis que p_theta n'a aucune contrainte car elle représente la rotation de la caméra.