/* render/camera.h This file is part of the Osirion project and is distributed under the terms and conditions of the GNU General Public License version 2 */ #ifndef __INCLUDED_RENDER_CAMERA_H__ #define __INCLUDED_RENDER_CAMERA_H__ #include "math/mathlib.h" namespace render { const float frustum_size = 0.5f; const float frustum_front = 1.0f; /// camera functions class Camera { public: /// enum indicating the camera mode enum Mode {Free, Track, Cockpit, Overview}; /// initialize the camera static void init(); /// shutdown the camera static void shutdown(); /// gameworld coordinates of the camera eye static inline const math::Vector3f & eye() { return camera_eye; } /// gameworld coordinates of the camera target static inline const math::Vector3f & target() { return camera_target; } /// gameworld camera axis static inline const math::Axis & axis() { return camera_axis; } /// current camera mode static inline Mode mode() { return camera_mode; } /// current aspect ratio static inline float aspect() { return camera_aspect; } /// reset the current mode static void reset(); /// progress the camera static void frame(float elapsed); /// draw the OpenGL camera transformation static void draw(); /// set target direction static void set_direction(float direction); /// set target pitch static void set_pitch(float pitch); /// switch to next camera mode static void next_mode(); /// set specified camera mode static void set_mode(Mode newmode); /// set camera aspect ratio static void set_aspect(float aspect); private: static math::Vector3f camera_eye; static math::Vector3f camera_target; static math::Axis camera_axis; static Mode camera_mode; static float camera_aspect; // current and target yaw angle in XZ plane, positive is looking left static float direction_current; static float direction_target; static float target_direction; // current and target pitch angle in XY, positive is looking up static float pitch_current; static float pitch_target; static float target_pitch; static float distance; }; } // namespace client #endif // __INCLUDED_RENDER_CAMERA_H__