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

Texture Aliasing problem while rendering large chunks: OpenGL

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

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

(附上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_CLAMP_TO_EDGE
    );
    glTexParameteri(
        GL_TEXTURE_2D,
        GL_TEXTURE_MIN_FILTER,
        GL_NEAREST
    );
    glTexParameteri(
        GL_TEXTURE_2D,
        GL_TEXTURE_MAG_FILTER,
        GL_NEAREST
    );

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

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