From 5e40ca9c8648d019ec2ba8435710993661271356 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 7 Nov 2005 16:48:45 +0000 Subject: [PATCH] Improved the handling of CameraNode and viewers with projection matrices contained NaN's. --- src/osgProducer/Viewer.cpp | 78 ++++++++++++++++++++------------------ 1 file changed, 41 insertions(+), 37 deletions(-) diff --git a/src/osgProducer/Viewer.cpp b/src/osgProducer/Viewer.cpp index ec97b8f6d..8d792fe7d 100644 --- a/src/osgProducer/Viewer.cpp +++ b/src/osgProducer/Viewer.cpp @@ -71,9 +71,11 @@ public: PickVisitor() { xp=yp=0; - setTraversalMode(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN); + setTraversalMode(osg::NodeVisitor::TRAVERSE_ACTIVE_CHILDREN); + } + ~PickVisitor() + { } - ~PickVisitor() {} void setTraversalMask(osg::Node::NodeMask traversalMask) { @@ -82,22 +84,24 @@ public: } // Aug 2003 added to pass the nodemaskOverride to the PickIntersectVisitor - // may be used make the visitor override the nodemask to visit invisible actions - inline void setNodeMaskOverride(osg::Node::NodeMask mask) { - _piv.setNodeMaskOverride(mask); - _nodeMaskOverride = mask; } - - - void handleProjectionMatrix(const osg::Matrixd& matrix, osg::Group& node) + // may be used make the visitor override the nodemask to visit invisible actions + inline void setNodeMaskOverride(osg::Node::NodeMask mask) { + _piv.setNodeMaskOverride(mask); + _nodeMaskOverride = mask; + } + + + virtual void apply(osg::Projection& pr) + { osg::Matrixd mt; - mt.invert(matrix); + mt.invert(pr.getMatrix()); osg::Vec3 npt=osg::Vec3(xp,yp,-1.0f) * mt, farpt=osg::Vec3(xp,yp,1.0f) * mt; // traversing the nodes children, using the projection direction - for (unsigned int i=0; iaccept(*this); + return _PIVsegHitList; }