Can you describe if few words how you did scene scaling? For me the solution is only the following: I always have my cam at (0,0,0) and manually move, rotate and scale all the scene objects. And also, a nice idea just came to my mind - if I have large scene (logarithmically scaled) any movement with cam would move it in position like (12345,0,0) or further. If there would be a a function to tell cam that this new far position is now (0,0,0), and all scene object were recalculated according to this new cam position (or I can say the center of everything), that will definitely spare a lot of time and nerves.
Thanks!
I wrote a set of convenience classes with names like "Rotator", "Translator", etc that all take into account the scale. It's a very simplistic approach, but it seems to have put us in the safe zone for what does and doesn't cause graphical glitches. Since we don't need accuracy down any closer than hundredth of a meter, we can essentially divide the whole scene by 100 without losing any accuracy.
To demonstrate what I mean by this, a float will have precision to the fourth place: 45.1234, when thinking of a single float unit as a meter, this is accuracy to the ten thousandth of a meter! Dividing by 100 gives us .4512, which in a scene scaled down by 100 would equate to 45.12 meters.
Under the hood, it basically looks like:
//SCENE_SCALE is a constant in the class
public void moveX(int metersToMove){
spatial.getLocalTranslation().setX(spatial.getLocalTranslation().getX()+(metersToMove/SCENE_SCALE));
}