OpenGL-ES Texture Mapping. Texture is reversed?

Posted by Feet on Stack Overflow See other posts from Stack Overflow or by Feet
Published on 2010-05-19T02:38:23Z Indexed on 2010/05/19 2:40 UTC
Read the original article Hit count: 379

Filed under:
|
|

I am trying to get my head around Texture mapping, I thought I had it the other day after asking this.

However, I am having some trouble with my texture coordinates being flipped from what I am expecting.

I am loading my texture like so

    int[] textures = new int[1];
    gl.glGenTextures(1, textures, 0);

    _textureID = textures[0];
    gl.glBindTexture(GL10.GL_TEXTURE_2D, _textureID);

    Bitmap bmp = BitmapFactory.decodeResource(
            _context.getResources(), R.drawable.die_1);
      GLUtils.texImage2D(GL10.GL_TEXTURE_2D, 0, bmp, 0);
      gl.glTexParameterx(GL10.GL_TEXTURE_2D,
            GL10.GL_TEXTURE_MIN_FILTER, GL10.GL_LINEAR);
      gl.glTexParameterx(GL10.GL_TEXTURE_2D,
            GL10.GL_TEXTURE_MAG_FILTER, GL10.GL_LINEAR);
      bmp.recycle();

My cube is this

float vertices[] = { 
            // Front face
            -width, -height, depth, // 0
            width, -height, depth, // 1
            width,  height, depth, // 2
            -width,  height, depth, // 3

            // Back Face
            width, -height, -depth, // 4
            -width, -height, -depth, // 5
            -width,  height, -depth, // 6
            width,  height, -depth, // 7

            // Left face
            -width, -height, -depth, // 8
            -width, -height, depth, // 9
            -width,  height, depth, // 10
            -width,  height, -depth, // 11

            // Right face
            width, -height, depth, // 12
            width, -height, -depth, // 13
            width,  height, -depth, // 14
            width,  height, depth, // 15

            // Top face
            -width,  height, depth, // 16
            width,  height, depth, // 17
            width,  height, -depth, // 18
            -width,  height, -depth, // 19

            // Bottom face
            -width, -height, -depth, // 20
            width, -height, -depth, // 21
            width, -height, depth, // 22
            -width, -height, depth, // 23
    };

    short indices[] = { 
            // Front
            0,1,2,
            0,2,3,
            // Back
            4,5,6,
            4,6,7,
            // Left
            8,9,10,
            8,10,11,
            // Right
            12,13,14,
            12,14,15,
            // Top
            16,17,18,
            16,18,19,
            // Bottom
            20,21,22,
            20,22,23,
    };

    float texCoords[] = {
      // Front face textured only, for simplicity
      0.0f, 1.0f,
      1.0f, 1.0f,
      0.0f, 0.0f,
      1.0f, 0.0f};

And it is drawn like so

 // Counter-clockwise winding.
    gl.glFrontFace(GL10.GL_CCW);

    // Enable face culling.
    gl.glEnable(GL10.GL_CULL_FACE);

    // What faces to remove with the face culling.
    gl.glCullFace(GL10.GL_BACK);

    // Enabled the vertices buffer for writing and to be used during
    // rendering.
    gl.glEnableClientState(GL10.GL_VERTEX_ARRAY);

    // Specifies the location and data format of an array of vertex
    // coordinates to use when rendering.
    gl.glVertexPointer(3, GL10.GL_FLOAT, 0, verticesBuffer);

    if (normalsBuffer != null) {
        // Enabled the normal buffer for writing and to be used during rendering.
        gl.glEnableClientState(GL10.GL_NORMAL_ARRAY);

        // Specifies the location and data format of an array of normals to use when rendering.
        gl.glNormalPointer(GL10.GL_FLOAT, 0, normalsBuffer);
    }

    // Set flat color
    gl.glColor4f(rgba[0], rgba[1], rgba[2], rgba[3]);

    // Smooth color
    if ( colorBuffer != null ) {
        // Enable the color array buffer to be used during rendering.
        gl.glEnableClientState(GL10.GL_COLOR_ARRAY);
        // Point out the where the color buffer is.
        gl.glColorPointer(4, GL10.GL_FLOAT, 0, colorBuffer);
    }

    // Use textures?
    if ( textureBuffer != null) {
        gl.glEnableClientState(GL10.GL_TEXTURE_COORD_ARRAY);
        gl.glEnable(GL10.GL_TEXTURE_2D);
        gl.glTexCoordPointer(2, GL10.GL_FLOAT, 0, textureBuffer);
    }

    // Translation and rotation before drawing
    gl.glTranslatef(x, y, z);
    gl.glRotatef(rx, 1, 0, 0);
    gl.glRotatef(ry, 0, 1, 0);
    gl.glRotatef(rz, 0, 0, 1);

    gl.glDrawElements(GL10.GL_TRIANGLES, numOfIndices, GL10.GL_UNSIGNED_SHORT,   indicesBuffer);

    // Disable the vertices buffer.
    gl.glDisableClientState(GL10.GL_VERTEX_ARRAY);
    gl.glDisableClientState(GL10.GL_COLOR_ARRAY);
    gl.glDisableClientState(GL10.GL_NORMAL_ARRAY);
    gl.glDisableClientState(GL10.GL_TEXTURE_COORD_ARRAY);

    // Disable face culling.
    gl.glDisable(GL10.GL_CULL_FACE);

However my front face looks like this

Textured face

I also add, I haven't got any normals set, are textures affected by normals?

  float texCoords[] = {
    // Front
    1.0f, 1.0f,
    0.0f, 1.0f,
    0.0f, 0.0f,
    1.0f, 0.0f}

It seems as if the texture is being flipped, so the coordinates don't match up properly?

© Stack Overflow or respective owner

Related posts about opengl-es

Related posts about android