查看: 1152|回复: 8

OSG 模型pick点击问题.求解~!

[复制链接]

该用户从未签到

发表于 2013-12-30 14:55:23 | 显示全部楼层 |阅读模式
如图,求解..为什么点击一次模型,名字会出现两次?

  我迭代器那里  应该是不会出现问题的.
  我现在怀疑 是不是
   computeIntersections(_x,_y,intersections));
   是不是把这个  模型的 正反面算进去了,intersections这个容器包含了模型两次,导致出现了两次点击的效果?
     来个大神就是下吧.我都郁闷死了~!
QQ图片20131230145221.jpg
QQ图片20131230145307.jpg

该用户从未签到

 楼主| 发表于 2013-12-30 15:21:35 | 显示全部楼层
好吧,现在换一个问题,有没有这么一个函数,判断某个节点是否挂载的 是我加载进去的模型?

该用户从未签到

 楼主| 发表于 2013-12-30 17:00:09 | 显示全部楼层
computeintersections 计算的是射线和箱子的焦点,这样的话有两个,一个在正面射线进入箱子,一个在背面射线离开箱子。所以主楼最外层的 while 循环执行了两次,因此输出了两个。

背面的焦点怎么不输出?
  求解~!:(:(:(

该用户从未签到

发表于 2013-12-31 08:40:11 | 显示全部楼层
如果只是想一次点击完成一个物体对象的拾取,判断出一个对象,然后后面的就不处理了

该用户从未签到

 楼主| 发表于 2013-12-31 08:49:43 | 显示全部楼层
ysw 发表于 2013-12-31 08:40
如果只是想一次点击完成一个物体对象的拾取,判断出一个对象,然后后面的就不处理了



亲,怎么判断;能给个简短的例子么?

该用户从未签到

发表于 2013-12-31 09:03:19 | 显示全部楼层
你可以继承一下osg::group, 然后把这个重写的类,作为你的添加的场景中的模型节点类,然后每次点击,把所取得的nodePath做类型转换,如果是自己重写的那个类,就是模型节点,如果找到一个,就可以return了

该用户从未签到

 楼主| 发表于 2013-12-31 09:06:48 | 显示全部楼层
ysw 发表于 2013-12-31 09:03
你可以继承一下osg::group, 然后把这个重写的类,作为你的添加的场景中的模型节点类,然后每次点击,把所 ...


  能写一小段么,,菜鸟啊;;好人做到底吧.亲;;
    重写group.....表演下吧..╮(╯▽╰)╭..  实在是看得懂,不知道怎么写;;;
  没写过这种东西

该用户从未签到

发表于 2013-12-31 13:25:24 | 显示全部楼层
luoxuechengbing 发表于 2013-12-31 09:06
能写一小段么,,菜鸟啊;;好人做到底吧.亲;;
    重写group.....表演下吧..╮(╯▽╰)╭..  实在是 ...

class MyModel:public osg::group
{
    public:
            MyModel(std::string modelName){_modelName=modelName;}
            ~MyModel(){}

           std::string getName(){return _modelName;}

          std::string _modelName;
  
}


void pickModel(float _x,float _y)
{
     .......

     //上面是你的代码
     while(_nodelTter!=_iter->nodePath.end())
        {
              MyModel * myModel=dynamic_cast<MyModel*>(*_nodelIter);

               if(myModel)
               {
                     //这个获取的名字就是你的模型的名字
                      std::string modelName=myModel->getName();
                    
                    //一次点击只获取一个模型名字可以这样
                     return;
                     
                }
         }
}

你可以试试,我是这样做的,还行吧,都是初学者,多交流

该用户从未签到

 楼主| 发表于 2013-12-31 20:22:27 | 显示全部楼层
ysw 发表于 2013-12-31 13:25
class MyModel:public osg::group
{
    public:

感谢,,,
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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