Opengl 如何避免模糊效果?

Opengl 如何避免模糊效果?,opengl,3d,textures,Opengl,3d,Textures,我目前正在用Opengl做一个3d项目,但我有一个模糊效果的问题,就是距离块 如您所见,附近的块很好,但随着距离的增加,块很快变得模糊。(注:忽略红色方块) 我尝试了不同分辨率的图像(1024x1024和2048x2048),但结果相同 我试图修改GL_纹理_2D选项,但没有解决我的问题 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_

我目前正在用Opengl做一个3d项目,但我有一个模糊效果的问题,就是距离块

如您所见,附近的块很好,但随着距离的增加,块很快变得模糊。(注:忽略红色方块)

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

我试图修改GL_纹理_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);

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

作为评论发布,现在作为正确答案,以便标记为已回答

查看纹理表面时,尤其是远处的表面,纹理特征的频率可能超过必要的采样频率(帧缓冲区/屏幕的像素;请参见Nyquist限制)。为了解决这一问题,采用了MIP映射,从而降低了特征频率(缩小)。然而,这并不能解释透视失真。各向异性过滤将采样放置在吊架中的纹理上,以校正角度纹理


在OpenGL中,您需要版本4.6或EXT_纹理_过滤器。然后,您可以使用
glTexParameterf(GL\u texture\u 2D,GL\u texture\u MAX\u isotropic\u EXT,num\u samples)启用每个纹理的各向异性过滤。
-这设置了硬件可能使用的最大采样数,任何给定的纹理提取可能会使用较少的采样数,尽管它认为过多。请注意,您可以设置的上限是实现定义的,必须使用
glGetFloatv(GL\u MAX\u TEXTURE\u MAX\u各向异性\u EXT,&MAX\u samples)
进行查询。更多的样本意味着更高的质量(直到16个左右),但也意味着更高的性能成本(通常不是交易破坏者)。

各向异性过滤有助于这一点,但它是OpenGL 4.6以来的唯一核心:
glTexParameterf(GL\u TEXTURE\u 2D,GL\u TEXTURE\u MAX\u各向异性\u EXT,8.f)。您可能需要使用
glGetFloatv查询可用样本的最大数量(GL\u max\u纹理\u max\u各向异性\u EXT,&max\u样本)好的,我尝试了各向异性,它成功了。谢谢