openscenegraph
FirstPersonManipulator
Go to the documentation of this file.
1/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2010 Robert Osfield
2 *
3 * This library is open source and may be redistributed and/or modified under
4 * the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
5 * (at your option) any later version. The full license is in LICENSE file
6 * included with this distribution, and on the openscenegraph.org website.
7 *
8 * This library is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * OpenSceneGraph Public License for more details.
12 *
13 * FirstPersonManipulator code Copyright (C) 2010 PCJohn (Jan Peciva)
14 * while some pieces of code were taken from OSG.
15 * Thanks to company Cadwork (www.cadwork.ch) and
16 * Brno University of Technology (www.fit.vutbr.cz) for open-sourcing this work.
17*/
18
19#ifndef OSGGA_FIRST_PERSON_MANIPULATOR
20#define OSGGA_FIRST_PERSON_MANIPULATOR 1
21
23
24
25namespace osgGA {
26
27
31{
33
34 public:
35
36 FirstPersonManipulator( int flags = DEFAULT_SETTINGS );
38 const osg::CopyOp& copyOp = osg::CopyOp::SHALLOW_COPY );
39
41
42 virtual void setByMatrix( const osg::Matrixd& matrix );
43 virtual void setByInverseMatrix( const osg::Matrixd& matrix );
44 virtual osg::Matrixd getMatrix() const;
46
47 virtual void setTransformation( const osg::Vec3d& eye, const osg::Quat& rotation );
48 virtual void setTransformation( const osg::Vec3d& eye, const osg::Vec3d& center, const osg::Vec3d& up );
49 virtual void getTransformation( osg::Vec3d& eye, osg::Quat& rotation ) const;
50 virtual void getTransformation( osg::Vec3d& eye, osg::Vec3d& center, osg::Vec3d& up ) const;
51
52 virtual void setVelocity( const double& velocity );
53 inline double getVelocity() const;
54 virtual void setAcceleration( const double& acceleration, bool relativeToModelSize = false );
55 double getAcceleration( bool *relativeToModelSize = NULL ) const;
56 virtual void setMaxVelocity( const double& maxVelocity, bool relativeToModelSize = false );
57 double getMaxVelocity( bool *relativeToModelSize = NULL ) const;
58
59 virtual void setWheelMovement( const double& wheelMovement, bool relativeToModelSize = false );
60 double getWheelMovement( bool *relativeToModelSize = NULL ) const;
61
62 virtual void home( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& us );
63 virtual void home( double );
64
65 virtual void init( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& us );
66
67 protected:
68
70
71 virtual bool performMovementLeftMouseButton( const double eventTimeDelta, const double dx, const double dy );
72 virtual bool performMouseDeltaMovement( const float dx, const float dy );
73 virtual void applyAnimationStep( const double currentProgress, const double prevProgress );
75
76 void moveForward( const double distance );
77 void moveForward( const osg::Quat& rotation, const double distance );
78 void moveRight( const double distance );
79 void moveUp( const double distance );
80
83 double _velocity;
84
91
93 public:
96 void start( const osg::Quat& startRotation, const osg::Quat& targetRotation, const double startTime );
97 };
98 virtual void allocAnimationData() { _animationData = new FirstPersonAnimationData(); }
99};
100
101
102//
103// inline methods
104//
105
108
109
110}
111
112#endif /* OSGGA_FIRST_PERSON_MANIPULATOR */
void start(const osg::Quat &startRotation, const osg::Quat &targetRotation, const double startTime)
osg::Quat _startRot
Definition FirstPersonManipulator:94
osg::Quat _targetRot
Definition FirstPersonManipulator:95
Definition FirstPersonManipulator:31
virtual void allocAnimationData()
Definition FirstPersonManipulator:98
double getAcceleration(bool *relativeToModelSize=NULL) const
virtual void init(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &us)
void moveUp(const double distance)
virtual osg::Matrixd getInverseMatrix() const
static int _wheelMovementFlagIndex
Definition FirstPersonManipulator:90
double _maxVelocity
Definition FirstPersonManipulator:87
virtual void home(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &us)
static int _maxVelocityFlagIndex
Definition FirstPersonManipulator:88
double _velocity
Definition FirstPersonManipulator:83
osg::Vec3d _eye
Definition FirstPersonManipulator:81
virtual void setTransformation(const osg::Vec3d &eye, const osg::Vec3d &center, const osg::Vec3d &up)
virtual void setAcceleration(const double &acceleration, bool relativeToModelSize=false)
virtual void getTransformation(osg::Vec3d &eye, osg::Quat &rotation) const
virtual void setWheelMovement(const double &wheelMovement, bool relativeToModelSize=false)
osg::Quat _rotation
Definition FirstPersonManipulator:82
static int _accelerationFlagIndex
Definition FirstPersonManipulator:86
void moveForward(const osg::Quat &rotation, const double distance)
double getVelocity() const
Returns velocity.
Definition FirstPersonManipulator:107
META_Object(osgGA, FirstPersonManipulator)
virtual osg::Matrixd getMatrix() const
virtual void setTransformation(const osg::Vec3d &eye, const osg::Quat &rotation)
virtual void setByInverseMatrix(const osg::Matrixd &matrix)
void moveForward(const double distance)
double getMaxVelocity(bool *relativeToModelSize=NULL) const
double _acceleration
Definition FirstPersonManipulator:85
virtual bool startAnimationByMousePointerIntersection(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &us)
virtual void getTransformation(osg::Vec3d &eye, osg::Vec3d &center, osg::Vec3d &up) const
virtual void home(double)
virtual bool performMovementLeftMouseButton(const double eventTimeDelta, const double dx, const double dy)
virtual void setMaxVelocity(const double &maxVelocity, bool relativeToModelSize=false)
FirstPersonManipulator(int flags=DEFAULT_SETTINGS)
virtual bool handleMouseWheel(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &us)
virtual void setVelocity(const double &velocity)
void moveRight(const double distance)
virtual void setByMatrix(const osg::Matrixd &matrix)
virtual bool performMouseDeltaMovement(const float dx, const float dy)
virtual void applyAnimationStep(const double currentProgress, const double prevProgress)
double _wheelMovement
Definition FirstPersonManipulator:89
FirstPersonManipulator(const FirstPersonManipulator &fpm, const osg::CopyOp &copyOp=osg::CopyOp::SHALLOW_COPY)
double getWheelMovement(bool *relativeToModelSize=NULL) const
Definition GUIActionAdapter:62
Definition GUIEventAdapter:82
Definition StandardManipulator:149
Definition StandardManipulator:31
Definition CopyOp:41
@ SHALLOW_COPY
Definition CopyOp:47
Definition Matrixd:27
Definition Quat:30
Definition Vec3d:30
Definition Callback:21
#define OSGGA_EXPORT
Definition osgGA/Export:40
#define NULL
Definition osg/Export:55