GEL
2
GEL is a library for Geometry and Linear Algebra
|
00001 #ifndef __GLGRAPHICS_GLVIEWCONTROLLER_H__ 00002 #define __GLGRAPHICS_GLVIEWCONTROLLER_H__ 00003 00004 #include <fstream> 00005 #include "QuatTrackBall.h" 00006 00007 namespace GLGraphics 00008 { 00015 class GLViewController 00016 { 00017 float FOV_DEG; 00018 int WINX, WINY; 00019 float znear, zfar; 00020 float aspect; 00021 bool button_down; 00022 TrackBallAction last_action; 00023 bool spin; 00024 00025 QuatTrackBall ball; 00026 00027 00028 public: 00029 00032 GLViewController(int _WINX, int _WINY, 00033 const CGLA::Vec3f& _centre, float _rad); 00034 00036 void grab_ball(TrackBallAction action, const CGLA::Vec2i& pos); 00037 00039 void roll_ball(const CGLA::Vec2i& pos); 00040 00042 void release_ball(); 00043 00045 bool try_spin(); 00046 00048 void set_gl_modelview(); 00049 00051 void reset_projection(); 00052 00054 void reshape(int W, int H); 00055 00057 void set_near_and_far(); 00058 00060 void set_centre(const CGLA::Vec3f& c) 00061 { 00062 ball.set_centre(c); 00063 } 00064 void set_rotation(const CGLA::Quatf& qrot) 00065 { 00066 ball.set_rotation(qrot); 00067 } 00068 00070 void set_eye_dist(float rad) 00071 { 00072 ball.set_eye_dist(rad); 00073 set_near_and_far(); 00074 } 00075 00077 float get_eye_dist() const 00078 { 00079 return ball.get_eye_dist(); 00080 } 00081 00083 void get_view_param(CGLA::Vec3f& e, CGLA::Vec3f& c, CGLA::Vec3f& u) const 00084 { 00085 ball.get_view_param(e,c,u); 00086 } 00087 00089 bool load(std::ifstream&); 00090 00092 bool save(std::ofstream&) const; 00093 }; 00094 00095 } 00096 00097 #endif