根据定义,当被纹理化的像素映射到大于一个纹理元素的区域时,使用GL_TEXTURE_MIN_FILTER 。
假设我有一个分辨率为 1024*768 的纹理,我想将它映射到一个矩形。投影矩阵使用以下方法设置:
glOrtho(0, 1024, 0, 768, 0, 1);
并且矩形设置为:
glTexCoord2f(0.0f, 0.0f); glVertex3f(0.0f, 0.0f, 0.0f);
glTexCoord2f(1.0f, 0.0f); glVertex3f(1024.0f, 0.0f, 0.0f);
glTexCoord2f(1.0f, 1.0f); glVertex3f(1024.0f, 768.0f, 0.0f);
glTexCoord2f(0.0f, 1.0f); glVertex3f(0.0f, 768.0f, 0.0f);
在当前配置下,我的理解是矩形上的每个像素都映射到纹理中的一个像素。
然而经过测试,我发现MIN_FILTER正在为此配置工作。即使我将矩形的大小加倍,即 2048*1536 并且视口中只显示左下角,它仍然是 MIN_FILTER 起作用。
在这种情况下,我个人的理解是,视口中的每个像素只映射到纹理中的四分之一像素,为什么MIN_FILTER还在工作?
为了测试哪个过滤器在工作,我只是注释掉设置过滤器的行,看看结果是否错误。如果我注释掉MIN_FILTER设置行,结果将是完全黄色的,因为我没有设置纹理的最大级别以符合其级别。但是如果我注释掉MAG_FILTER行,结果仍然是正确的。