From 715dd4e9300c44e95d6307da92aedb0ddd66bb56 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 20 Jun 2013 16:44:14 +0000 Subject: [PATCH] Fixed the handling the mouse min/max ranges of slave Cameras that have a parent Camera with a viewport. --- src/osgViewer/CompositeViewer.cpp | 13 +++++++++++-- src/osgViewer/Viewer.cpp | 21 ++++++++++++++++----- src/osgViewer/config/SingleWindow.cpp | 2 +- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/src/osgViewer/CompositeViewer.cpp b/src/osgViewer/CompositeViewer.cpp index 39eb98b38..0d490ef6c 100644 --- a/src/osgViewer/CompositeViewer.cpp +++ b/src/osgViewer/CompositeViewer.cpp @@ -747,10 +747,19 @@ void CompositeViewer::generateSlavePointerData(osg::Camera* camera, osgGA::GUIEv bool invert_y = event.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS; if (invert_y && gw->getTraits()) y = gw->getTraits()->height - y; + double master_min_x = -1.0; + double master_max_x = 1.0; + double master_min_y = -1.0; + double master_max_y = 1.0; + osg::Matrix masterCameraVPW = view_masterCamera->getViewMatrix() * view_masterCamera->getProjectionMatrix(); if (view_masterCamera->getViewport()) { osg::Viewport* viewport = view_masterCamera->getViewport(); + master_min_x = viewport->x(); + master_min_y = viewport->y(); + master_max_x = viewport->x()+viewport->width(); + master_max_y = viewport->y()+viewport->height(); masterCameraVPW *= viewport->computeWindowMatrix(); } @@ -767,8 +776,8 @@ void CompositeViewer::generateSlavePointerData(osg::Camera* camera, osgGA::GUIEv osg::Matrix matrix( osg::Matrix::inverse(localCameraVPW) * masterCameraVPW ); osg::Vec3d new_coord = osg::Vec3d(x,y,0.0) * matrix; //OSG_NOTICE<<" pointer event new_coord.x()="<