Float Vectors precicion

I’m pretty sure someone has already asked that, but I couldn’t find it, sry. I’m also not completely sure if the whole problem is just a misunderstanding…
jMonkeyEngine uses floats to describe a position in scene. A float has a precicion of 7 digits. Now assume 1f = 1m ingame. When I now assume that a precition error of >1mm is visible (0,01), this would mean the maximum world’s size is 10km(Amount of objects is irrelevant cause my game dynamically unloads distant objects), and after that small objects would get precition errors. Which would be the ->best<- solution to solve this problem? (Or is this just a problem my mind is doing to me and wouldn’t happen at all?)
My actual solution would be that, say, at 7km a new “root” point is created and all objects get a new relative position. I’m not too sure if this would take too much ressources. Another idea I had would be moving the world instead of the character (the world moving under the camera and not the camera over the world), this would automatically resolve the problem when I use subroot points, but would’t this need much more resources as all geometry has to be position-updated every frame? Which would be the best solution?


I think is the best way to achieve your “precision” problem, and i think this way is also used in world paging system. Moreover you don’t have to update all geometry position since there are relative to the parent Node (root).

Basic theory: move the world and not the camera.

Your game objects can have their position in whatever representation you want. When you are building the local view for the camera you offset the positions by the camera’s world position to create local space. Therefore, the visualization is never less precise than the immediately viewable area and anyway things where you lose precision will be really far from the camera.

OpenGL is float based anyway… so no matter what you do, sometime will have to boil down to local relative positions in float.