【问题标题】:How to avoid blurry effect?如何避免模糊效果?
【发布时间】:2021-07-20 16:55:24
【问题描述】:

我目前正在使用 Opengl 进行 3d 项目,但我遇到了远处块的模糊效果问题。

如您所见,附近的街区很好,但随着距离的增加,街区很快就会变得模糊。 (ps:忽略红块)

我尝试了不同分辨率的图像(1024x1024 和 2048x2048),但结果相同。

我尝试修改 GL_TEXTURE_2D 选项但没有解决我的问题。

glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);

如果有人知道如何处理这个问题,那就太好了。提前谢谢

【问题讨论】:

  • 各向异性过滤对此有所帮助,但它只是自 OpenGL 4.6 以来的核心:glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, 8.f);。您可能需要查询最大值。 glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_samples);的可用样本数
  • 好的,我尝试了 ANISOTROPY,它成功了。谢谢

标签: opengl 3d textures


【解决方案1】:

作为评论发布,现在作为正确答案发布,因此可以标记为已回答。

在查看带纹理的表面时,尤其是远处的表面,纹理特征的频率可能会超过必要的采样频率(帧缓冲区/屏幕的像素;请参阅奈奎斯特限制)。为了解决这个问题,采用了 MIP 映射,这降低了特征频率(缩小)。然而,这并没有考虑到透视失真。各向异性过滤将样本放在梯形的纹理上,以校正有角度的纹理。

在 OpenGL 中,您需要版本 4.6 或 EXT_texture_filter_anisotropic。然后,您可以使用glTexParameterf(GL_TEXTURE_2D, GL_TEXTURE_MAX_ANISOTROPY_EXT, num_samples) 启用每个纹理的各向异性过滤 - 这会设置硬件可以使用的最大 样本数,任何给定的纹理提取可能会使用更少,但如果它认为更多则过多。请注意,您可以设置的上限是实现定义的,并且必须使用glGetFloatv(GL_MAX_TEXTURE_MAX_ANISOTROPY_EXT, &max_samples) 进行查询。更多的样本意味着更高的质量(合理地直到 16 个左右),但也意味着更高的性能成本(通常不会破坏交易)。

【讨论】:

    猜你喜欢
    • 2021-06-27
    • 2020-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多