i've looked at karga code: i also use a recurse depth of 1, hence not allowing the camera to slide. the main difference is, i dont use world.checkCameraCollisionEllipsoid(..) but world.checkCollisionEllipsoid(..) to calculate the farthest distance the camera can go, than interpolate between camera's current position and the calculated position. something like:
avatar.setVisible(false);
SimpleVector takeBackPoint = headOfAvatar();
SimpleVector moveableDistance = world.checkCollisionEllipsoid(takeBackPoint, takeBackDirection, cameraEllipsoid, 1);
avatar.setVisible(true);
SimpleVector desiredCameraPosition = new SimpleVector(takeBackPoint);
desiredCameraPosition.add(moveableDistance);
SimpleVector cameraPosition = interpolate(camera.getPosition(), desiredCameraPosition, smoothness); // 0.1is a good smoothness value
camera.setPosition(cameraPosition);
camera.lookAt(takeBackPoint);
this should feel like karga, you may add extra smoothness by interpolating camera lookAt position too
r a f t