Part of the Khronos Group
OpenGL.org

The Industry's Foundation for High Performance Graphics

from games to virtual reality, mobile phones to supercomputers

Results 1 to 10 of 10

Thread: Texture mapping problems...

  1. #1
    Intern Contributor
    Join Date
    Apr 2000
    Location
    Salt Lake City, UT
    Posts
    55

    Texture mapping problems...

    I have basic texture mapping working. I have a targa mapped onto a quad. However, if I try to enable depth testing or backface culling, the quad disappears. Does texture mapping not work with depth testing/backface culling?

    Thanks,
    Greg

  2. #2
    Junior Member Newbie
    Join Date
    Mar 2001
    Location
    STHLM
    Posts
    2

    Re: Texture mapping problems...

    well, try to "flip" your quad. Perhaps you drawn it backwards so when you enable backface culling you disable your quad.

  3. #3
    Intern Contributor
    Join Date
    Apr 2000
    Location
    Salt Lake City, UT
    Posts
    55

    Re: Texture mapping problems...

    Thanks Dixie Dude, it was there. I'm a moron.

    Now I have a different problem. When I rotate the quad along the X or Y axis, the texture "stays in place." It looks like it's just projected through the quad, and not ON the quad. However, if I rotate along the Z axis, the texture rotates with the quad. What did I do?!!

  4. #4
    Senior Member OpenGL Pro
    Join Date
    Oct 2000
    Location
    Fargo, ND
    Posts
    1,797

    Re: Texture mapping problems...

    Are you giving specific texture coordinates or using glTexGen to generate texcoords for you?
    Deiussum
    Software Engineer and OpenGL enthusiast

  5. #5
    Intern Contributor
    Join Date
    Apr 2000
    Location
    Salt Lake City, UT
    Posts
    55

    Re: Texture mapping problems...

    I'm using specific coordinates.

    glBegin(GL_QUADS);
    glVertex3f(-25.0f, -25.0f, 0.0f); glTexCoord2f(0.0f, 0.0f);
    glVertex3f(25.0f, -25.0f, 0.0f); glTexCoord2f(1.0f, 0.0f);
    glVertex3f(25.0f, 25.0f, 0.0f); glTexCoord2f(1.0f, 1.0f);
    glVertex3f(-25.0f, 25.0f, 0.0f); glTexCoord2f(0.0f, 1.0f);
    glEnd();

    I haven't had any troubles learning OpenGL up to this point. Is texturemapping that hard?

  6. #6
    Senior Member OpenGL Pro
    Join Date
    Oct 2000
    Location
    Fargo, ND
    Posts
    1,797

    Re: Texture mapping problems...

    You've got things backwards there. You need to put the glTexCoord calls first. Think of it as a state machine... when you call glVertex it will use whatever the current texcoord/color/etc is. Since you don't set the texcoords until AFTER the vertex, that texcoord won't be used until the NEXT vertex call. So... on the next drawn frame your first vertex is going to have the texcoord that you used on your last line there.
    Deiussum
    Software Engineer and OpenGL enthusiast

  7. #7
    Intern Contributor
    Join Date
    Apr 2000
    Location
    Salt Lake City, UT
    Posts
    55

    Re: Texture mapping problems...

    Ah. Now the bitmap is rightside-up, but the other problem still exists. It still looks like the texture is just projected on to the quad, so when I rotate the quad around the Y or X axis, the texture doesn't foreshorten. Any ideas?

  8. #8
    Senior Member OpenGL Guru
    Join Date
    Mar 2001
    Posts
    3,768

    Re: Texture mapping problems...

    There are three possibilities.

    1) You aren't setting anything in the texture matrix, right?

    2) You may want to try glHint(GL_PERSPECTIVE_CORRECT) (I think that's the right syntax for it).

    3) Also, though I doubt this is the cause, make sure you aren't putting your camera matrix in your GL_PROJECTION matrix. It could call perspective correction problems.

  9. #9
    Intern Contributor
    Join Date
    Apr 2000
    Location
    Salt Lake City, UT
    Posts
    55

    Re: Texture mapping problems...

    Deiussum and Korval,
    I have no idea what I've done. From what I can see (which ain't much, I'm relatively new to this), I don't see what I'm doing wrong. So, here's the code that I do have:

    #include <GL/glut.h>

    #include "gtBitmap.h"

    const int msecs = 5;

    GLuint textureObj[1]; // Texture object to hold our texturemap
    GLfloat rot = 0.5f,
    xrot = 1.0f,
    yrot = 0.0f,
    zrot = 0.0f;

    void myDisplayFunc() {
    glClear(GL_COLOR_BUFFER_BIT);
    glLoadIdentity(); // Reset modelview matrix

    glColor3f(1.0f, 1.0f, 1.0f);

    glBindTexture(GL_TEXTURE_2D, *textureObj);
    glTranslatef(125.0f, 125.0f, 0.0f);
    glRotatef(rot, xrot, yrot, zrot);

    glBegin(GL_QUADS);
    glTexCoord2f(0.0f, 0.0f); glVertex3f(-25.0f, -25.0f, 0.0f);
    glTexCoord2f(1.0f, 0.0f); glVertex3f(25.0f, -25.0f, 0.0f);
    glTexCoord2f(1.0f, 1.0f); glVertex3f(25.0f, 25.0f, 0.0f);
    glTexCoord2f(0.0f, 1.0f); glVertex3f(-25.0f, 25.0f, 0.0f);
    glEnd();

    glutSwapBuffers(); // Swap the buffers
    }

    void myReshapeFunc(GLsizei width, GLsizei height) {
    GLfloat lightPos[] = {-50.0f, 50.0f, 100.0f, 1.0f};

    if (height == 0) // Avoid divide by zero
    height = 1;

    glViewport(0, 0, width, height); // Setup the viewport

    glMatrixMode(GL_PROJECTION); // Select the projection matrix
    glLoadIdentity(); // Reset the projection matrix

    if (width <= height)
    glOrtho(0.0f, 250.0f, 0.0f, 250.0f*height/width, 1.0f, -1.0f);
    else
    glOrtho(0.0f, 250.0f*width/height, 0.0f, 250.0f, 1.0f, -1.0f);

    glLightfv(GL_LIGHT0, GL_POSITION, lightPos); // Position the light

    glMatrixMode(GL_MODELVIEW); // Select the modelview matrix
    glLoadIdentity(); // Reset the modelview matrix
    }

    void myTimerFunc(int val) {
    // Do animation stuff here
    if (rot >= 360.0f)
    rot -= 360.0f;
    rot += 0.5f;
    glutPostRedisplay();
    glutTimerFunc(msecs, myTimerFunc, 1);
    }

    void SetupRC() {
    gtTarga tempTexture("northrim_ball.tga"); // Load up temporary env map into memory
    tempTexture.reverseRows(); // Upside down, flip it
    tempTexture.buildTexture(textureObj); // Build the texture object

    glClearColor(0.0f, 0.0f, 0.0f, 1.0f); // Set the background color
    glColorMaterial(GL_FRONT, GL_AMBIENT_AND_DIFFUSE);

    //glEnable(GL_CULL_FACE); // Enable backface culling
    //glEnable(GL_DEPTH_TEST); // Enable depth testing
    //glClearDepth(1.0f);

    glEnable(GL_COLOR_MATERIAL); // Enable color tracking
    glEnable(GL_TEXTURE_2D); // Enable textures

    glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST);

    glShadeModel(GL_SMOOTH); // Set shading to smooth
    }

    int main(int argc, char* argv[]) {
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutCreateWindow("Texturemap_001");
    glutDisplayFunc(myDisplayFunc);
    glutReshapeFunc(myReshapeFunc);
    glutTimerFunc(msecs, myTimerFunc, 1);
    glutKeyboardFunc(myKeyboardFunc);

    SetupRC();

    glutMainLoop();

    return 0;
    }

    And here's what I do to build the texture:

    glGenTextures(1, &textureObj[0]);

    glBindTexture(GL_TEXTURE_2D, *textureObj);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
    gluBuild2DMipmaps(GL_TEXTURE_2D, GL_RGBA, width, height, GL_RGBA, GL_UNSIGNED_BYTE, pixelList);
    glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, width, height, 0, GL_RGBA, GL_UNSIGNED_BYTE, pixelList);


    [This message has been edited by gtada (edited 06-01-2001).]

  10. #10
    Senior Member OpenGL Pro
    Join Date
    Oct 2000
    Location
    Fargo, ND
    Posts
    1,797

    Re: Texture mapping problems...

    Your primary problem is that you are using an orthographic projection matrix, which does not do any perspective correction for you. What that means is, that your quad will look the same no matter how far away it. Try using gluPerspective instead.

    Secondly, you have your far plane set to a lower value than your near plane. While that isn't what was causing your issue in this case, it would probably be wise not to do that. Note that when you use gluPerspective both the near and far planes MUST > 0.0. (Note: NOT >= 0.0 but > 0.0) Using 0 for the near clip plane will cause problems, just as using a far clip plane < the near plane will cause problems.
    Deiussum
    Software Engineer and OpenGL enthusiast

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •