z3a*_*z3a 4 bullet bulletphysics
我正在尝试在bulletphysicals中实现一个简单的幽灵对象,这就是我创建幽灵对象的方式:
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);
Run Code Online (Sandbox Code Playgroud)
这是尝试找到碰撞的方法:
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;
Run Code Online (Sandbox Code Playgroud)
但我总是得到这样的回应:我的所有世界对象都与幽灵对象发生碰撞。
任何人都可以帮助我获得一个功能简单的幽灵对象吗?
谢谢
据我对 GhostObject 的了解,您正在覆盖它的默认碰撞标志。尝试改变这一行
ghostObj->setCollisionFlags( btCollisionObject::CF_NO_CONTACT_RESPONSE);
Run Code Online (Sandbox Code Playgroud)
到:
ghostObj->setCollisionFlags( ghostObj->getCollisionFlags() | btCollisionObject::CF_NO_CONTACT_RESPONSE);
Run Code Online (Sandbox Code Playgroud)
华泰
| 归档时间: |
|
| 查看次数: |
7957 次 |
| 最近记录: |