00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifndef OGRE_TOOLS_ORBIT_CAMERA_H_
00031 #define OGRE_TOOLS_ORBIT_CAMERA_H_
00032
00033 #include "camera_base.h"
00034 #include <OGRE/OgreVector3.h>
00035
00036 namespace Ogre
00037 {
00038 class Camera;
00039 class SceneNode;
00040 class SceneManager;
00041 }
00042
00043 namespace ogre_tools
00044 {
00045
00046 class Shape;
00047
00062 class OrbitCamera : public CameraBase
00063 {
00064 public:
00065 OrbitCamera( Ogre::SceneManager* scene_manager );
00066 virtual ~OrbitCamera();
00067
00072 void zoom( float amount );
00077 void setFocalPoint( const Ogre::Vector3& focal_point );
00078
00079 float getPitch() { return pitch_; }
00080 float getYaw() { return yaw_; }
00081 float getDistance() { return distance_; }
00082 const Ogre::Vector3& getFocalPoint() { return focal_point_; }
00083
00084 virtual void setFrom( CameraBase* camera );
00085 virtual void yaw( float angle );
00086 virtual void pitch( float angle );
00087 virtual void roll( float angle );
00088 virtual void setOrientation( float x, float y, float z, float w );
00089 virtual void setPosition( float x, float y, float z );
00090 virtual void move( float x, float y, float z );
00091
00092 virtual Ogre::Vector3 getPosition();
00093 virtual Ogre::Quaternion getOrientation();
00094
00095 virtual void lookAt( const Ogre::Vector3& point );
00096
00097 virtual void mouseLeftDrag( int diff_x, int diff_y, bool ctrl, bool alt, bool shift );
00098 virtual void mouseMiddleDrag( int diff_x, int diff_y, bool ctrl, bool alt, bool shift );
00099 virtual void mouseRightDrag( int diff_x, int diff_y, bool ctrl, bool alt, bool shift );
00100 virtual void scrollWheel( int diff, bool ctrl, bool alt, bool shift );
00101
00105 virtual void update();
00106
00107 virtual void mouseLeftDown( int x, int y );
00108 virtual void mouseMiddleDown( int x, int y );
00109 virtual void mouseRightDown( int x, int y );
00110 virtual void mouseLeftUp( int x, int y );
00111 virtual void mouseMiddleUp( int x, int y );
00112 virtual void mouseRightUp( int x, int y );
00113
00114 virtual void fromString(const std::string& str);
00115 virtual std::string toString();
00116
00117 private:
00118
00119 Ogre::Vector3 getGlobalFocalPoint();
00120
00125 void calculatePitchYawFromPosition( const Ogre::Vector3& position );
00129 void normalizePitch();
00133 void normalizeYaw();
00134
00135 Ogre::Vector3 focal_point_;
00136 float yaw_;
00137 float pitch_;
00138 float distance_;
00139
00140 Shape* focal_point_object_;
00141 };
00142
00143 }
00144
00145 #endif