Ok, give this a try (to see if my logic about flipping x and z in camera space to rotate the scene properly is incorrect). Set up your scene as you did earlier where you can see the characters from looking sideways at the scene (i.e. comment out matrix thing, FOV to 45, position of camera -y/z flipped and camera.lookAt to the position of Max's camera's target). Then call the following method:
public void rotateScene90( Object3D[] sceneObjects, SimpleVector lookTarget, Camera camera )
{
SimpleVector sourcePosition, targetPosition, translation;
for( int x = 0; x < sceneObjects.length; x++ )
{
// convert object's position into camera space:
sourcePosition = new SimpleVector( sceneObjects[x].getTransformedCenter() );
sourcePosition = sourcePosition.calcSub( camera.getPosition() );
sourcePosition.matMul( camera.getBack() );
// determine the new position (in camera space):
targetPosition = new SimpleVector(sourcePosition.z, sourcePosition.y, sourcePosition.x );
// convert new position into world space:
targetPosition.matMul( camera.getBack().invert3x3() );
targetPosition.add( camera.getPosition() );
// translate to the new position:
sceneObjects[x].translate( targetPosition.calcSub( sceneObjects[x].getTransformedCenter() ) );
}
// convert the look-target into camera space:
sourcePosition = new SimpleVector( lookTarget );
sourcePosition = sourcePosition.calcSub( camera.getPosition() );
sourcePosition.matMul( camera.getBack() );
// determine the new look-target (in camera space):
targetPosition = new SimpleVector(sourcePosition.z, sourcePosition.y, sourcePosition.x );
// convert the new look-target into world space:
targetPosition.matMul( camera.getBack().invert3x3() );
targetPosition.add( camera.getPosition() );
// look toward the new look-target:
SimpleVector look = targetPosition.calcSub( camera.getPosition() ).normalize();
SimpleVector up = camera.getYAxis();
up.scalarMul( -1 ); // Bug fix, shouldn't be necessary? Try removing if scene is upside-down
camera.setOrientation( look, up );
}
Notice the bug fix for the setOrientation issue. Depending on the scene, the call to up.scalarMul( -1 ) may or may not be necessary (remove it if the scene winds up upside-down).