Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool getHOTAndNormal(osgViewer::CompositeViewer& viewer, const osg::Vec3d& position, osg::Vec3d& hot, osg::Vec3& normal)
- {
- if (!viewer.getView(0)->getSceneData()) return false;
- osg::Vec3d startVertex = position + osg::Vec3d(0, 0, 1000);
- osg::Vec3d endVertex = position - osg::Vec3d(0, 0, 10000);
- osg::ref_ptr< osgUtil::LineSegmentIntersector > picker = new osgUtil::LineSegmentIntersector(startVertex, endVertex);
- osgUtil::IntersectionVisitor iv(picker.get());
- viewer.getView(0)->getSceneData()->accept(iv);
- if (picker->containsIntersections())
- {
- osgUtil::LineSegmentIntersector::Intersections& intersections = picker->getIntersections();
- std::ostringstream os;
- bool once = true;
- for (osgUtil::LineSegmentIntersector::Intersections::iterator hitr = intersections.begin();
- hitr != intersections.end();
- ++hitr)
- {
- os << " local coords vertex(" << hitr->getLocalIntersectPoint() << ")" << " normal(" << hitr->getLocalIntersectNormal() << ")" << std::endl;
- os << " world coords vertex(" << hitr->getWorldIntersectPoint() << ")" << " normal(" << hitr->getWorldIntersectNormal() << ")" << std::endl;
- if (once)
- {
- once = false;
- hot = hitr->getWorldIntersectPoint();
- normal = hitr->getWorldIntersectNormal();
- }
- }
- std::cout << os.str() << std::endl;
- if (!once) return true;
- }
- return false;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement