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