PDA

View Full Version : Rotation point?!



M109uk
24-08-2004, 05:26 AM
Hi all,

Is there any way of setting an axis point for rotation?

Im currently using glRotate(angle, 0,0,1); but this will rotate the texture by its lower left cornour, but i want it to be rotated by maybe the center of the texture or maybe the top right cornour!
Is this possible?

Thanx for any help :)

Paulius
24-08-2004, 10:32 AM
If you want to mess with the texture matrix then you have to multiply it with a translation matrix (to bring it's center point to 0,0), then by rotation matrix and another translation matrix to get it back in position, but if you're transforming not a lot of points it will be faster to just rotate texture coordinates by hand.
X:= X ?_" CenterX;
Y:= Y ?_" CenterY;
NewX:= X * Cos(Angle) ?_" Y * Sin(Angle) + CenterX;
NewY:= Y * Cos(Angle) + X * Sin(Angle) + CenterY;

M109uk
24-08-2004, 03:22 PM
Thanx,

I think i understand what you mean, i have to translate to the center of the texture, rotate it then translate it back to original?

I have tried the following just to get it working:

glPushMatrix;
glMatrixMode(GL_TEXTURE);
glLoadIdentity;

.... Other code ....

Center[0] := Width of face div 2
Center[1] := Height of face div 2

X := 0-Center[0]; // Gives me the lower left cornour
// X := 1-Center[0]; // Gives me the upper right cornour
Y := 0-Center[1]; // Gives me the lower left cornour
// Y := 1-Center[1]; // Gives me the upper right cornour

X := X*Cos(Angle)-Y*Sin(Angle)+Center[0];
Y := Y*Cos(Angle)-X*Sin(Angle)+Center[1];

Angle := Rotation*ElapsedTime;

glTranslatef(X, Y, 0);
glRotatef(Angle, 0, 0, 1);
glTranslatef(-X, -Y, 0);

glMatrixMode(GL_MODELVIEW);


Im guessing im doing something wrong here?

M109uk
24-08-2004, 03:29 PM
Ok no worries, i have solved my problem (by mistake).

I just simply used:

glTranslatef(0.5, 0.5, 0);
glRotatef(Rotation*ElapsedTime);
glTranslatef(-0.5, 0.5, 0);


and it works great.

Thanx again for you help :D