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