void CameraFPS::onEvent(Input const& input) { //évênements souris if(input.mouseMove()) orienter(input.getXRel(), input.getYRel());//changement d'orientation //évênements claviers glm::vec3 deplacement(0.0f,0.0f,0.0f); float zoom = 0.0f; if(input.getKey(SDL_SCANCODE_W))//Z pour un clavier francophone deplacement += m_vitesse * m_orientation; if(input.getKey(SDL_SCANCODE_S)) deplacement -= m_vitesse * m_orientation; if(input.getKey(SDL_SCANCODE_A))//Q pour un clavier francophone deplacement += m_vitesse * m_droite; if(input.getKey(SDL_SCANCODE_D)) deplacement -= m_vitesse * m_droite; if(input.getKey(SDL_SCANCODE_KP_PLUS)) // touche + du pavé numérique pour zoomer zoom -= 1.0f; if(input.getKey(SDL_SCANCODE_KP_MINUS)) // touche - du pavé numérique pour dezoomer zoom += 1.0f; if(zoom!=0.0f) zoomer(zoom); if(deplacement != glm::vec3(0.0f,0.0f,0.0f)) deplacer(deplacement); // déplacement de la camera m_cible = m_position + m_orientation; if(deplacement != glm::vec3(0.0f,0.0f,0.0f) || input.mouseMove()) lookAt(); }
void Camera::deplacer(Input const &input) { // Gestion de l'orientation if(input.mouvementSouris()) orienter(input.getXRel(), input.getYRel()); // Avancée de la caméra if(input.getTouche(SDL_SCANCODE_W)) { m_position = m_position + m_orientation * m_vitesse; m_pointCible = m_position + m_orientation; } // Recul de la caméra if(input.getTouche(SDL_SCANCODE_S)) { m_position = m_position - m_orientation * m_vitesse; m_pointCible = m_position + m_orientation; } // Déplacement vers la gauche if(input.getTouche(SDL_SCANCODE_A)) { m_position = m_position + m_deplacementLateral * m_vitesse; m_pointCible = m_position + m_orientation; } // Déplacement vers la droite if(input.getTouche(SDL_SCANCODE_D)) { m_position = m_position - m_deplacementLateral * m_vitesse; m_pointCible = m_position + m_orientation; } }
void CameraFlightSimulator::onEvent(Input const& input) { if(m_active) { if(input.getKey(SDL_SCANCODE_UP))//controle de la vitesse { m_vitesse += 0.1f; if(m_vitesse > 100.0f) m_vitesse = 100.0f; }else if(input.getKey(SDL_SCANCODE_DOWN)) { m_vitesse -= 0.1f; if(m_vitesse < 0.0f) m_vitesse = 0.0f; } } if(m_vitesse > 0.0f) { glm::vec3 anglesEuler = glm::vec3(0.0, 0.0, 0.0);//angles d'Euler -> controle des rotations du vaisseau if(m_active) { if(input.getKey(SDL_SCANCODE_W))// -> tonneau anglesEuler.x += m_sensibilite; else if(input.getKey(SDL_SCANCODE_S)) anglesEuler.x -= m_sensibilite; if(input.getKey(SDL_SCANCODE_Q))// -> looping anglesEuler.y += m_sensibilite; else if(input.getKey(SDL_SCANCODE_E)) anglesEuler.y -= m_sensibilite; if(input.getKey(SDL_SCANCODE_A))// -> lacet anglesEuler.z -= m_sensibilite; else if(input.getKey(SDL_SCANCODE_D)) anglesEuler.z += m_sensibilite; } //calcul de la matrice de rotation -> calculées à l'aide des angles d'Euler glm::quat yaw_pitch_roll; anglesEuler *= M_PI / 180.0; yaw_pitch_roll = glm::quat(anglesEuler); m_rotationMatrix *= glm::mat4_cast(yaw_pitch_roll); orienter(); deplacer(m_orientation * m_vitesse); lookAt(); } }