Exemplo n.º 1
0
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();
}
Exemplo n.º 2
0
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();
  }
}