查看: 4074|回复: 4

关于用PolytopeIntersector多面体求交的一些疑问

[复制链接]

该用户从未签到

发表于 2011-1-8 10:32:24 | 显示全部楼层 |阅读模式
各位老师好,我在用PolytopeIntersector多面体求交时有一些疑问,想请各位老师帮忙看看~~
    (又是哗啦啦一大堆,不好意思,主要是想说清楚。。。。)

    情况描述:我现有的一些资料中,都是利用碰撞线来进行碰撞检测的示例,并没有用多面体求交的例子。由于用linesegment做精度不够,而用物理引擎做又远远高出我的要求,所以打算用PolytopeIntersector进行碰撞检测。
    问题描述:
    (1)因为没有示例,所以我推测,这个多面体求交的思路应该和射线求交的类似,具体如下:
    osgUtil:olytopeIntersector类和osg:ineSegment类相似,初始化函数的时候可以定义那个多面体,将来就是看这个多面体是不是与其他的有交集
    osgUtil::IntersectionVisitor这个求交器应该与射线中的一样用
    问题出现了:射线求交中用osgUtil::Hit类来保存得到的交点,而用osgUtil::IntersectVisitor::HitList来保存与这条检测射线相交的所有交点;那么,在用osgUtil::PolytopeIntersector来做的时候,与这两个类功能一样的类是什么呢?也就是说用什么类来保存与这个多面体有交集的节点?用什么类来保存许多节点的集合呢(当有多个节点与多面体相交时)?
    我的推测是:osgUtil::PolytopeIntersector::IntersectionsosgUtil::PolytopeIntersector::IntersectionList,对么?
    (2)我搜了论坛中的一些帖子,其中参考帖子“OSG碰撞检测之多面体求交器代码解读(上)”,写了一段代码,但是代码有一些不明白,我把疑问都在后面吧~~

    //定义一个多面体,我在前面的代码中已经求得了一个形体的包围盒bb
    osg::Polytope* polytope = new osg::Polytope;
    polytope->setToBoundingBox(bb);

    //下面是仿照那个帖子写的求交的使用,因为要对根节点下面所有的节点都看看是不是有交集,所以用root接受
    osg::ref_ptr<osgUtil::PolytopeIntersector> pi = new osgUtil::PolytopeIntersector(*polytope);
    osg::ref_ptr<osgUtil::IntersectionVisitor> iv = new osgUtil::IntersectionVisitor(pi.get());
    root->accept(*(iv.get()));

    //下面这一段是我看看有没有节点与这个多面体相交,有就输出ok,没有就not ok。
    if(pi->containsIntersections())      //疑问1:这是那个帖子的写法,我运行也通过了,
                                                     //不过我觉得应该是判断求教器中有没有包含交集吧,也就是说应该写iv->containsIntersections()
          std::cout<<"ok"<<std::endl;
    else
          std::cout<<"not ok"<<std::endl;   

  //疑问2:除了知道有没有交集外,我还需要知道它与哪些个节点有交集,那么这该怎么写呢?
  //那个帖子上写的我也列出来:
  type osgUtil::PolytopeIntersector::Intersections inters;
  for(inters::iterator it=pi->getIntersections().begin();it!=pi->getIntersections().end();it++)
     {
               /*这个里面应该就是对求得的每个形体进行处理*/   
               //我现在想知道这个求得的交集中是什么?也就是说这个交点保存了哪些信息呢?(一个点的坐标?这个节点的指针?还是什么其他的。。。。)
              //我目前非常想得到与这个包围体相交的节点的指针,不知道该怎么写呢?能不能给一个示例性的代码呢。。。。
     }



    希望各位大侠们能帮忙看一下~~~
    (每次一发帖就哗啦啦写一大堆,我自个儿都觉得不好意思了。。。。。)

该用户从未签到

 楼主| 发表于 2011-1-9 11:54:25 | 显示全部楼层
自己顶一个先~~

该用户从未签到

发表于 2011-1-10 08:49:38 | 显示全部楼层
如果您真的想把问题说清楚,请用下面的方式编辑您的帖子,去掉那些笑脸……
osg:: Polytope(加一个空格)
或者用code的方式(在发帖窗口的工具栏中显示一个<>图标)
  1. osg::Polytope
复制代码

该用户从未签到

发表于 2011-1-10 08:52:11 | 显示全部楼层
射线求交中用osgUtil::Hit类来保存得到的交点,而用osgUtil::IntersectVisitor::HitList来保存与这条检测射线相交的所有交点
这种方式早已经被废弃了,现在都使用IntersectionVisitor和LinesegmentIntersector,而后者与PolytopeIntersector是继承自同一个父类的

除了知道有没有交集外,我还需要知道它与哪些个节点有交集

PolytopeIntersector::Intersection结构体的定义中有您需要的一切

该用户从未签到

发表于 2011-1-10 09:07:30 | 显示全部楼层
2# lanxun1988
我也遇到了相同的问题,先顶一下,期待大侠帮忙解决!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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