From Riccardo Corsi, introduced CameraManipulator::updateCamera() method that allows more Camera properties to be controlled by the CameraManipulator.

This commit is contained in:
Robert Osfield 2012-07-09 17:32:13 +00:00
parent f784884fd1
commit 65ab874143
3 changed files with 8 additions and 3 deletions

View File

@ -87,6 +87,10 @@ class OSGGA_EXPORT CameraManipulator : public GUIEventHandler
/** get the position of the manipulator as a inverse matrix of the manipulator, typically used as a model view matrix.*/
virtual osg::Matrixd getInverseMatrix() const = 0;
/** update the camera for the current frame, typically called by the viewer classes.
Default implementation simply set the camera view matrix. */
virtual void updateCamera(osg::Camera* camera) { camera->setViewMatrix(getInverseMatrix()); }
/** Get the FusionDistanceMode. Used by SceneView for setting up stereo convergence.*/
virtual osgUtil::SceneView::FusionDistanceMode getFusionDistanceMode() const { return osgUtil::SceneView::PROPORTIONAL_TO_SCREEN_DISTANCE; }

View File

@ -1159,7 +1159,8 @@ void CompositeViewer::updateTraversal()
view->setFusionDistance( view->getCameraManipulator()->getFusionDistanceMode(),
view->getCameraManipulator()->getFusionDistanceValue() );
view->getCamera()->setViewMatrix( view->getCameraManipulator()->getInverseMatrix());
view->getCameraManipulator()->updateCamera(view->getCamera());
}
view->updateSlaves();

View File

@ -1038,7 +1038,7 @@ void Viewer::updateTraversal()
setFusionDistance( getCameraManipulator()->getFusionDistanceMode(),
getCameraManipulator()->getFusionDistanceValue() );
_camera->setViewMatrix(_cameraManipulator->getInverseMatrix());
_cameraManipulator->updateCamera(_camera);
}
updateSlaves();