I think the answer really depends upon how you render your scene - one big object (lots of polys - single draw call) or many objects each with their own draw calls.

In OpenGL, objects are positioned in the scene by constructing a MODEL-VIEW matrix which is used to ‘transform’ the verticies of any given model (object). The VIEW part of the OpenGL MODELVIEW matrix is just the camera, and in an ideal world, the MODEL part of the MODELVIEW matrix is an identity matrix. The effect of this is that the model is drawn into the scene and in a way that is viewable by the camera.

To move the object, you just alter the MODEL part of the current MODELVIEW matrix and voila (all the verticeis of the model are transformed into the new position).

In the simplest of cases, all you have to do is:

Setup camera with glulookat…

glpushmatrix; //save the current OpenGL camera state

gltranslatef (x,y,z); //move object to new position in World space

drawmyobject;

glpopmatrix; //restore OpenGL MODELVIEW matrix

The effect of the glTranslatef command is to build a transalation matrix from X,Y,Z and alter the current MODELVIEW matrix to use this new one as the translation. This is why the current state must be saved between drawing multiple objects.

There are many tutotials on this, the OpenGL Pramming Guide (or Red book) and Web tutorials like www.NeHe.gamedev.net or www.Lighthouse3D.com are all excellent.

The assumption i’m making is that your object(s) is being transformed by XYZ as opposed to parts of your object being transformed by different values. The latter would be much harder than just moving the entire object along a vector and would mean recalcuating each and every vertex position for the effected regions of the object. Just how you break an arbitary mesh into smaller peices for manipulation like is is unknown to me.

Hope I helped (a bit).