I try to tile texture with size 16x16 inside rectangle 100x100. I set GL_TEXTURE_WRAP_S
and GL_TEXTURE_WRAP_T
to GL_REPEAT
but it gives no effect (see image below). How to tile image properly? Should I use different method for drawing instead of glDrawArrays
?
Original texture 16x16
Actual result:
Code:
glEnable(GL_LINE_SMOOTH);
glHint(GL_LINE_SMOOTH_HINT, GL_NICEST);
glEnable(GL_POINT_SMOOTH);
glHint(GL_POINT_SMOOTH_HINT, GL_NICEST);
glEnableClientState(GL_VERTEX_ARRAY);
glEnableClientState(GL_COLOR_ARRAY);
glEnableClientState(GL_TEXTURE_COORD_ARRAY);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, texture.getId());
glTexParameterf(GL_TEXTURE_2D, GL_GENERATE_MIPMAP, GL_TRUE);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glEnable(GL_BLEND);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
// GL_REPEAT
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glPushMatrix();
glVertexPointer(VERTEX_POINTER_COUNT, GL_FLOAT, 0, vertexPointer);
glColorPointer(COLOR_POINTER_COUNT, GL_FLOAT, 0, colorPointer);
glTexCoordPointer(TEXTURE_COORD_POINTER_COUNT, GL_FLOAT, 0, texCoordPointer);
glDrawArrays(GL_TRIANGLES, 0, 6);
glPopMatrix();
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, NULL_ID);
glDisable(GL_TEXTURE_2D);
glDisableClientState(GL_VERTEX_ARRAY);
glDisableClientState(GL_COLOR_ARRAY);
glDisableClientState(GL_TEXTURE_COORD_ARRAY);
glDisable(GL_BLEND);
UPD.
// Texture coordinates
private float[] uv = new float[]{0, 0, 0, 1, 1, 1, 1, 0};
public final FloatBuffer texCoordPointer = BufferUtils.createFloatBuffer(2 * 3 * 2 * 2);
texCoordPointer.clear();
texCoordPointer.put(uv[0]).put(uv[1]);
texCoordPointer.put(uv[2]).put(uv[3]);
texCoordPointer.put(uv[4]).put(uv[5]);
texCoordPointer.put(uv[0]).put(uv[1]);
texCoordPointer.put(uv[4]).put(uv[5]);
texCoordPointer.put(uv[6]).put(uv[7]);
texCoordPointer.flip();
If you want the texture repeated for example 6 times, your texture coordinates should be in the range [0.0, 6.0]