# Composed object transformation behaviour

So, I have an scene which is a “cube” composed of smaller cubes, like a rubik cube but the cubes are spaced CUBES_SPACE units on each size.

The problem is that when I apply a rotation function to the modelview matrix (after doing some translations, see below) the rotation does not make the behaviour I expect.

The way I create the composed cube is to call 3 loops:

from 1 to X
gltranslatef(x,0,0)
pushmatrix()
from 1 to Y
gltranslatef(0,y,0)
pushmatrix()
from 1 to Z
gltranslatef(0,0,z)
DrawSmallCube
end from 1 to z
popmatrix()
end from 1 to y
popmatrix()
end from 1 to x

Now, with this I get my cube drawn just fine, but then, what I want to do is to be able to rotate the whole cube on the X, Y or Z axis (just one axis each time) using the center of the composed cube as the pivot for rotation.

The way I try to do this is:

1. translate modelview matrix to (-BigcubeXlength/2, BigcubeYlength/2, BigcubeZlength/2).

Bigcube{X,Y,Z}length are the lenghts of the composed cube on each axis. And is calculated something like:
BigcubeXlength = NUMBER_OF_CUBESCUBE_LENGTH+NUMBER_OF_SPACESSPACES_LENGTH

NUMBER_OF_SPACES is just NUMBER_OF_CUBES-1. Because if I have 4 cubes the actual big cube will be 4+3 units long (if each cube and space is 1 unit ong): for example the front face of my cube is made of small cubes (each # represents one small cube

# # #

I do this because IIRC, that will put the center of the cube on the (0,0,0 ) coordinates. I do that adding a "gltranslatef(…) function before the previous cycles.

Now my problem is that although teorethicaly it is right, when I rotate the cube it gets rotated from an arbitrary point inside the cube, as if my equations to get the center (the -BigcubeXlength/2 equations) where wrong.

I know these explaniation is horrible but if someone has any experience with this kind of models I would be really glad if she/he could help
me.

I am developing in DevC++ with OpenGL+SDL. I have some knowledge of GL although I am in any waya guru or anything similar, so I am sure it must be a tiny error. I can show all my code if someone is willing to help me.

Of course, if anyone knows of a good document[online or offline]/tutorial that talks about moving sets of objects on a scene and the pivot point I would also appreciate it as I think my problem is more mathematical than from opengl.

Cheers!

Call the whole cube rotation at the beginning of drawing the cube before you do all the smaller transformations which will then be relative to your root rotation.