如何使用没有纹理缺陷的mipmap渲染?

时间:2018-10-08 08:33:24

标签: delphi opengl-es delphi-xe

请帮助我了解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时,会看到变形:

image

然后在64px处图像没有缺陷,尺寸为50px的图像会变形:

image

使用函数textureLod时,如果使用64px,则可以在128pxlod = 0的正方形尺寸上获得高质量的纹理。

image

如果我在50px处缩小正方形,则纹理有lod = 0的缺陷:

image

以及lod = 12

image

我不知道当我使用纹理大小64px时,需要正确地在小于128px的正方形上绘制纹理的细节级别。而且我不明白为什么函数texture2D无法正确绘制正方形85px处的纹理。

我尝试将lod值用于lod,并尝试在函数texture2D上使用bias参数,但是我没有任何最佳结果。

请帮助遇到类似挑战的我。

Test program (7z-archive) Test program with source code (7z-archive)

0 个答案:

没有答案