渲染大块时的纹理混叠问题:OpenGL

问题描述

当世界尺寸较小时,纹理渲染很好,没有任何纹理错误,但当它增加到一定程度时,就会出现纹理错误。尝试了几种纹理映射技术,但都没有帮助(或者可能是我做错了) 这个问题与阴影痤疮相似,但它不是阴影痤疮(我确定),因为我还没有实现任何阴影映射。

不知道如何解决这个问题,任何帮助将不胜感激(或我做错了什么)。

(附上shader代码供参考)

out vec4 FragColor;
in vec2 ChunkTexCoords;

uniform sampler2D sampler;

void main() {
    FragColor = texture(sampler,ChunkTexCoords);   
    if(FragColor.a == 0) discard;
}

纹理参数

    glTexParameteri(
        GL_TEXTURE_2D,GL_TEXTURE_WRAP_S,GL_CLAMP_TO_EDGE
    );
    glTexParameteri(
        GL_TEXTURE_2D,GL_TEXTURE_WRAP_T,GL_TEXTURE_MIN_FILTER,GL_NEAREST
    );
    glTexParameteri(
        GL_TEXTURE_2D,GL_TEXTURE_MAG_FILTER,GL_NEAREST
    );

While rendering texture making weird noises

解决方法

您的纹理缩小过滤器是最近邻框采样。一旦采样频率低于纹理中最高空间频率的一半(所谓的奈奎斯特频率),您就会得到采样混叠伪影。

解决方案:创建完整的一组经过适当低通过滤的 mipmap 级别。