00001 #ifndef __CameraManipulator__ 00002 #define __CameraManipulator__ 00003 00004 #include <osg/Vec2d> 00005 #include <osg/Vec3d> 00006 #include <osg/Vec4d> 00007 #include <osg/Matrixd> 00008 #include <osg/Camera> 00009 #include "ICameraManipulator.h" 00010 #include "Terrain.h" 00011 #include "SceneManager.h" 00012 00013 class CameraManipulator : public ICameraManipulator { 00014 public: 00015 CameraManipulator(osg::Camera* camera); 00016 00017 double getSpeed(); 00018 void setSpeed(double speed); 00019 00020 osg::Camera* getCamera(); 00021 void setCamera(osg::Camera* camera); 00022 00023 00024 void update(double elapsedTime); 00025 00026 00027 void addTranslation(int direction); 00028 void addTranslation(int direction, double amount); 00029 00030 void dragOnAxis(int direction, double amount); 00031 void addOrientationAngle(int direction, double angle); 00032 void addRotationAngle(int axis, double angle); 00033 00034 void resetMovement(); 00035 void setMounted(bool value); 00036 00037 00038 protected: 00039 Terrain& _terrain; 00040 SceneManager& _sceneManager; 00041 00042 osg::Camera* _camera; 00043 00044 osg::Vec4d _forwardBase, 00045 _leftBase, 00046 _upBase; 00047 00048 osg::Vec4d _forward, 00049 _left, 00050 _up; 00051 00052 osg::Vec4d _xAxis, 00053 _yAxis, 00054 _zAxis; 00055 00056 osg::Vec4d _eyePoint; 00057 00058 osg::Vec4d _direction; 00059 00060 osg::Vec3d _position; 00061 00062 bool _isMounted; 00063 00064 volatile double _pitchAngle, _yawAngle; 00065 volatile double _translateX, _translateY, _translateZ; 00066 volatile double _translateXaxis, _translateYaxis, _translateZaxis; 00067 00068 volatile double _speed; 00069 }; 00070 00071 #endif