|
本帖最后由 Hadse 于 2011-8-26 13:33 编辑
- void Pick(float x,float y)//pick函数
- {
- osgUtil::LineSegmentIntersector::Intersections intersections;//申请一个相交测试的结果集,判断屏幕与场景相交后,得出的结果集放入此中
- if (mViewer->computeIntersections(x, y, intersections))//利用view的computerIntersection函数来测试屏幕与场景相交结果存入到结果集中
- {
- for(osgUtil::LineSegmentIntersector::Intersections::iterator hitr = intersections.begin();//申请一个结果集遍历器,遍历该结果集
- hitr!=intersections.end();
- ++hitr)
- {
- if (!hitr->nodePath.empty() && !(hitr->nodePath.back()->getName().empty())) //如果遍历器中的结果不是空
- {
- osg::NodePath& np = hitr ->nodePath ; //得到遍历器中的nodepath,以此可以判断该path中是否有想要的结点
- for (int i=np.size()-1; i>=0; --i)
- {
- osgFX::Scribe* sc= dynamic_cast<osgFX::Scribe *>(np[i]);
- if (sc!= NULL) //如果结果集中有所需要的结点,则设置隐藏该结点。其中有一个动态转换,如果可以转换成功则左值不为NULL,否则为NULL
- {
- if(sc ->getNodeMask() != 0)
- sc ->setNodeMask(0) ;
- }
- }
- }
- }
- }
- }
- osgViewer::Viewer* mViewer;
复制代码 |
|