the easiest way if to keep units identical to the real world. Then, if you need to, you can rescale the position into the opengl units for rendering.
this is how I''d do it for a particle moving through space, and under the influence of gravity.
struct CParticle{ Vector Position; Vector Velocity; Vector Acceleration; void CParticle(const Vector& Pos, const Vector& Vel) : Position(Pos) , Velocity(Vel) , Acceleration(0, 0, 0) {} void Update(void); void Render(void) const;};void CParticle::Update(float dt) // dt = passed time since last update{ Acceleration = (0, -9.81f, 0); // gravity Velocity += Acceleration * dt; Position += Velocity * dt;}void CParticle::Render(void) const{ Vector RenderPos = OpenGLRenderer::PhysicsUnitsToOpenGLUnits(Position); glBegin(GL_POINTS); glVertex3fv(&RenderPos.x); glEnd();}
but usually, either you set the viewport to a scale, or you apply a scaling modelview matrix to the whole world.