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.