Hello Guest

Mipmapping causes 3D texture problems - FIXED

  • 1 Replies
  • 489 Views
Mipmapping causes 3D texture problems - FIXED
« on: June 26, 2022, 11:55:07 »
Hi I am trying to implement 3D textures for my terrains. However I am having a troubles with it. I suspect generating mipmaps is the cause of it.

The texture only renders closeby:


I changed my shader to output the texture coordinates as a color value, they seem to be okay:
outColour = vec4(texcoord.x, texcoord.y, texcoord.z, 1);


When I get close with the camera the textures distort:


So I disabled my mipmap code and voila, it must be mipmapping causing the distortion.


This is my texture loading / mipmapping code:
Code: [Select]
// Bind the texture
GL13.glActiveTexture(GL13.GL_TEXTURE0);
glBindTexture(type, apiID);
glPixelStorei(GL_UNPACK_ALIGNMENT, 1);

if (type == TYPE_TEXTURE_2D)
glTexImage2D(type, 0, GL_RGBA, decoder.getWidth(), decoder.getHeight(), 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);

if (type == TYPE_TEXTURE_3D)
GL14.glTexImage3D(type, 0, GL_RGBA, decoder.getWidth(), decoder.getHeight(), layers, 0, GL_RGBA, GL_UNSIGNED_BYTE, buf);

glTexParameteri(type, GL11.GL_TEXTURE_WRAP_S, (renderMode == RENDER_TEXTURE_CLAMP_EDGE) ? GL12.GL_CLAMP_TO_EDGE : GL11.GL_REPEAT);

if (type == TYPE_TEXTURE_2D || type == TYPE_TEXTURE_3D)
glTexParameteri(type, GL11.GL_TEXTURE_WRAP_T, (renderMode == RENDER_TEXTURE_CLAMP_EDGE) ? GL12.GL_CLAMP_TO_EDGE : GL11.GL_REPEAT);

if (type == TYPE_TEXTURE_3D)
glTexParameteri(type, GL14.GL_TEXTURE_WRAP_R, (renderMode == RENDER_TEXTURE_CLAMP_EDGE) ? GL12.GL_CLAMP_TO_EDGE : GL11.GL_REPEAT);

 
glTexParameteri(type, GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); //<--- DEBUG - disabling mipmap
glTexParameteri(type, GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST);

/*  <- DEBUG - mipmapping causes distortion on 3D textures?
glTexParameteri(type, GL_TEXTURE_MIN_FILTER, GL_NEAREST_MIPMAP_LINEAR);
glTexParameteri(type, GL_TEXTURE_MAG_FILTER, GL_NEAREST_MIPMAP_LINEAR);
glTexParameterf(type, GL12.GL_TEXTURE_MIN_LOD, -1000f);
glTexParameterf(type, GL12.GL_TEXTURE_MAX_LOD, 1000f);
glTexParameterf(type, GL14.GL_TEXTURE_LOD_BIAS, -1f);
GL30.glGenerateMipmap(type);
*/
glBindTexture(type, 0);
TYPE_TEXTURE_2D and 3D are equal to GL_TEXTURE_2D and 3D. What am I doing wrong?
« Last Edit: June 26, 2022, 12:56:52 by Martijn »

Re: Mipmapping causes 3D texture problems
« Reply #1 on: June 26, 2022, 12:56:35 »
I fixed the problem by changing GL_TEXTURE_3D to GL_TEXTURE_2D_ARRAY. Now mipmapping works.