查看: 956|回复: 3

关于pick函数的疑问

[复制链接]

该用户从未签到

发表于 2011-12-3 14:51:47 | 显示全部楼层 |阅读模式
本帖最后由 hunandx2010 于 2011-12-3 14:54 编辑

各位大神,我下面是我写得一个pick函数的代码,目的是想要当鼠标点击之后,如果在节点集里找到了PositionTransfrom节点,这设置一个bool变量为true。下面是我的代码,请高手帮小弟看看是否正确:
void Pick(float x, float y)
{
        osgUtil::LineSegmentIntersector::Intersections intersections;
        osg::Vec3d intersectPoint;
        if (mp_Viewer->computeIntersections(x, y, intersections))
        {
                osgUtil::LineSegmentIntersector::Intersections::iterator hitr = intersections.begin();
                if (!hitr->nodePath.empty() && !(hitr->nodePath.back()->getName().empty()))
                {
                        osg::NodePath& np = hitr ->nodePath ;
                                for (int i=np.size()-1; i>=0; --i)         //遍历节点的NodePath,
                                {                               //如果找到PositiongAttitudeTransform节点,则设置m_on的值为true,然后跳出循环,
                                        osg::PositionAttitudeTransform* pos= dynamic_cast<osg::PositionAttitudeTransform*>(np);
                                                if (pos !=NULL)
                                                    m_on = true;
                                                       
                                                break;
                }

        }

}

谢谢各位!

该用户从未签到

发表于 2011-12-3 17:53:55 | 显示全部楼层
这个你测试一下不就可以了吗?求交部分没什么问题的

该用户从未签到

 楼主| 发表于 2011-12-3 20:41:02 | 显示全部楼层
garyliyong 发表于 2011-12-3 17:53
这个你测试一下不就可以了吗?求交部分没什么问题的

我单步调试了一下,结果m_on的值貌似一直是true;我的节点集里面没有PositionTransform节点。不知道为什么?谢谢。小弟C++基础不好,见谅!

该用户从未签到

发表于 2011-12-4 09:09:57 | 显示全部楼层
首先你得确认一下有没有PositionAttitudeTransform节点,如果有的话那可能是强制转换的问题,np->asTransform()->asMatrixTransform()->asPositionAttitudeTransform();
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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