Rotating a Texture on a Quad

Started by
3 comments, last by Mona777 15 years, 7 months ago
Hi I'd be ever so grateful if you know and give the answer to this: I'm trying to put a texture image on a quad, then constantly rotating it around the z axis (say a smiley face on a square). But somehow it keeps tiling the image or distorting it. I've bound the texture to a square in a function called drawTexRect() using glTexCoord2f and glVertex3f with every corner of the square being a bit inside the texture i.e., going from 0.2 to 0.8 , I've experimented with other mappings too. and then: float angle = 0.1, glBindTexture(GL_TEXTURE_2D, tex); glMatrixMode(GL_TEXTURE); glLoadIdentity(); glRotatef(angle, 0.0, 0.0, 1.0); glMatrixMode(GL_MODEL_VIEW); drawTexRect(); then the angle become angle+= 0.1 in my animateFunction so that the image keeps rotating. I've even tried glTexParameteri(GL_TEXTURE_2D,GL_TEXTURE_WRAP_T, GL_CLAMP); but the image kept moving out of the quad. Many thanks
Advertisement
>>but the image kept moving out of the quad.
most likely since the rotation happens around 0,0 but u want it to happen at 0.5,0.5 the center of the quad

anyways better if do the rotation yourself

float c = cosf(rot);
float s = sinf(rot);

glTexCoord2f( 0.5+c, 0.5+s );
glTexCoord2f( 0.5+s, 0.5-c );
glTexCoord2f( 0.5-c, 0.5-s );
glTexCoord2f( 0.5-s, 0.5+c );
Quote:Original post by zedz
>>but the image kept moving out of the quad.
most likely since the rotation happens around 0,0 but u want it to happen at 0.5,0.5 the center of the quad


Probably but it's better to use the matrix to deal with animation.

3. glTranslatef(0.5, 0.5, 0.0);
2. glRotatef(angle, 0.0, 0.0, 1.0);
1. glTranslatef(-0.5, -0.5, 0.0);

1. moves the center {0.5, 0.5) at the {0, 0} point.
2. Does the rotation.
3. Restores the translation to where it was.
Sig: http://glhlib.sourceforge.net
an open source GLU replacement library. Much more modern than GLU.
float matrix[16], inverse_matrix[16];
glhLoadIdentityf2(matrix);
glhTranslatef2(matrix, 0.0, 0.0, 5.0);
glhRotateAboutXf2(matrix, angleInRadians);
glhScalef2(matrix, 1.0, 1.0, -1.0);
glhQuickInvertMatrixf2(matrix, inverse_matrix);
glUniformMatrix4fv(uniformLocation1, 1, FALSE, matrix);
glUniformMatrix4fv(uniformLocation2, 1, FALSE, inverse_matrix);
Thank you both so very much. I shall try out the suggestions and report back.
:O)
Thanks very much it worked. I translated the texture to the origin and translated it back.

This topic is closed to new replies.

Advertisement