2011-03-05 8 views
3

내가 bulletphysics에서 간단한 유령 개체를 구현하기 위해 노력하고있어입니다 :고스트 오브젝트 나는 유령 개체를 만드는 방법 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; 

하지만 항상 내 모든 세계 물체가 유령 물체와 충돌한다는 응답을 받는다.

누구나 기능적인 간단한 고스트 개체를 얻을 수 있습니까?

감사

작은 내가 GhostObject의 이해 것과

답변

3

, 당신은 기본 충돌 플래그를 무시하고 있습니다.

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

HTH

1

을 나는 충돌 플래그 플래그 나는 좋겠 기존 세트에 새 플래그를 추가하여 적절하게 설정해야합니다 동의하지만이 라인

ghostObj->setCollisionFlags(btCollisionObject::CF_NO_CONTACT_RESPONSE); 

에에게 변화 시도 또한 btBoxShape에 대한 매개 변수가 객체의 반 범위 인을 정의하는 btVector3임을 지적하고 싶습니다. 즉 너비, 높이 및 길이가 실제로 두 번 두 개 매개 변수만큼 큽니다.