GEL  2
GEL is a library for Geometry and Linear Algebra
/Users/jab/Documents/Teaching/02585/GEL2_and_demos/GEL/src/GLGraphics/GLViewController.h
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
 All Classes Namespaces Files Functions Variables Typedefs Enumerations