查看: 1614|回复: 3

osgbullet做碰撞检测,但是物体碰撞实际碰撞前就检测到了碰撞?

[复制链接]

该用户从未签到

发表于 2013-3-6 14:01:21 | 显示全部楼层 |阅读模式
        我使用osgbullet里面的demo中collision代码做了下修改,主要移植到自己代码中并没有修改重要的部分,但是,实际的碰撞检测中两个物体在很远的距离便已经没检测到碰撞,这个是什么问题呢?

未命名.jpg



//create collisionshape
                root->addChild(marker_geode_1);
               
                这个是不动的模型
                btCollisionObject* marker_collision_1 = new btCollisionObject;
                marker_collision_1->setCollisionShape( osgbCollision::btBoxCollisionShapeFromOSG(marker_geode_1 ) );
                marker_collision_1->setCollisionFlags( btCollisionObject::CF_STATIC_OBJECT );
                cw->addCollisionObject( marker_collision_1 );

               
                 这个是随着鼠标移动的,基本是按照例子代码来改的
                osg::Matrix transMatrix = osg::Matrix::translate( 0., 0., 0. );
                osg::MatrixTransform* mt = new osg::MatrixTransform( transMatrix );

                mt->addChild(marker_geode_2);
                root->addChild(mt);

                btCollisionObject* marker_collision_2 = new btCollisionObject;
                marker_collision_2->setCollisionShape( osgbCollision::btBoxCollisionShapeFromOSG(marker_geode_2 ) );
                marker_collision_2->setCollisionFlags( btCollisionObject::CF_STATIC_OBJECT );
                marker_collision_2->setWorldTransform(osgbCollision::asBtTransform( transMatrix ));

                cw->addCollisionObject( marker_collision_2 );

                mm->setCollisionObject( marker_collision_2 );
                mm->setMatrixTransform( mt );

                viewer.setUpViewInWindow( 10, 30, 800, 600 );
                viewer.setCameraManipulator( new osgGA::TrackballManipulator() );
                viewer.addEventHandler( mm );
                viewer.setSceneData(root.get());
                root->setName("Root");
                viewer.realize();

                bool lastColState = false;
                while( !viewer.done() )
                {
                        cw->performDiscreteCollisionDetection();

                        vc->detectCollision( lastColState, cw );

                        viewer.frame();
                }

该用户从未签到

发表于 2013-3-6 15:15:30 | 显示全部楼层
实时打印物理世界的数据吧,或者获得物理世界中的数据,重现,这样调试比较直观

该用户从未签到

 楼主| 发表于 2013-3-8 16:14:40 | 显示全部楼层
liuzhiyu123 发表于 2013-3-6 15:15
实时打印物理世界的数据吧,或者获得物理世界中的数据,重现,这样调试比较直观

我已经找到原因,osgbullet似乎是直接把我的模型改变成一个盒子放进物理世界去碰撞,所以精度有很大的误差。。。

该用户从未签到

发表于 2013-3-8 16:24:15 | 显示全部楼层
Arturia 发表于 2013-3-8 16:14
我已经找到原因,osgbullet似乎是直接把我的模型改变成一个盒子放进物理世界去碰撞,所以精度有很大的误差 ...

哦,那就用复杂模型的碰撞检测方法吧
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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