Призрачные объекты - пуля физика - PullRequest
3 голосов
/ 05 марта 2011

Я пытаюсь реализовать простой объект-призрак в bulletphysics, вот как я создаю объекты-призраки:

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;

но я всегда получаю ответ, что все мои объекты мира сталкиваются с объектом-призраком.

Кто-нибудь может помочь мне получить функциональный простой объект-призрак?

спасибо

Ответы [ 2 ]

3 голосов
/ 19 апреля 2011

Из того, что я мало понимаю о GhostObject, вы переопределяете его флаги столкновения по умолчанию. Попробуйте изменить эту строку

ghostObj->setCollisionFlags( btCollisionObject::CF_NO_CONTACT_RESPONSE);

до:

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

НТН

1 голос
/ 19 марта 2014

Хотя я согласен с тем, что флаги коллизий должны быть установлены правильно, путем добавления нового флага к существующему набору флагов, я также хотел бы отметить, что параметром btBoxShape является btVector3, который определяет половинные экстенты объекта.Это означает, что ширина, высота и длина на самом деле в два раза больше этих параметров.

...