OpenGL texture atlas bleeding

前端 未结 5 1852
滥情空心
滥情空心 2021-01-01 00:30

I\'m trying to draw a basic 2d ground mesh made up of smaller tiles from a texture atlas (note the 1 pixel transparent border):

相关标签:
5条回答
  • 2021-01-01 00:47

    I had this exact same problem. I fixed it with this.

    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
    glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
    
    0 讨论(0)
  • 2021-01-01 00:52

    I had a similar issue with a texture atlas. I fixed it by insetting the image by 1.0/TEXTURE_ATLAS_PIXELS_PER_SIDE * 1/128.0. The 128 number you need to figure out by experimentation. The upside for me is no one is going to perceive 128th of a pixel being missing. I made this modification to the texture coordinates being sent to the graphics card and not in a shader. I have not tried doing this with texels in the shader, like you have. I've read different information on how to handle texture bleeding but for a texture atlas this was the easiest solution for me. Adding borders to my textures which are tightly packed and follow the power of two rule would cause me to have a lot of whitespace.

    This is what worked for me on the iphone.

    0 讨论(0)
  • 2021-01-01 00:55

    You could always switch your GL_TEXTURE_MIN/MAG_FILTER to GL_NEAREST :)

    0 讨论(0)
  • 2021-01-01 01:01

    Your border shouldn't be transparent, but rather the pixels from the opposing side of each subtexture. For example the border on the right hand side of each sub-texture should be a copy of the left-most line of pixels, i.e. the pixels that it would wrap around to.

    That is how you "cheat" wrapping for the texture sampler on the borders.

    0 讨论(0)
  • 2021-01-01 01:04

    Try using GL_NEAREST for GL_TEXURE_MIN/MAX_FILTER and translate by 0.375f before drawing:

    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0.375f, 0.375f, 0.0f);
    
    0 讨论(0)
提交回复
热议问题