Model roll while moving

So I was able to get mouse "click to move" working in the little project that I'm trying out. However, what's eluding me now is getting my model to lean while it's turning towards it's destination.

So far, I've got this as the main engine for the movement:

private static class shipMoveController extends Controller {
      private static final long serialVersionUID = 1L;

      private final Ship ship;
      private Vector3f desiredLocation;
      private boolean moving;
      private final Vector3f upAxis = new Vector3f(0, 1, 0);
      private final Vector3f temp = new Vector3f();

      public shipMoveController(final Ship ship) {
         this.ship = ship;

      public void setDesiredLocation(final Vector3f location) {
         desiredLocation = location;
         moving = true;

      public Vector3f getDesiredLocation() {
         return desiredLocation;

      public void update(final float time) {

         if (!moving) {

         final Vector3f directional = desiredLocation.subtract(ship
               .getLocalTranslation(), temp);

         ship.getLocalRotation().lookAt(directional, upAxis);

         final float length = directional.length();
         if (length < 5) { // if it's around x units
            moving = false;

         float shipFlyDistance = ship.getVelocity() * time;
         if (shipFlyDistance > length) {
            shipFlyDistance = length;
         directional.multLocal(shipFlyDistance / length);



The ship.getLocalRotation().lookAt(directional, upAxis); is the meat of it all right now, but it turns the model really quickly into the direction of interest and the model starts to accelerate. The behavior I want is for:
a) the user to click a desired location (already defined with Rays etc)
b) the model to start moving in the current direction.
c) the model to gently turn in the direction of the location of interest (based on some turn rate parameter).

...any ideas?

Was thinking of some kind of while statement to check the angle of the model's current heading to the location of interest, but I'm confused how that would work.

Any help would be appreciated.


You have a total rotation you want to accomplish  right?  Set your self a "turn rate" that is how much the object can turn per ms.  Then in each update use the timer to see how much time has passed in each update and turn the model elapsedMsturnRate or whatever is left to reach the desired rotation iof it is less then elapsedMsturnRate.

This will ease you into the turn.  It will not however make the model "lean".  At that point you are probably talking having to do a real car-physics model or it will look cheesy.