Jump to content
  • Advertisement
Sign in to follow this  

3D Texture transformation

This topic is 3476 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 everybody, I've been working on this problem for almost 2 weeks now and it's driving me crazy! Maybe you guys can help me. I have a 3D texture that I map to a series of quads and I manipulate the texture matrix in order to rotate the texture (instead of chaning the modelview matrix). So far so good. However, I realized that calling glRotate3f(90, 0.0, 0.0, 1.0) does not rotate my texture in counterclockwise direction around the z-axis, but in clockwise direction. The other two axis seem to be fine. I can't figure out what the problem is, but I wrote a little test program in which I apply exactly the same operations to a 3d vertex by manipulating the modelview matrix and everything works fine. I have a feeling that something is wrong with my way of mapping texel coords to quads... Here some part of my code
glMatrixMode ( GL_TEXTURE );
// shift origin to center of texture
glTranslatef ( 0.5, 0.5, 0.5 );
// apply transformation
glRotatef(90, 0.0, 0.0, 1.0);
// shift back
glTranslatef ( -0.5, -0.5, -0.5 );
glMatrixMode ( GL_MODELVIEW );

float tex_z;
int num_quads = 200;

for(int z = num_quads - 1; z >= 0; z --)
    tex_z = (GLfloat)z / (GLfloat) num_quads;		

    glTexCoord3f( (GLfloat) 0.0, (GLfloat) 0.0, tex_z );      		    
    glVertex3f( -win_w / 2.0, -win_h / 2.0, 0 );
    glTexCoord3f( (GLfloat) 1.0, (GLfloat) 0.0, tex_z );    
    glVertex3f(  win_w / 2.0, -win_h / 2.0, 0 );

    glTexCoord3f( (GLfloat) 1.0, (GLfloat) 1.0, tex_z );
    glVertex3f(  win_w / 2.0,  win_h / 2.0, 0 );

    glTexCoord3f( (GLfloat) 0.0, (GLfloat) 1.0, tex_z );
    glVertex3f( -win_w / 2.0,  win_h / 2.0, 0 );

Everything seems pretty straight forward, but it's the first time I work with 3D textures, so hopefully you guys can help me. Is it possible that the texture coordinate system is oriented differently? Thank, Dave

Share this post

Link to post
Share on other sites

let me explain it in a different and simpler way:

When using 3d textures, no matter how I map texel coords to quad vertices, one dimension always has the wrong orientation. In case of the code posted, it's the z axis, meaning that glRotate(20, 0.0, 0.0, 1.0) rotates in CLOCKWISE direction instead of counterclockwise. Rotations around the x and y axis are as expected.

Interestingly enough, when using 2D textures glRotate(20, 0.0, 0.0, 1.0) has the desired effect.

Could it be a bug in the openGL implementation (I know it's unlikely)=

Maybe this will help you guys helping me ;-)

Share this post

Link to post
Share on other sites
Yes I did. A negativ rotation has the disired effect, which makes me believe that the z axis isn't oriented corretly...maybe because I'm messing something up when mapping texture coordinates. I'm not sure. However, I can't just invert the rotation because I need the texture matrix as an input for some kind of clipping algorithm, which assumes that axis are oriented the way they are supposed to be.


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!