diff options
Diffstat (limited to 'modules/render/render_osg_camera_manipulator.h')
-rw-r--r-- | modules/render/render_osg_camera_manipulator.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/modules/render/render_osg_camera_manipulator.h b/modules/render/render_osg_camera_manipulator.h new file mode 100644 index 0000000..0653039 --- /dev/null +++ b/modules/render/render_osg_camera_manipulator.h @@ -0,0 +1,123 @@ +/* + * render_osg_camera_manipulator.h - supports 3D interactive manipulators + * + * Copyright (c) 2018 Intel Corporation + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Author: Zong Wei <wei.zong@intel.com> + */ + +#ifndef XCAM_OSG_CAMERA_MANIPULATOR_H +#define XCAM_OSG_CAMERA_MANIPULATOR_H + +#include <osgGA/StandardManipulator> + +namespace XCam { + +class RenderOsgCameraManipulator + : public osgGA::StandardManipulator +{ +public: + + explicit RenderOsgCameraManipulator (); + + virtual ~RenderOsgCameraManipulator (); + + virtual void setByMatrix (const osg::Matrixd &matrix) + { + (void)matrix; + } + + virtual void setByInverseMatrix (const osg::Matrixd &matrix) + { + (void)matrix; + } + + virtual osg::Matrixd getMatrix () const; + + virtual osg::Matrixd getInverseMatrix () const; + + virtual void home (double currentTime); + + virtual void setTransformation (const osg::Vec3d &eye, const osg::Quat &rotation) + { + (void)eye; + (void)rotation; + } + + virtual void setTransformation (const osg::Vec3d &eye, const osg::Vec3d ¢er, const osg::Vec3d &up) + { + (void)eye; + (void)center; + (void)up; + } + + virtual void getTransformation (osg::Vec3d &eye, osg::Quat &rotation) const + { + (void)eye; + (void)rotation; + } + + virtual void getTransformation (osg::Vec3d &eye, osg::Vec3d ¢er, osg::Vec3d &up) const + { + (void)eye; + (void)center; + (void)up; + } + + void setInitialValues (float angle, float length, float width, float height) + { + mAngle = angle; + mLength = length; + mWidth = width; + mHeight = height; + mMinHeight = height / 2.0f; + + mUp = osg::Vec3d(0.0f, 0.0f, 1.0f); + } + +private: + RenderOsgCameraManipulator (RenderOsgCameraManipulator const &other); + + RenderOsgCameraManipulator &operator= (RenderOsgCameraManipulator const &other); + + virtual bool handleKeyDown (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &us); + + virtual bool handleMouseWheel (const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &us); + + virtual bool performMovementLeftMouseButton (const double eventTimeDelta, const double dx, const double dy); + + void rotate (float deltaAngle); + + void modifyHeight (float delta); + + void getEyePosition (osg::Vec3d &eye) const; + + void getLookAtPosition (osg::Vec3d ¢er) const; + + float mAngle; + float mLookAtOffset; + float mMaxLookAtOffset; + float mLength; + float mWidth; + float mHeight; + float mMaxHeight; + float mMinHeight; + float mEyePosScale; + osg::Vec3d mUp; +}; + +} // namespace XCam + +#endif // XCAM_OSG_CAMERA_MANIPULATOR_H |