http://bulletphysics.org/mediawiki-1.5. ... d_Triggers
I can check if there is a collision appears, but I want to filter this, so that I can just check for the collisions between my static bodies and the kinematic body. I have tried to use groups & masks like http://www.bulletphysics.org/mediawiki- ... _Filtering:
Code: Select all
OgreBulletDynamics::RigidBody *ersetzArrowBody;
OgreBulletDynamics::RigidBody *aim1Body;
OgreBulletDynamics::RigidBody *aim2Body;
OgreBulletDynamics::RigidBody *defaultPlaneBody;
//....
OgreBulletDynamics::DynamicsWorld *mWorld; // OgreBullet World
Code: Select all
// Collision groups & masks
#define BIT(x) (1<<(x))
enum collisiontypes {
COL_NOTHING = 0,
COL_PLANE = BIT(1),
COL_ERSETZARROW = BIT(2), // collide with the arrow, which was shoot
COL_AIM1 = BIT(3), // collide with the Ring
COL_AIM2 = BIT(4), // collide with the circle
};
short arrowCollidesWith = COL_AIM1 | COL_AIM2;
short aim1CollidesWith = COL_ERSETZARROW;
short aim2CollidesWith = COL_ERSETZARROW;
short planeCOllidesWith = COL_NOTHING;
Code: Select all
void checkForCollision()
{
mWorld->addRigidBody(defaultPlaneBody,COL_PLANE,planeCOllidesWith);
mWorld->addRigidBody(ersetzArrowBody,COL_ERSETZARROW,COL_ERSETZARROW|COL_AIM1 | COL_AIM2);
mWorld->addRigidBody(aim1Body,COL_AIM1,aim1CollidesWith);
mWorld->addRigidBody(aim2Body,COL_AIM2,aim2CollidesWith);
mWorld->getBulletCollisionWorld()->performDiscreteCollisionDetection();
///one way to draw all the contact points is iterating over contact manifolds / points:
int numManifolds =mWorld->getBulletCollisionWorld()->getDispatcher()->getNumManifolds();
// go through every manifolds
for (unsigned int i=0;i < numManifolds; i++)
{
// get current manifold
btPersistentManifold* contactManifold = mWorld->getBulletCollisionWorld()->getDispatcher()->getManifoldByIndexInternal(i);
// get collisionpair
btCollisionObject* obA = static_cast<btCollisionObject*>(contactManifold->getBody0());
btCollisionObject* obB = static_cast<btCollisionObject*>(contactManifold->getBody1());
// get number of contact points of these objects
const unsigned int numContacts = contactManifold->getNumContacts();
// go through every contact point
for (unsigned int j = 0;j < numContacts; j++)
{
//get current manifold point
btManifoldPoint& pt = contactManifold->getContactPoint(j);
/*g_CSkeletalViewerApp.m_f<<pt.getDistance()<<endl;*/
if (pt.getDistance()<0.f)
{
getroffen = true;
g_CSkeletalViewerApp.m_f<<" Collision found: "<<endl;
}
else if (pt.getDistance()>0.f)
{
g_CSkeletalViewerApp.m_f<<" Collision not found: "<<endl;
}
}
}
}