|
楼主 |
发表于 2008-6-8 15:38:56
|
显示全部楼层
原帖由 array 于 2008-6-7 23:10 发表
参照osgSim::ElevationSlice::computeIntersections的实现方式吧,今晚一直没抽出时间来写程序。注意PlaneIntersector是用于将指定平面与场景节点作交集判断的,它的输入参数有两个,第一个Plane用于指定相交平面,第 ...
我按照Array的意见参照osgSim::ElevationSlice::computeIntersections进行了平面与场景节点的交集判断。
我的场景中有一个Line Strip,共四个点,从起点到终点依次为:(0,0,0) (10,0,0) (10,10,0) (10,10,10)
结果没有成功,请Array版有空的话,帮小弟我检查一下。我搞不太懂plane和boundingPolytope是如何指定平面的。
下面是我写的代码:- void PickHandler::pick(osgViewer::Viewer* viewer, const osgGA::GUIEventAdapter& ea)
- {
- //osgUtil::PlaneIntersector::Intersections intersections;
- osg::Plane plane;
- osg::Polytope polytope;
- plane.set(osg::Vec3(1,1,0), osg::Vec3(5,0,0));
- osg::Vec3 startPlaneNormal = osg::Vec3(1,1,0);
- startPlaneNormal.normalize();
- polytope.add(osg::Plane(startPlaneNormal,osg::Vec3(4,0,0)));
- osg::Vec3 endPlaneNormal = osg::Vec3(1,1,0);
- endPlaneNormal.normalize();
- polytope.add(osg::Plane(endPlaneNormal,osg::Vec3(6,0,0)));
- osg::ref_ptr<osgUtil::PlaneIntersector> planepick = new osgUtil::PlaneIntersector(plane,polytope);
- osgUtil::IntersectionVisitor iv(planepick.get());
- //iv.setIntersector(planepick.get());
- viewer->getCamera()->accept(iv);
- osgUtil::PlaneIntersector::Intersections& ints = planepick->getIntersections();
- if (!ints.empty())
- {
- cout<<"Plane Intersector OK"<<endl;
- }
- }
复制代码 cout<<"lane Intersector OK"<<endl;这名话始终没有被执行。
[ 本帖最后由 soda 于 2008-6-8 15:43 编辑 ] |
|