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