查看: 1689|回复: 4

如何让某個Geode节点不接受拾取

[复制链接]

该用户从未签到

发表于 2010-5-6 19:18:20 | 显示全部楼层 |阅读模式
如题。现在想让某个叶节点不接受拾取,即,不会拾取到,该怎么做,谢谢啦

该用户从未签到

发表于 2010-5-6 23:34:37 | 显示全部楼层
似乎没有很好的方法,,你可以让这个节点直接不接受pick的访问器~~~~~或者采用OpenGL的方式绘制(这个是我最近发现的一个问题,OpenGL指令方式绘制的东西拾取不到~~~不知道运行的一个BUG,还是其他的问题,,拾取不到),我的代码是这样的,貌似看不出问题:



  1.         //osgUtil:ineSegmentIntersector* picker = new osgUtil:ineSegmentIntersector( osgUtil::Intersector:ROJECTION,ea.getXnormalized(),ea.getYnormalized());
  2.         //osgUtil::IntersectionVisitor iv(picker);
  3.         //viewer->getCamera()->accept(iv);
  4.         ////viewer->getSceneData()->accept(iv);

  5.         //if (picker->containsIntersections())
  6.         //{
  7.         //        osgUtil:ineSegmentIntersector::Intersection intersection = picker->getFirstIntersection();
  8.         //        //输入流
  9.         //        os<<"鼠标位置  X:"<< intersection.getWorldIntersectPoint().x()<<"  Y: "<<
  10.         //                intersection.getWorldIntersectPoint().y()<<"  Z: "<< intersection.getWorldIntersectPoint().z()<<std::endl ;
  11.         //}

复制代码

该用户从未签到

发表于 2010-5-7 08:34:21 | 显示全部楼层
一个很简单的方法是设置节点的NodeMask,以及求交访问器的TraversalMask:如果这两者的与操作为零,则节点被自动忽略。

至于FlySky的问题:这并不是一个BUG;而是你用OpenGL绘制的物体无法取得几何信息,因此也就无法进行求交计算——很直接的解决方案是在派生Drawable类时,重写其accept和supports系列函数,因为Functor仿函器会使用这个系列函数来取得任何可绘制体的顶点信息

该用户从未签到

发表于 2010-5-7 08:46:58 | 显示全部楼层
谢谢锐兄指点~~~~~

该用户从未签到

发表于 2010-10-5 10:09:42 | 显示全部楼层
本帖最后由 wwwcys 于 2010-10-5 10:11 编辑
至于FlySky的问题:这并不是一个BUG;而是你用OpenGL绘制的物体无法取得几何信息,因此也就无法进行求交计算——很直接的解决方案是在派生Drawable类时,重写其accept和supports系列函数,因为Functor仿函器会使用这个系列函数来取得任何可绘制体的顶点信息array 发表于 2010-5-7 08:34

我正在进行osg与openGL的混合编程,这个回答,正好解决了我的困惑,谢谢array。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表