Added support for View::setFustionDistance(..)

This commit is contained in:
Robert Osfield
2007-05-17 19:58:57 +00:00
parent 851df77673
commit cf9518f346
5 changed files with 48 additions and 13 deletions

View File

@@ -553,6 +553,10 @@ struct CompositeViewerRenderingOperation : public osg::Operation
// osg::notify(osg::NOTICE)<<"RenderingOperation"<<std::endl;
// pass on the fusion distance settings from the View to the SceneView
osgViewer::View* view = dynamic_cast<osgViewer::View*>(_sceneView->getCamera()->getView());
if (view) _sceneView->setFusionDistance(view->getFusionDistanceMode(), view->getFusionDistanceValue());
_sceneView->inheritCullSettings(*(_sceneView->getCamera()));
_sceneView->cull();
_sceneView->draw();
@@ -1148,7 +1152,13 @@ void CompositeViewer::updateTraversal()
++vitr)
{
View* view = vitr->get();
if (view->getCameraManipulator()) view->getCamera()->setViewMatrix( view->getCameraManipulator()->getInverseMatrix());
if (view->getCameraManipulator())
{
view->setFusionDistance( view->getCameraManipulator()->getFusionDistanceMode(),
view->getCameraManipulator()->getFusionDistanceValue() );
view->getCamera()->setViewMatrix( view->getCameraManipulator()->getInverseMatrix());
}
view->updateSlaves();
}

View File

@@ -20,7 +20,9 @@
using namespace osgViewer;
View::View()
View::View():
_fusionDistanceMode(osgUtil::SceneView::PROPORTIONAL_TO_SCREEN_DISTANCE),
_fusionDistanceValue(1.0f)
{
// osg::notify(osg::NOTICE)<<"Constructing osgViewer::View"<<std::endl;
@@ -33,7 +35,9 @@ View::View()
View::View(const osgViewer::View& view, const osg::CopyOp& copyop):
osg::View(view,copyop),
osgGA::GUIActionAdapter()
osgGA::GUIActionAdapter(),
_fusionDistanceMode(view._fusionDistanceMode),
_fusionDistanceValue(view._fusionDistanceValue)
{
}

View File

@@ -164,6 +164,10 @@ struct ViewerRenderingOperation : public osg::Operation, public ViewerQuerySuppo
// do cull taversal
osg::Timer_t beforeCullTick = osg::Timer::instance()->tick();
// pass on the fusion distance settings from the View to the SceneView
osgViewer::View* view = dynamic_cast<osgViewer::View*>(_sceneView->getCamera()->getView());
if (view) _sceneView->setFusionDistance(view->getFusionDistanceMode(), view->getFusionDistanceValue());
_sceneView->inheritCullSettings(*(_sceneView->getCamera()));
_sceneView->cull();
@@ -305,6 +309,10 @@ struct ViewerDoubleBufferedRenderingOperation : public osg::Operation, public Vi
if (sceneView)
{
// osg::notify(osg::NOTICE)<<"Culling buffer "<<_currentCull<<std::endl;
// pass on the fusion distance settings from the View to the SceneView
osgViewer::View* view = dynamic_cast<osgViewer::View*>(sceneView->getCamera()->getView());
if (view) sceneView->setFusionDistance(view->getFusionDistanceMode(), view->getFusionDistanceValue());
osg::Stats* stats = sceneView->getCamera()->getStats();
osg::State* state = sceneView->getState();
@@ -456,6 +464,10 @@ struct ViewerDoubleBufferedRenderingOperation : public osg::Operation, public Vi
// osg::notify(osg::NOTICE)<<"RenderingOperation"<<std::endl;
// pass on the fusion distance settings from the View to the SceneView
osgViewer::View* view = dynamic_cast<osgViewer::View*>(sceneView->getCamera()->getView());
if (view) sceneView->setFusionDistance(view->getFusionDistanceMode(), view->getFusionDistanceValue());
osg::Stats* stats = sceneView->getCamera()->getStats();
osg::State* state = sceneView->getState();
const osg::FrameStamp* fs = state->getFrameStamp();
@@ -2043,6 +2055,9 @@ void Viewer::updateTraversal()
if (_cameraManipulator.valid())
{
setFusionDistance( getCameraManipulator()->getFusionDistanceMode(),
getCameraManipulator()->getFusionDistanceValue() );
_camera->setViewMatrix(_cameraManipulator->getInverseMatrix());
}