查看: 4295|回复: 3

关于用PlaneIntersector 与地面求交的一个问题

[复制链接]

该用户从未签到

发表于 2010-10-12 12:05:53 | 显示全部楼层 |阅读模式
本帖最后由 qylibohao 于 2010-10-12 14:18 编辑

本人先通过鼠标点选地面获取交点的世界坐标存储起来,然后将这些地面点连起来
我用PlaneIntersector构建求交的面但是求出来的交线有问题,就是坐标不对。
代码是按照网上的资料写的,先贴出来:
osgUtil::PlaneIntersector::Intersections intersections;
      osg::Plane plane;
      osg::Vec3d upVector (0.0, 1.0, 0.0);
      for (int i = 0 ;i<_PositionArrayInWorld->size()-1;i++)   /////_positionArrayInWorld 保存了鼠标点选是地面的世界坐标点
      {
       osg::Vec3 startPt = (*_PositionArrayInWorld)[0];
       osg::Vec3 endPt = (*_PositionArrayInWorld)[1];
       osg::Vec3f planeNormal = (endPt-startPt)^upVector;
       planeNormal.normalize();
       plane.set( planeNormal, startPt);

       //osg::Vec3f startPlaneNormal = upVector^planeNormal;
       //startPlaneNormal.normalize();
       osg::Vec3f startPlaneNormal = osg::Vec3f(1,0,0);

       osg::Polytope polytope;
       polytope.add( osg::Plane(startPlaneNormal,startPt));
       //osg::Vec3f endPlaneNormal = planeNormal^upVector;
       //endPlaneNormal.normalize();
       osg::Vec3f endPlaneNormal = osg::Vec3f(-1,0,0);
       polytope.add( osg::Plane(endPlaneNormal,endPt));

       osg::ref_ptr<osgUtil::PlaneIntersector>intersector = new osgUtil::PlaneIntersector(plane,polytope);
       osgUtil::IntersectionVisitor iv(intersector.get());
       viewer->getSceneData()->accept(iv);

       if (intersector->containsIntersections())
       {
        osgUtil::PlaneIntersector::Intersections& intersections = intersector->getIntersections();
        osgUtil::PlaneIntersector::Intersections::iterator itr;
        double x1,y1,z1;
        for (itr = intersections.begin() ; itr != intersections.end();++itr)
        {
         
         for( unsigned int i=0; i<(*itr).polyline.size(); ++i)
         {
          x1 = (*itr).polyline.x();        
          y1 = (*itr).polyline.y();        
          z1 = (*itr).polyline.z();        
          linepoint->push_back(osg::Vec3(x1,y1,z1));
         }
        }
       }
   }
现在就是传进去的世界坐标标点,计算出来的x1 y1 z1 很小,不知道是什么问题,难道计算出来的坐标不是世界
坐标点吗?请大家帮帮忙,解答一下问题。

该用户从未签到

发表于 2010-10-12 13:12:00 | 显示全部楼层
通常情况下您不必给PlaneIntersector的构造函数传递polytope参数。如果您使用MODEL坐标系,那么直接指定世界坐标系或者局部坐标系(如果求交的节点不是根节点)下的平面方程即可

该用户从未签到

 楼主| 发表于 2010-10-12 14:25:14 | 显示全部楼层
我试着把不添加polytope的值,但是出来的还是很小,难道出来的不是世界坐标值吗?

该用户从未签到

发表于 2010-10-12 16:46:42 | 显示全部楼层
得到的polyline中的每一个点可能需要乘以intersection.matrix来得到世界坐标的值
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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