我对插值有基本知识:这是一种根据周围环境估算给定位置值的方法。因此,根据给定位置P,最近邻插值是选择网格中的最近邻居并复制其值。给定P在其间的两个网格点,线性插值是网格点的两个值的(线性)混合。如果P在半位置上,则从第一个值开始0.5,将第二个值的0.5加到结果值。对于二维,这称为双线性插值和三维三线性插值。
所以我知道Min Mag滤波器用于定义例如插值。 OpenGL纹理。例如。在此页http://gregs-blog.com/2008/01/17/opengl-texture-filter-parameters-explained/上,给出了下表:
Filter Combination | Bilinear | Bilinear | Mipmapping
(MAG_FILTER / MIN_FILTER) | (Near) | (FAR) |
---------------------------------------+----------+----------+------------
GL_NEAREST / GL_NEAREST_MIPMAP_NEAREST | Off | Off | Standard
GL_NEAREST / GL_LINEAR_MIPMAP_NEAREST | Off | On | Standard
GL_NEAREST / GL_NEAREST_MIPMAP_LINEAR | Off | Off | Trilinear filtering
GL_NEAREST / GL_LINEAR_MIPMAP_LINEAR | Off | On | Trilinear filtering
GL_NEAREST / GL_NEAREST | Off | Off | None
GL_NEAREST / GL_LINEAR | Off | On | None
GL_LINEAR / GL_NEAREST_MIPMAP_NEAREST | On | Off | Standard
GL_LINEAR / GL_LINEAR_MIPMAP_NEAREST | On | On | Standard
GL_LINEAR / GL_NEAREST_MIPMAP_LINEAR | On | Off | Trilinear filtering
GL_LINEAR / GL_LINEAR_MIPMAP_LINEAR | On | On | Trilinear filtering
GL_LINEAR / GL_NEAREST | On | Off | None
GL_LINEAR / GL_LINEAR | On | On | None
同一页面解释了Min Filter适用于比纹理(远物体)和Mag滤镜更小的物体,适用于大于纹理(靠近物体)的物体。不过,考虑到3D纹理,如果将GL_LINEAR设置为两个滤镜,则插值方法应始终为三线性。
答案 0 :(得分:3)
纹理插值仅在纹理的单个像素分布在显示器的多个像素上时才有效。如果纹理足够远以至于显示像素大于纹理像素,则根本不会显示某些纹理像素,导致锯齿状,杂乱的外观。
这是mipmapping的用法:不是单个版本的纹理,而是通过缩小纹理并将相邻像素混合在一起来创建多个版本,每个版本都比前一个版本小。这称为mipmap,传统上不同的版本只是最后一个版本的一半。显示纹理时,渲染器将选择在多个显示像素上传播纹理像素的最大版本,并在其上进行插值。
但这又有一个问题:纹理版本之间的过渡会在显示中产生一条突然的线条。对此的解决方案是三线性过滤:渲染器不是简单地在纹理中的像素之间进行插值,而是在纹理的版本之间进行插值。
答案 1 :(得分:0)
纹理mipmap是纹理的不同版本。例如,远程对象将在常见场景中使用较小分辨率版本的纹理,这有助于提高性能,甚至可以通过增加内存使用的成本来解决锯齿伪像。您甚至可以为采样器中的mipmap设置插值方法,例如最近邻居交换mipmap,但它们之间会有线性淡化。