幽灵对象 - bulletphysics

Posted

技术标签:

【中文标题】幽灵对象 - bulletphysics【英文标题】:Ghost objects - bulletphysics 【发布时间】:2011-07-09 07:47:17 【问题描述】:

我正在尝试在bulletphysics 中实现一个简单的ghost 对象,这就是我创建ghost 对象的方式:

btGhostPairCallback* ghostCall = new btGhostPairCallback();
world->getBroadphase()->getOverlappingPairCache()->setInternalGhostPairCallback(ghostCall);

btGhostObject* ghostObj = new btGhostObject();
btCollisionShape* shape = new btBoxShape(btVector3(ofGetWidth()+1000, ofGetHeight()+1000, 50));
ghostObj->setCollisionShape(shape);
btTransform trans;
trans.setIdentity();
trans.setOrigin(btVector3(0,0,-500));
ghostObj->setWorldTransform(trans);
ghostObj->setCollisionFlags( btCollisionObject::CF_NO_CONTACT_RESPONSE);
world->addCollisionObject(ghostObj,btBroadphaseProxy::SensorTrigger,btBroadphaseProxy::AllFilter & ~btBroadphaseProxy::SensorTrigger);

这是尝试找到碰撞的方法:

btCollisionObject* obj = world->getCollisionObjectArray()[j];
btRigidBody* body = btRigidBody::upcast(obj);

    btAlignedObjectArray < btCollisionObject* > objsInsidePairCachingGhostObject;
    btAlignedObjectArray < btCollisionObject* >* pObjsInsideGhostObject = NULL;
    btGhostObject* ghost = btGhostObject::upcast(obj);

    if(ghost)
        objsInsidePairCachingGhostObject.resize(0);
        pObjsInsideGhostObject = &ghost->getOverlappingPairs();
        cout << ghost->getNumOverlappingObjects() << endl;

但我总是得到一个响应,即我的所有世界对象都与幽灵对象发生碰撞。

谁能帮我弄一个功能简单的幽灵对象?

谢谢

【问题讨论】:

【参考方案1】:

根据我对 GhostObject 的了解,您正在覆盖其默认的碰撞标志。尝试更改此行

ghostObj->setCollisionFlags( btCollisionObject::CF_NO_CONTACT_RESPONSE);

到:

ghostObj->setCollisionFlags( ghostObj->getCollisionFlags() | btCollisionObject::CF_NO_CONTACT_RESPONSE);

HTH

【讨论】:

【参考方案2】:

虽然我同意应该通过将新标志添加到现有标志集来正确设置碰撞标志,但我还想指出,btBoxShape 的参数是定义 半范围的 btVector3 的对象。这意味着宽度、高度和长度实际上是这些参数的 两倍

【讨论】:

以上是关于幽灵对象 - bulletphysics的主要内容,如果未能解决你的问题,请参考以下文章

Opengl TRIANGLE_STRIPS 创建重复的幽灵

幽灵按钮的实现

幽灵按键

MMSID分享-1

幽灵按钮—网页设计新趋势

幽灵按钮—网页设计新趋势