With jme 3.1 collision has stopped working and i just cannot find the right changes to adapt.
Here my collision method which worked flawlesssly until 3.1. The
addCollisionObject method seems to have changed, but i have no idea
where to get a com.bulletphysics.collision.dispatch.CollisionObject
from?
public boolean collideDirect(Node node_1, Geometry geom_1, Node node_2, Geometry geom_2)
{
initCollsionDetection(false);
CollisionShape shape_1 = CollisionShapeFactory.createDynamicMeshShape(geom_1);
CollisionShape shape_2 = CollisionShapeFactory.createDynamicMeshShape(geom_2);
PhysicsRigidBody body_1 = new PhysicsRigidBody(shape_1);
PhysicsRigidBody body_2 = new PhysicsRigidBody(shape_2);
body_1.setPhysicsLocation(node_1.getWorldTranslation());
body_1.setPhysicsRotation(node_1.getWorldRotation());
body_2.setPhysicsLocation(node_2.getWorldTranslation());
body_2.setPhysicsRotation(node_2.getWorldRotation());
this.collision_world.addCollisionObject(body_1.getObjectId());
this.collision_world.addCollisionObject(body_2.getObjectId());
CollisionAlgorithm algo = this.collision_world.getDispatcher().findAlgorithm(body_1.getObjectId(),
body_2.getObjectId());
ManifoldResult contact_point_result = new ManifoldResult(body_1.getObjectId(), body_2.getObjectId());
algo.processCollision(body_1.getObjectId(), body_2.getObjectId(), this.collision_world.getDispatchInfo(),
contact_point_result);
boolean collide = false;
ObjectArrayList<PersistentManifold> manifolds = new ObjectArrayList<PersistentManifold>();
algo.getAllContactManifolds(manifolds);
for (PersistentManifold manifold : manifolds)
{
int num_contacts = manifold.getNumContacts();
if (num_contacts > 0)
{
collide = true;
}
}
this.collision_world.removeCollisionObject(body_1.getObjectId());
this.collision_world.removeCollisionObject(body_2.getObjectId());
return collide;
}
CollisionWorld is initalized by this method:
public void initCollsionDetection(boolean force)
{
DefaultCollisionConfiguration collisionConfiguration = new DefaultCollisionConfiguration();
CollisionDispatcher dispatcher = new CollisionDispatcher(collisionConfiguration);
this.world_aabb_min = new Vector3f(-1000, -1000, -1000);
this.world_aabb_max = new Vector3f(1000, 1000, 1000);
AxisSweep3 broadphase = new AxisSweep3(this.world_aabb_min, this.world_aabb_max);
this.collision_world = new CollisionWorld(dispatcher, broadphase, collisionConfiguration);
}
Maybe there is a better way to do this, what i need is a simple method
that tells if two nodes collide with each other, but accurate collision
based on meshes not on bounding boxes.
Any ideas?