In fact, I recently encountered the same problem in my implementation of rendering entire planets from space to earth. In fact, you need to create a new position structure that shares accuracy between different floats. For instance,
struct location
{
vec3 metre;
vec3 megametre;
vec3 terametre;
vec3 examtre;
vec3 yottametre;
};
Then you code all the operators and enter the translation functions for this structure (+, -, *, /, toVec3), then use this location structure to encode the location of your camera and each grid. During rendering, you do not translate the camera, but instead you translate fragments by difference. For instance:
void render()
{
location diff = this->position - camera.position;
vec3 diffvec = diff.toVec3();
glPushMatrix();
glTranslatef(diffvec.x, diffvec.y, diffvec.z);
glPopMatrix();
}
, OpenGL, , . , . O/p >
.