paella/Code/include/SFMLTools/FreeFlyCamera.hpp

95 lines
3.6 KiB
C++

////////////////////////////////////////////////////////////////////////////////
//
// Paella
// Copyright (C) 2015 - Thomas FORGIONE, Emilie JALRAS, Marion LENFANT, Thierry MALON, Amandine PAILLOUX
// Authors :
// Thomas FORGIONE
// Emilie JALRAS
// Marion LENFANT
// Thierry MALON
// Amandine PAILLOUX
//
// This file is part of the project Paella
// This software is provided 'as-is', without any express or implied warranty.
// In no event will the authors be held liable for any damages arising from the use of this software.
//
// Permission is granted to anyone to use this software for any purpose,
// including commercial applications, and to alter it and redistribute it freely,
// subject to the following restrictions:
//
// 1. The origin of this software must not be misrepresented;
// you must not claim that you wrote the original software.
// If you use this software in a product, an acknowledgment
// in the product documentation would be appreciated but is not required.
//
// 2. Altered source versions must be plainly marked as such,
// and must not be misrepresented as being the original software.
//
// 3. This notice may not be removed or altered from any source distribution.
////////////////////////////////////////////////////////////////////////////////
#ifndef FREE_FLY_CAMERA_HPP
#define FREE_FLY_CAMERA_HPP
#include <SFML/System/Vector3.hpp>
#include <SFML/Window/Event.hpp>
#include <SFMLTools/Camera.hpp>
namespace sft
{
////////////////////////////////////////////////////////////
/// \ingroup sfmltools
/// \brief Camera controlled by mouse and keyboard
///
/// Only azerty keyboards are supported for the moment
///////////////////////////////////////////////////////////
class FreeFlyCamera : public Camera
{
public:
///////////////////////////////////////////////////
/// \brief Default constructor
///////////////////////////////////////////////////
FreeFlyCamera();
///////////////////////////////////////////////////
/// \brief calls gluLookAt with the good parameters
///////////////////////////////////////////////////
void look() const;
///////////////////////////////////////////////////
/// \brief computes the next step of the camera
/// \pre mouse must be in the middle of the screen
/// before the movement of the mouse
/// \param width width of the window
/// \param height height of the window
///////////////////////////////////////////////////
void nextStep(int width, int height);
private:
double speed; ///< speed of the camera
double sensitivity; ///< sensitivity of the mouse
sf::Vector3<double> position; ///< position of the center of the camera
sf::Vector3<double> target; ///< a point that the camera is staring at
sf::Vector3<double> forward; ///< a vector from the center to the target
sf::Vector3<double> left; ///< a vector orthogonal to forward
double theta; ///< theta angle from spheric coordinates
double phi; ///< phi angle from spheric coordinates
////////////////////////////////////////////////////
/// \brief computes the vector from angles
///
/// Computes the value of position, target, forward and left
/// using only theta and phi
////////////////////////////////////////////////////
void vectorsFromAngles();
};
} // namespace sft
#endif // FREE_FLY_CAMERA_HPP