查看: 1283|回复: 2

是否与场景物体相交

[复制链接]

该用户从未签到

发表于 2011-9-2 10:16:41 | 显示全部楼层 |阅读模式
判断鼠标点击范围构成的多面体是否与场景物体相交
//问题,当鼠标点击范围内没有模型的时候,还物体相交intersect不知道哪不对了,请各位帮忙看看
case osgGA::GUIEventAdapter:USH:
  {
   
   osgUtil:ineSegmentIntersector::Intersections intersections;
   if(ea.getButtonMask()==osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON)
   {
   
    if (!viewer)
    {
     return false;
    }
    Sx_min=ea.getXmin();//记录鼠标开始点击点
    Sx_max=ea.getXmax();
    Sy_min=ea.getYmin();
    Sy_max=ea.getYmax(); 
             }
                 
}

case(osgGA::GUIEventAdapter:OUBLECLICK):
  {
   if(ea.getButton()==osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON)
   {
    Ex_min=ea.getXmin();//结束点
    Ex_max=ea.getXmax();
    Ey_min=ea.getYmin();
    Ey_max=ea.getYmax();
    pick(viewer);
   }
  }
///////////////////////////////////
   bool pick(osgViewer::Viewer* viewer )
 {
      osgUtil::PolytopeIntersector * picker =
  new osgUtil::PolytopeIntersector(
  osgUtil::Intersector::PROJECTION,
  Ex_min-Sx_min,Ey_min-Sy_min,Ex_max-Sx_max,Ey_max-Sy_max);///
osgUtil::IntersectionVisitor iv( picker );
viewer->getCamera()->accept( iv );
if (picker->containsIntersections())
{
            std::cout<<"intersect!"<<std::endl;
         }else
            {
          std::cout<<"unintersect!"<<std::endl;
          }
}

该用户从未签到

发表于 2011-9-2 14:12:57 | 显示全部楼层
Ex_min-Sx_min,Ey_min-Sy_min,Ex_max-Sx_max,Ey_max-Sy_max好像都等于0吧,
我想你只要记录点击点,而不是最大最小XY,这样应该就可以了

case osgGA::GUIEventAdapter:USH:
  {
   
   osgUtil:ineSegmentIntersector::Intersections intersections;
   if(ea.getButtonMask()==osgGA::GUIEventAdapter:EFT_MOUSE_BUTTON)
   {
   
    if (!viewer)
    {
     return false;
    }
    Sx=ea.getX();//记录鼠标开始点击点
    Sy=ea.getY();
); 
             }
                 
}

case(osgGA::GUIEventAdapter:OUBLECLICK):
  {
   if(ea.getButton()==osgGA::GUIEventAdapter:EFT_MOUSE_BUTTON)
   {
    Ex=ea.getX();//结束点
    Ey=ea.getY();

    pick(viewer);
   }
  }
///////////////////////////////////
   bool pick(osgViewer::Viewer* viewer )
 {
if (Sx>Ex)) swap(Sx,Ex);
if (Sy>Ey)) swap(Sy,Ey);
      osgUtillytopeIntersector * picker =
  new osgUtil:olytopeIntersector(
  osgUtil::Intersector:ROJECTION,
  Sx,Sy,Ex,Ey);///
osgUtil::IntersectionVisitor iv( picker );
viewer->getCamera()->accept( iv );
if (picker->containsIntersections())
{
            std::cout<<"intersect!"<<std::endl;
         }else
            {
          std::cout<<"unintersect!"<<std::endl;
          }
}

该用户从未签到

发表于 2011-9-2 14:52:04 | 显示全部楼层
ea.getX()改为ea.getXnormalize()
ea.getY()改为ea.getYnormalize()
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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