Jump to content
  • Advertisement
Sign in to follow this  
mohei

OpenGL more confused with rotation

This topic is 4751 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

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
Advertisement
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
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

Participate in the game development conversation and more when you create an account on GameDev.net!

Sign me up!