查看: 2781|回复: 6

关于简单碰撞检测

[复制链接]

该用户从未签到

发表于 2009-3-5 11:14:10 | 显示全部楼层 |阅读模式
这是osg入门教程里面的代码            
                  //得到新的位置
                osg::Vec3 newPos1 = m_vPosition + delta;

                osgUtil::IntersectVisitor ivXY; //
                //根据新的位置得到两条线段检测
                osg::ref_ptr<osg:ineSegment> lineXY = new osg::LineSegment(newPos1,
                        m_vPosition);//
                osg::ref_ptr<osg::LineSegment> lineZ = new osg::LineSegment(newPos1+osg::Vec3(0.0f,0.0f,10.0f),
                        newPos1-osg::Vec3(0.0f,0.0f,-10.0f)) ;//主要问题是这里:这是一条什么样的线段呢???

                ivXY.addLineSegment(lineZ.get()) ;//添加一条线段

                ivXY.addLineSegment(lineXY.get()) ;//添加一条线段
                //结构交集检测
                m_pHostViewer->getSceneData()->accept(ivXY) ;//相交检测 检测两条线段相交osg大致的算法谁能简单介绍下
                //如果没有碰撞检测
                if(!ivXY.hits())//判断是否碰撞
                {
                        m_vPosition += delta;
                }

该用户从未签到

发表于 2009-3-5 12:13:05 | 显示全部楼层
第一条线段是从newPos1到m_vPosition;
第二条线段从newPos1+osg::Vec3(0.0f,0.0f,10.0f)到newPos1-osg::Vec3(0.0f,0.0f,-10.0f),不过我不知道是不是您这里的代码有误,这两个点似乎是一个点?

OSG采用访问器机制,由IntersectVisitor负责遍历指定节点及其所有子节点,并判断线段与节点是否存在交集;如果在读入节点时选择构建它们的KD树(参看osgkdtree),则可以通过KD树加快检测的速度。

该用户从未签到

 楼主| 发表于 2009-3-5 13:40:22 | 显示全部楼层
第二条线段从newPos1+osg::Vec3(0.0f,0.0f,10.0f)到newPos1-osg::Vec3(0.0f,0.0f,-10.0f),不过我不知道是不是您这里的代码有误,这两个点似乎是一个点?

我也值这么认为的   这是 肖鹏《osg入门指南》 7.2.5  自定义操作器场景漫游示例  的代码

该用户从未签到

发表于 2009-3-5 14:04:39 | 显示全部楼层
可能是笔误吧,您可以自己定义一条合法的线段

该用户从未签到

 楼主| 发表于 2009-3-5 14:35:40 | 显示全部楼层
恩 正在调试

但这段代码的确能实现 碰撞检测 确实很令人费解。

该用户从未签到

发表于 2009-3-5 14:41:55 | 显示全部楼层
这没啥费解的~~因为是两条线段,一条无效,但另一条可以工作

该用户从未签到

发表于 2009-3-6 00:22:27 | 显示全部楼层
笔误写错了,呵呵~~~~~更正一下,,感谢~~~
  1. osg::ref_ptr<osg::LineSegment> lineZ = new osg::LineSegment(newPos1+osg::Vec3(0.0f,0.0f,10.0f),
  2. newPos1-osg::Vec3(0.0f,0.0f,10.0f)) ;//主要问题是这里:这是一条什么样的线段呢???
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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