I am making a rubix cube game in OpenGL and I have run into a problem with rotations. When doing multiple rotations (x, y, z) the axis gets rotated as well (ie when doing an x-axis rotation of 90 or 270 deg the y-axis becomes the z-axis and z-axis becomes the y-axis).
Is there any way to stop the axis from rotating but allowing the object to translate or is there a trick to get around this.

Here is a small part of my code for the translations.

	glRotatef(xrot, 1.0, 0.0, 0.0); //rotates the unit cube into place
	glRotatef(yrot, 0.0, 1.0, 0.0);
	glRotatef(zrot, 0.0, 0.0, 1.0);
	glTranslatef(xoff, yoff, zoff);  //translates the unit cube into place
	glRotatef(xrotset, 1.0, 0.0, 0.0); //rotates the unit cube in its place 
	glRotatef(yrotset, 0.0, 1.0, 0.0);
	glRotatef(zrotset, 0.0, 0.0, 1.0);

	glBegin(GL_QUADS); //draws the cube
		for( int i = 0; i < unitIndices.size(); i++ )
			GLint *curIndices;
			curIndices = unitIndices[i].getVals();

This is just how I have the drawing for each unit cube 27 of these make up the "rubix cube". The problem lies in the xrot, yrot and zrot lines.


>>Is there any way to stop the axis from rotating but allowing the object to translate or is there a trick to get around this.

Yes, use push and pop matrix for that, as well as return the original coordinate back in place , see below :

//save current matrix for only the code between the push/pop
//rotation code here

And when you want to reset coordinates, after translation to an object,

glTranslatef(x,y,z); //moves object to a certain coordinates
//blah blah
glTranslatef(-x,-y,-z); //resets the coordinate back to its regular position, thus the blah blah has its own relative positioning.

The program runs perfectly and draws fine but when you do a x rotation the y axis changes so then when you do a y rotation on that it ends up rotating the z axis. I kinda dropped this mini project for now just because I see now if I want it to work I have to change a whole bunch of stuff.

Just remember that when rotating an object, you should rotate the world in opposite direction to make the world coordinate the same relative to that object.