渲染大块时的纹理混叠问题: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 级别。
当世界尺寸较小时,纹理渲染良好,没有任何纹理错误,但当它增加到一定程度时,就会显示纹理错误。尝试了几种纹理映射技术,但 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 级别。