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
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?