Sign in to follow this  
mohei

OpenGL more confused with rotation

Recommended Posts

Hi, I am trying to get a better grip of coordinate systems and transforms in opengl and I thought I was getting somewhere but then this confused me even more. I thought with the code before, I could get each rotation to revolve around the cube's local x,y,z axis. However after rotating it in many diretions in all 3 axis, it seems like only in the z-axis is it obviously rotating around that local axis. With the other two, x and y, the rotations aren't aligning with the local x and y axis. It seems like the rotations are around a constant world or screen x and y axis?? . I guess the next question is, how do I do it so I can rotate this cube in any number of degrees around any of the 3 axis and have it appear as though they are all revolving around each local x, y, z axis at all times?
void RenderScene(void)
	{

	glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);

	glMatrixMode(GL_MODELVIEW);
	glLoadIdentity();
	
	glTranslatef(0.0f, -50.0f, -300);

	glRotatef(xRot, 1.0f, 0.0f, 0.0f);
	glRotatef(yRot, 0.0f, 1.0f, 0.0f);
	glRotatef(zRot, 0.0f, 0.0f, 1.0f);
	
	
	// Draw Lines
	glLineWidth(1);
	glColor3ub(255, 0, 0);

	glBegin(GL_LINES);
		glVertex3f(0.0f, 0.0f, 0.0f);
		glVertex3f(500.0f, 0.0f, 0.0f);	
	glEnd();

	glColor3ub(255, 255, 255);

	glBegin(GL_LINES);	
		glVertex3f(0.0f, 0.0f, 0.0f);
		glVertex3f(0.0f, 0.0f, 500.0f);
	glEnd();

	glColor3ub(0, 0, 255);
	glBegin(GL_LINES);	
		glVertex3f(0.0f, 0.0f, 0.0f);
		glVertex3f(0.0f, 500.0f, 0.0f);
	glEnd();

        //draw cube
        glColor3ub(255, 255, 0);
	glutWireCube(30.0f);
	

	glutSwapBuffers();
	}

Thanks. m

Share this post


Link to post
Share on other sites
Try adding this line before glutSwapBuffers();

glTranslatef(0.0f, 50.0f, 300);

Not entirely sure it will help, but I remember having the same problem, and it has to do with translations. I think I solved by it by translating back to the origin at the end of the rendering procedure.

Share this post


Link to post
Share on other sites
Seems like you're suffering from gimbal lock.
I suggest you get a better understanding of how things rotate in 3D. There's always only one axis of rotation for an object rotating at a constant angular velocity.

Share this post


Link to post
Share on other sites
Quote:
Original post by Eldritch
Try adding this line before glutSwapBuffers();

glTranslatef(0.0f, 50.0f, 300);


That won't do anything. glLoadIdentity() at the beginning does exactly what it says.

Share this post


Link to post
Share on other sites
mmmm...I have been looking around on all sorts of resources today on this topic and I guess after my bit of study, isn't what I am looking for basically a 6 DOF kind of motion? And if so, haha, okay I guess it is not so easy. Guess I will do a bit more study first.

Thanks!
m

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this