【问题标题】:Bullet Physics Broadphase Filter Callback to filter individual shapes inside a compound bodyBullet Physics Broadphase 过滤器回调以过滤复合体内的单个形状
【发布时间】:2012-10-24 00:17:06
【问题描述】:

有没有办法在 Bullet Physics 中设置 Broadphase 滤波器回调,如下所示:

由两种形状构成的复合动态体,例如圆柱体和盒子,其中圆柱体只能与其他动态体内的圆柱体碰撞,而盒子只能与第三种物体碰撞,即静态球体

不允许其他碰撞:圆柱体与球体,不得碰撞;盒子和盒子,也不能碰撞

下图显示了我上面描述的内容

【问题讨论】:

    标签: filter collision bulletphysics


    【解决方案1】:

    你可以这样做。这是代码

    struct FilterCallback : public btOverlapFilterCallback 
    { 
        virtual bool  needBroadphaseCollision(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) const; 
    }; 
    // ....
    FilterCallback filterCallback;
    // ....
    m_dynamicsWorld->getPairCache()->setOverlapFilterCallback(filterCallback);
    
    bool  FilterCallback::needBroadphaseCollision(btBroadphaseProxy* proxy0,btBroadphaseProxy* proxy1) const 
    { 
    // return false for pair with no colision
    }
    

    【讨论】:

    • 你知道我是否可以在复合体内的形状中检索 userData 指针,如下所示: btCollisionObject* collisionObject = (btCollisionObject*) proxy0->m_clientObject; customData* userData = (customData*) collisionObject->getUserPointer();
    • hmm... 是的,从整个事物中检索 userData,我需要来自实际碰撞的孩子的 userData...所以我可以判断该形状是否可以碰撞...也许 API 中没有函数可以做到这一点
    • 我认为这是 Broadphase 本身的限制
    • 你可以有 2 个物体,并通过在每一帧施加力使它们不会碰撞并保持在一起。
    • 是的,或者我可以使用一些约束来代替,我认为那将是一个软关节,而不是像将复合形状连接在一起的关节......我会尝试两种方式,看看效果如何
    猜你喜欢
    • 2011-01-11
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    • 2013-02-06
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多