请帮助我了解mipmap
技术。
当我在程序中使用mipmaps
时,图像缩小时会变形。创建纹理时,我使用trilinear
过滤:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR_MIPMAP_LINEAR);
我加载128x128
大小的纹理并设置了mipmap级别计数:
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, 10);
我使用VBO
进行渲染。在片段着色器中,我使用函数texture2D
进行纹理渲染。当我将正方形尺寸设置为128x128
时,图像没有缺陷。但是,当我将尺寸设置为85px
时,会看到变形:
然后在64px
处图像没有缺陷,尺寸为50px
的图像会变形:
使用函数textureLod时,如果使用64px
,则可以在128px
到lod = 0
的正方形尺寸上获得高质量的纹理。
如果我在50px
处缩小正方形,则纹理有lod = 0
的缺陷:
以及lod = 1
或2
:
我不知道当我使用纹理大小64px
时,需要正确地在小于128px
的正方形上绘制纹理的细节级别。而且我不明白为什么函数texture2D
无法正确绘制正方形85px
处的纹理。
我尝试将lod值用于lod,并尝试在函数texture2D
上使用bias参数,但是我没有任何最佳结果。
请帮助遇到类似挑战的我。
Test program (7z-archive) Test program with source code (7z-archive)