From 60f7607618ed4a4cd09fff3de36f77c2cca7c632 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Thu, 8 Dec 2005 11:01:38 +0000 Subject: [PATCH] Added support for pre and post relative transforms on cameranode. --- src/osgUtil/IntersectVisitor.cpp | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/src/osgUtil/IntersectVisitor.cpp b/src/osgUtil/IntersectVisitor.cpp index c7129489b..82a16809e 100644 --- a/src/osgUtil/IntersectVisitor.cpp +++ b/src/osgUtil/IntersectVisitor.cpp @@ -726,10 +726,29 @@ void PickVisitor::apply(osg::CameraNode& camera) { if (!camera.isRenderToTextureCamera()) { - runNestedPickVisitor( camera, - camera.getViewport() ? camera.getViewport() : _lastViewport.get(), - camera.getProjectionMatrix(), - camera.getViewMatrix(), - _mx, _my ); + if (camera.getReferenceFrame()==osg::CameraNode::ABSOLUTE_RF) + { + runNestedPickVisitor( camera, + camera.getViewport() ? camera.getViewport() : _lastViewport.get(), + camera.getProjectionMatrix(), + camera.getViewMatrix(), + _mx, _my ); + } + else if (camera.getTransformOrder()==osg::CameraNode::POST_MULTIPLE) + { + runNestedPickVisitor( camera, + camera.getViewport() ? camera.getViewport() : _lastViewport.get(), + _lastProjectionMatrix * camera.getProjectionMatrix(), + _lastViewMatrix * camera.getViewMatrix(), + _mx, _my ); + } + else // PRE_MULTIPLE + { + runNestedPickVisitor( camera, + camera.getViewport() ? camera.getViewport() : _lastViewport.get(), + camera.getProjectionMatrix() * _lastProjectionMatrix, + camera.getViewMatrix() * _lastViewMatrix, + _mx, _my ); + } } }