Rotating a Texture on a Quad
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
>>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 );
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.
This topic is closed to new replies.
Advertisement
Popular Topics
Advertisement