I can't help you much with the first question, but if I understand your second question correctly, I think you could use camera.getUpVector() and camera.getSideVector() to determine what directions in world space to translate the child. Then to take the parent's rotations into consideration, I recently wrote a method for doing that:
private void translateChild( Object3D childObject, SimpleVector translation )
{
Object3D[] parentObjects = childObject.getParents();
if( parentObjects == null || parentObjects.length == 0 )
{
childObject.translate( translation );
return;
}
Object3D parentObject = parentObjects[0];
Matrix m = new Matrix( parentObject.getWorldTransformation() );
float[] dm = m.getDump();
for( int i = 12; i < 15; i++ )
{
dm[i] = 0;
}
dm[15] = 1;
m.setDump( dm );
SimpleVector worldTranslation = new SimpleVector( translation );
worldTranslation.matMul( m.invert3x3() );
childObject.translate( worldTranslation );
}
Let me know if it doesn't work, or if this isn't what you are looking for.