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;
}
}
通过设置起点终点 即可求出物体与射线交点。
本文介绍了一种利用射线与3D模型进行交点检测的方法。通过设置射线的起点和终点,使用osgUtil::IntersectionVisitor和osgUtil::LineSegmentIntersector来获取与3D模型的所有交点坐标。


被折叠的 条评论
为什么被折叠?



