osg::Node *m_node = _modelNode;//设置模型节点
osg::Vec3 start;
osg::Vec3 end;
osg::ref_ptr<osgUtil::IntersectionVisitor> iv = new osgUtil::IntersectionVisitor;
osg::ref_ptr<osgUtil::LineSegmentIntersector> ls = new osgUtil::LineSegmentIntersector(start, end);
osgUtil::LineSegmentIntersector::Intersections intersections; //结果集
osg::Vec3 point;
iv->setIntersector(ls.get());
m_node->accept(*(iv.get()));
if (ls->containsIntersections())
{
intersections = ls->getIntersections();
osgUtil::LineSegmentIntersector::Intersections::iterator iter = intersections.begin();
for (; iter != intersections.end(); iter++)
{
point = iter->getWorldIntersectPoint();
std::cout << point.x() << " " << point.y() << " " << point.z() << " " << std::endl;
}
}
通过设置起点终点 即可求出物体与射线交点。