我试图在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;但我总是得到一个响应,我所有的世界对象都与幽灵对象发生了碰撞。
有人能帮我得到一个功能简单的ghost对象吗?
谢谢
发布于 2011-04-20 00:08:21
根据我对GhostObject所知不多,您正在覆盖它的默认冲突标志。尝试更改此行
ghostObj->setCollisionFlags( btCollisionObject::CF_NO_CONTACT_RESPONSE);至:
ghostObj->setCollisionFlags( ghostObj->getCollisionFlags() | btCollisionObject::CF_NO_CONTACT_RESPONSE);HTH
发布于 2014-03-19 10:51:52
虽然我同意应该通过向现有标志集添加新标志来正确设置冲突标志,但我还想指出的是,btBoxShape的参数是一个btVector3,它定义了对象的half-extents。这意味着宽度、高度和长度实际上是这些参数的两倍大小()。
https://stackoverflow.com/questions/5202594
复制相似问题