查看: 1596|回复: 3

osg做地形碰撞检测时遇到问题

[复制链接]

该用户从未签到

发表于 2012-2-28 10:13:25 | 显示全部楼层 |阅读模式
环境sg3.0
地形文件格式:*.ive
模型文件格式:*.osg

代码如下:
  1. osg::Vec3d start = osg::Vec3d(position.x(), position.y(), position.z() + 20000);
  2.         osg::Vec3d end = osg::Vec3d(position.x(), position.y(), position.z() - 100000);
  3.         osg::ref_ptr<osgUtil::IntersectionVisitor> iv = new osgUtil::IntersectionVisitor;
  4.         osg::ref_ptr<osgUtil::LineSegmentIntersector> line = new osgUtil::LineSegmentIntersector(start, end);

  5.         osgUtil::LineSegmentIntersector::Intersections intersections;
  6.         iv->setIntersector(line.get());
  7.         terrain->accept(*(iv.get()));
  8. terrain->co

  9.         if(line->containsIntersections())
  10.         {//无法进入
  11.                 ...
  12.         }
复制代码
将碰撞检测的线画出来,是和地形有交点的,但是无法进入line->containsIntersections();
大家遇到过这种情况么?怎么解决的?

该用户从未签到

发表于 2012-3-5 09:20:06 | 显示全部楼层
无法进入line->containsIntersections()就意味着没有找到交点,不知道您是否工作在错误的参考系之下

该用户从未签到

发表于 2013-7-16 21:35:31 | 显示全部楼层
array 发表于 2012-3-5 09:20
无法进入line->containsIntersections()就意味着没有找到交点,不知道您是否工作在错误的参考系之下

比如 用 VPB  加载 含经纬信息的影像文件和高程文件生成的地形 非常小 (几乎是一个经纬度约等于1米);
然后 通过比较笨的方法 将地形 放大100000倍与真实地形大小接近;在这种情况下,地形文件的碰撞检测一直失败;
   这是不是 坐标系问题?有何解决思路?亦或是 用VPB能生成以米为单位的地形后,是不是能实现碰撞检测?

该用户从未签到

发表于 2013-7-19 11:19:55 | 显示全部楼层
ztbls 发表于 2013-7-16 21:35
比如 用 VPB  加载 含经纬信息的影像文件和高程文件生成的地形 非常小 (几乎是一个经纬度约等于1米);
...

解决了,发现缩放不会引起碰撞检测的失败,但是LOD会造成 碰撞检测的结果 出入很大。
还有碰撞检测时的 nodemask需要注意,有些实体(比如地形)设置了特殊的nodemask,会有可能造成碰撞检测失败!
在做碰撞检测前,一定要确认 nodemask的值!~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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