/* 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 { /// 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); /// enable frustum projection /** The frustum projection is used to draw the world */ static void frustum(); /// enable orthographic projection /** The ortographic projetion is used to draw the user interface */ static void ortho(); /// 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 view_next(); /// wtich to previous camera mode static void view_previous(); /// set specified camera mode static void set_mode(Mode newmode); /// resize camera static void resize(int width, int height); /// current frustum front static float frustum_front(); /// current frustum size (height); static float frustum_size(); inline static int width() { return camera_width; } inline static int height() { return camera_height; } private: static math::Vector3f camera_eye; static math::Vector3f camera_target; static math::Axis camera_axis; static Mode camera_mode; static Mode camera_previous_mode; static float camera_aspect; static float camera_frustum_size; static float camera_frustum_front; static int camera_width; static int camera_height; // 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__