查看: 644|回复: 1

osgBullet怎么过滤只有边界重合的碰撞结果

[复制链接]

该用户从未签到

发表于 2014-5-26 18:04:55 | 显示全部楼层 |阅读模式
本帖最后由 srrew 于 2014-5-26 18:05 编辑

1111.png
我把我的两个模型(上图中分别表示为黄色和蓝色)的node转换成了btConvexHullShape,初始化collision world的代码为:
_collisionConfiguration = new btDefaultCollisionConfiguration();
_dispatcher = new btCollisionDispatcher(_collisionConfiguration);
_solver = new btSequentialImpulseConstraintSolver;
_broadphase = new btDbvtBroadphase();
_collisionWorld = new btDiscreteDynamicsWorld(_dispatcher, _broadphase, _solver , _collisionConfiguration);
_debugDrawer = new CollisionDebugDrawer();
_collisionWorld->setDebugDrawer(_debugDrawer);
两个node本身只是在边界上有线重合,而osgBullet却检测到了碰撞,但这种情况是我不需要的碰撞。
判定碰撞的代码为:
unsigned int numManifolds = _collisionWorld->getDispatcher()->getNumManifolds();
    for (unsigned int i = 0; i < numManifolds; i++)
    {
        btPersistentManifold* contactManifold = _collisionWorld->getDispatcher()->getManifoldByIndexInternal(i);
        unsigned int numContacts = contactManifold->getNumContacts();
        for (unsigned int j = 0; j < numContacts; j++)
        {
            btManifoldPoint& pt = contactManifold->getContactPoint(j);
            if (pt.getDistance() <= 0.f)
            {
                // I think there is a collision here
                .....
            }
        }
    }
我应该怎么更改代码来过滤掉这种两个node只有边界重合的情况呢?

该用户从未签到

发表于 2014-6-25 16:40:11 | 显示全部楼层
我想这是识别精度的问题,也许您可以尝试把碰撞检测的包围体缩小一点?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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