Sign in to follow this  
Klownterfit

Rotating an object

Recommended Posts

Klownterfit    122
How would you go about rotating an object 20 degrees, without the object moving any. I mean, the 3 vertices of a triangle would all rotate around the center 20 degrees. This is the code right now. glRotatef(20.0f,0.0f,0.0f,1.0f) It rotates the triange correctly, but also moves it. http://imagecloset.com/8/03111010-movement.JPG Top right is where it starts, and then the bottom left is where it ends up after glRotate The code looks like this
void DrawTri(float x,float y,float r,float g,float b,float a,float size,float angle)
{
	glPushMatrix();
	glLoadIdentity();
	glDisable(GL_TEXTURE_2D);
	glRotatef(20.0f,0.0f,0.0f,1.0f); // Z rotates its like a 'fan' ?
	glBegin(GL_TRIANGLES);
	glColor4f(r, g, b, a);
	glVertex3f((x+size/2),(y - (size*2)), 0.0f);
	glVertex3f(x,y, 0.0f);
	glVertex3f(x+size,y, 0.0f);
	glEnd();
	glEnable(GL_TEXTURE_2D);
	glPopMatrix();
}
All of the variables work correctly, when there is no glRotate it's fine. Any suggestions?

Share this post


Link to post
Share on other sites
haegarr    7372
Take a look at this thread
http://www.gamedev.net/community/forums/topic.asp?topic_id=377897
and/or at this thread
http://www.gamedev.net/community/forums/topic.asp?topic_id=380493
which both deal with the same problem (although in another context).

Now think about the correct origin of your rotation, so that the tri isn't translated (dozens of possibilities exist; I have a link somewhere, but I don't find it ...). I suggest to use
O := 0.3 * ( v1 + v2 + v3 )
as the center for a first attempt, where vi denote the 3 vertices of your tri.

Share this post


Link to post
Share on other sites
Klownterfit    122
I really don't understand what you're saying.

From those topics, it looks like I need to translate the object to (0,0), then rotate it, then translate it back?

from the function above, I'm using the command.

DrawTri(500,500,1.0f,0.0f,0.0f,1.0f,10.0f,30.0f);

So it is drawing the triangle at 500,500.

The game has downwards resolution, (0,0) is at the top left corner, and moving right or down is both positive. I'm not sure if that's having any effect.

But, I have tried this.

glTranslatef(-500.0f,-500.0f,0.0f)
glRotatef(20.0f,0.0f,0.0f,1.0f)
glTranslate(500.0f,500.0f,0.0f)

And it no longer draws it when I use that.

Share this post


Link to post
Share on other sites
jyk    2094
I didn't read the whole thread, but try changing this:
glTranslatef(-500.0f,-500.0f,0.0f)
glRotatef(20.0f,0.0f,0.0f,1.0f)
glTranslate(500.0f,500.0f,0.0f)
To this:
glTranslatef(500.0f,500.0f,0.0f)
glRotatef(20.0f,0.0f,0.0f,1.0f)
glTranslate(-500.0f,-500.0f,0.0f)
Or better yet, store your geometry in local coordinates and centered at the origin. This is how it's usually done, and will avoid the translate-rotate-translate problem.

Share this post


Link to post
Share on other sites
Klownterfit    122
Ok, we got the issue resolved by translating to the correct vector and drawing the vertex at the translated position instead of drawing the vertex without translating.

Thanks for your help.

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