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.

glPushMatrix();
	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();
			glColor3fv(unitColors[i].getVals());
			glNormal3fv(unitNorms[i].getVals());
			glVertex3fv(unitVerts[curIndices[0]].getVals());
			glVertex3fv(unitVerts[curIndices[1]].getVals());
			glVertex3fv(unitVerts[curIndices[2]].getVals());
			glVertex3fv(unitVerts[curIndices[3]].getVals());
		}	
	glEnd();
glPopMatrix();

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.

Thanks.

Recommended Answers

All 3 Replies

>>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
glPushMatrix();
//rotation code here
glPopMatrix();

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.

Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.