查看: 999|回复: 2

对root-->plod鼠标查询

[复制链接]

该用户从未签到

发表于 2013-6-22 09:56:38 | 显示全部楼层 |阅读模式
本帖最后由 ldj 于 2013-6-22 09:58 编辑

root是场景根节点,下面有多个plod,每个plod 里面设置多个文件和距离,鼠标查询无效。请高手帮忙
//事件处理函数
bool CPickHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa)
{
        //AfxMessageBox(_T("ddd"));
        osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>(&aa);
        if (!viewer)
                        return false;       
        switch(ea.getEventType())
        {
         /* case(osgGA::GUIEventAdapter:: PUSH):
                {
                        m_x=ea.getX();
                        m_y=ea.getY();
                        pick(viewer,m_x,m_y);
                        return false;
                }*/
                //每一帧
            case(osgGA::GUIEventAdapter::RELEASE):
                {               
                     m_x=ea.getX();
                        m_y=ea.getY();
                        pick(viewer,m_x,m_y);
                               
                          
                 
                        return false;
                }   
        default:
                return false;
        }

}
//PICK动作
void CPickHandler:: pick(osgViewer::Viewer* viewer,double x,double y)
{
         
        if(!viewer->getSceneData())
                return  ;
        double w(0.05),h(0.05);
        osgUtil:: PolytopeIntersector * picker=new osgUtil:: PolytopeIntersector(osgUtil::Intersector::WINDOW,x-h,y-h,x+h,y+h);
        osgUtil::IntersectionVisitor iv(picker);
        osg::Node  *node=viewer->getSceneData();
        osg::Group *group=node->asGroup();

        group->accept(iv);
        //viewer->getCamera()->accept(iv);
        if(picker->containsIntersections())
        {
                osg::NodePath& nodepath= picker->getFirstIntersection().nodePath ;
                unsigned int idx=nodepath.size();
                osg::Node *node= dynamic_cast<osg::Node *>(nodepath[idx-1]);
                m_osgHandle-> PickNodeCallBack(node);
        }
}

该用户从未签到

发表于 2013-6-24 18:22:13 | 显示全部楼层
您指定了求交方式为WINDOW,那么您必须用viewer->getCamera()作为起始节点,否则程序取得不了任何View和Projection还有Window Matrix的信息,无法进行变换

该用户从未签到

 楼主| 发表于 2013-6-25 08:55:04 | 显示全部楼层
谢谢array ,必须为camera
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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