Fixed the handling the mouse min/max ranges of slave Cameras that have a parent Camera with a viewport.
This commit is contained in:
@@ -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()="<<new_coord.x()<<" new_coord.y()="<<new_coord.y()<<std::endl;
|
||||
event.addPointerData(new osgGA::PointerData(view_masterCamera, new_coord.x(), -1.0, 1.0,
|
||||
new_coord.y(), -1.0, 1.0));
|
||||
event.addPointerData(new osgGA::PointerData(view_masterCamera, new_coord.x(), master_min_x, master_max_x,
|
||||
new_coord.y(), master_min_y, master_max_y));
|
||||
}
|
||||
else if (!slave->_useMastersSceneData)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user