查看: 1279|回复: 2

关于IntersectVisitor::hits()的问题

[复制链接]

该用户从未签到

发表于 2010-6-1 13:32:54 | 显示全部楼层 |阅读模式
刚刚发现了一个奇怪的问题,对于一个位于(0,0,0)的模型,做一个从(0,0,999)到(0,0,-999)的直线,IntersectVisitor::hits()的返回值为true,表示检测到碰撞点,这很正常。

但是,当我把直线变成(20,20,900)到(20,20,999)——也就是说绝对不可能碰到该模型——IntersectVisitor::hits()的返回值仍然为true。

是哪里发生了错误呢?

代码如下:
    osg:: LineSegment* tank2seg = new osg:: LineSegment();
    tank2seg->set(osg::Vec3(20.,20.,900.),osg::Vec3(20.,20.,999.));
//垂线从(20,20,999)到(20,20,-999),当前模型位置在(0,0,0),不可能发生碰撞
    osgUtil::IntersectVisitor tank2visitor;
    tank2visitor.addLineSegment(tank2seg);
    m_floor->accept(tank2visitor);
  
    if(tank2visitor.hits())//如果发生碰撞,.hits()在这里似乎永远都是true
    {
  //奇怪的是以下代码在执行时并不报错,但是不能调试,一调试到下面的语句就程序就死掉了 。至于最后一句修改位置的语句似乎根本不会执行到。
      osgUtil::IntersectVisitor::HitList tank2Hits;
      tank2Hits = tank2visitor.getHitList(tank2seg);
      osgUtil::Hit tank2h;
      tank2h = tank2Hits.front();
      osg::Vec3 tank2p=tank2h.getWorldIntersectPoint();
      pat->setPosition(tank2p);//将模型位置移到碰撞点
    }

该用户从未签到

发表于 2010-6-1 14:20:48 | 显示全部楼层
您可以换用IntersectionVisitor试一下有无同样问题,IntersectVisitor已经被弃用了

该用户从未签到

 楼主| 发表于 2010-6-3 14:43:33 | 显示全部楼层
您可以换用IntersectionVisitor试一下有无同样问题,IntersectVisitor已经被弃用了
array 发表于 2010-6-1 14:20

试过了,虽然可能我的代码还是有点问题,但是原来的问题解决了~谢谢Array~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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