Physics problem


#1

Hello Guys,
When applying physics forces on the sample Sinbad model I’m having two issues:

  1. The various geometries are separated from each other (upper body, legs, cloth etc.) so now it doesn’t behave like one entity.
  2. The chase camera stops following Sinbad

Here is a clip showing the problem

Here is the code which I’m using to add Sinbad’s geometries to the physics app state:

SceneGraphVisitor visitor = new SceneGraphVisitor() {

        @Override
        public void visit(Spatial spatial) {
            if(spatial instanceof Geometry) {
                Geometry geometry = (Geometry)spatial;
                CollisionShape shape = CollisionShapeFactory.createDynamicMeshShape(geometry);
                //shape.setMargin(0.01f);
                shape.setScale(scale);
                RigidBodyControl collisionControl = new RigidBodyControl(shape, 1f);
                
                //collisionControl.setKinematic(true);
                geometry.addControl(collisionControl);
                String geoKey=modelName+"~"+geometry.getName();
                geometry.setName(geoKey);
                geoName2ModelName.put(geoKey,modelName);
                bulletAppState.getPhysicsSpace().add(collisionControl);
                ctls.add(collisionControl);// cache control

            }
        }
    };
    model.breadthFirstTraversal(visitor);

#2

The Sinbad model consists of 7 geometries, each with its own Mesh. Your SceneGraphVisitor creates a physics body for each Geometry, and there’s nothing in the physics to hold them together. The physics doesn’t know about bone animations, and the SkeletonControl that performs the skinning doesn’t know about the physics.

In order to make physics and animation talk to one another, you need a specialized physics control, such as KinematicRagdollControl or DynamicAnimControl.


#3

Thank you Stephen. Do you recommend using Minie for solving this issue?


#4

Can you use a node and attach the control to it instead?

The model is then just used for visuals/animations and goes along for the ride.


#5

In order to use DynamicAnimControl, you’d either have to use Minie or JME 3.3-alpha; DynamicAnimControl doesn’t exist in JME 3.2.x .

If you’re using JME 3.2.x and don’t want to deal with an external library, then KinematicRagdollControl should work fine.


#6

Thanks, I’m in the process of replacing JME bullet libs with Minie. I have just noticed that JDK 8 and above is needed for Minie.