Advertisement
Guest User

intersections

a guest
Feb 16th, 2017
230
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.38 KB | None | 0 0
  1. bool getHOTAndNormal(osgViewer::CompositeViewer& viewer, const osg::Vec3d& position, osg::Vec3d& hot, osg::Vec3& normal)
  2. {
  3.     if (!viewer.getView(0)->getSceneData()) return false;
  4.  
  5.     osg::Vec3d startVertex = position + osg::Vec3d(0, 0, 1000);
  6.     osg::Vec3d endVertex = position - osg::Vec3d(0, 0, 10000);
  7.  
  8.     osg::ref_ptr< osgUtil::LineSegmentIntersector > picker = new osgUtil::LineSegmentIntersector(startVertex, endVertex);
  9.  
  10.     osgUtil::IntersectionVisitor iv(picker.get()); 
  11.     viewer.getView(0)->getSceneData()->accept(iv);
  12.  
  13.     if (picker->containsIntersections())
  14.     {
  15.         osgUtil::LineSegmentIntersector::Intersections& intersections = picker->getIntersections();
  16.  
  17.         std::ostringstream os;
  18.  
  19.         bool once = true;
  20.         for (osgUtil::LineSegmentIntersector::Intersections::iterator hitr = intersections.begin();
  21.             hitr != intersections.end();
  22.             ++hitr)
  23.         {                  
  24.             os << "        local coords vertex(" << hitr->getLocalIntersectPoint() << ")" << "  normal(" << hitr->getLocalIntersectNormal() << ")" << std::endl;
  25.             os << "        world coords vertex(" << hitr->getWorldIntersectPoint() << ")" << "  normal(" << hitr->getWorldIntersectNormal() << ")" << std::endl;                       
  26.  
  27.             if (once)
  28.             {
  29.                 once = false;
  30.                 hot = hitr->getWorldIntersectPoint();
  31.                 normal = hitr->getWorldIntersectNormal();
  32.             }
  33.         }
  34.  
  35.         std::cout << os.str() << std::endl;
  36.         if (!once) return true;
  37.     }
  38.     return false;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement