Here's a utility I wrote ... hope it helps

#include <limits>
#include <iostream>
// ...
bool intersect(osg::Node * node, osg::Vec3 pos1, osg::Vec3 pos2,
osg::Vec3 & impactPos)
{

   bool impact(false);
   impactPos = osg::Vec3(std::numeric_limits<double>::signaling_NaN(),
                         std::numeric_limits<double>::signaling_NaN(),
                         std::numeric_limits<double>::signaling_NaN());

   osgUtil::IntersectVisitor findIntersectionVisitor;
   osg::LineSegment * tgtLocSegment(new osg::LineSegment);

   tgtLocSegment->set(pos1, pos2);

   findIntersectionVisitor.addLineSegment(tgtLocSegment);
   node->accept(findIntersectionVisitor);

   osgUtil::Hit heightTestResults;

   if(findIntersectionVisitor.hits() == true)
   {
      osgUtil::IntersectVisitor::HitList& tgtLocHits =
         findIntersectionVisitor.getHitList(tgtLocSegment);
      if(!tgtLocHits.empty())
      {
         impact = true;
         heightTestResults = tgtLocHits.front();
         impactPos = heightTestResults.getWorldIntersectPoint();

         std::cout << "intersection @ ("
              << impactPos.x() << ", "
              << impactPos.y() << ", "
              << impactPos.z() << ")" << std::endl;
      }
   }

   return impact;
}
_______________________________________________
osg-users mailing list
osg-users@lists.openscenegraph.org
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to