查看: 1230|回复: 5

模型拾取问题

[复制链接]

该用户从未签到

发表于 2011-11-29 08:43:35 | 显示全部楼层 |阅读模式
各位大神,小弟刚学C++和OSG不久,看到教程上一个关于模型拾取的例子,这个例子中,点击模型,如果模型有网格点击之后就能把网格去掉,但是我想加一个功能,就是当点击模型,如果拾取的模型没有网格,则给模型添加网格。谢谢各位!代码如下:
void Pick(float x, float y)
{
  //申请一个相交测试的结果集,判断屏幕与场景相交后,得出的结果集放入此中
  osgUtil:ineSegmentIntersector::Intersections intersections;;
  //利用view的computerIntersection函数来测试屏幕与场景相交结果存入到结果集中
  if (mViewer->computeIntersections(x, y, intersections))

  {
   //申请一个结果集遍历器,遍历该结果集
   for(osgUtil::LineSegmentIntersector::Intersections::iterator hitr = intersections.begin();
    hitr != intersections.end();
    ++hitr)
   {
    //如果遍历器中的结果不是空
    if (!hitr->nodePath.empty() && !(hitr->nodePath.back()->getName().empty()))  

    {
                    //得到遍历器中的nodepath,以此可以判断该path中是否有想要的结点
     osg::NodePath& np = hitr ->nodePath ;  

     for (int i=np.size()-1; i>=0; --i)
     {
      osgFX::Scribe* sc= dynamic_cast<osgFX::Scribe *>(np[i]);
      
      //如果结果集中有所需要的结点,则设置隐藏该结点。其中有一个动态转换,如果可以转换成功则左值不为NULL,否则为NULL
      if (sc !=NULL)
      {
       if(sc->getNodeMask() != 0)
        sc->setNodeMask(0);
      }
     
     }
    }
   }
  }
}

该用户从未签到

发表于 2011-11-29 12:05:24 | 显示全部楼层
替换吧,

该用户从未签到

 楼主| 发表于 2011-11-29 21:10:44 | 显示全部楼层
fenma3422 发表于 2011-11-29 12:05
替换吧,

替换?是用一个新的scribe节点替换以前的scribe节点?您能说的详细点吗?谢谢!

该用户从未签到

发表于 2011-11-30 12:12:01 | 显示全部楼层
你遍历nodepath,如果nodepath里没有scribe,那么你就加上

该用户从未签到

 楼主| 发表于 2011-11-30 14:11:47 | 显示全部楼层
哦,谢谢,我试试看

该用户从未签到

发表于 2011-12-2 11:36:25 | 显示全部楼层
osg例子中好像是添加去除的功能都有的
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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