【问题标题】:What is Mipmapping in OpenGL?什么是 OpenGL 中的 Mipmapping?
【发布时间】:2014-03-27 09:02:47
【问题描述】:

我有插值的基本知识:它是一种根据给定位置的周围环境来估计一个值的方法。因此,最近邻插值是根据给定的位置 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 过滤器适用于小于纹理的对象(远对象),而 Mag 过滤器适用于大于纹理的对象(近对象)。不过,如果给定 3D 纹理,如果 GL_LINEAR 设置为两个过滤器,则插值方法应该始终是三线性的。

【问题讨论】:

    标签: opengl filter interpolation


    【解决方案1】:

    仅当纹理的单个像素分布在显示器的多个像素上时,纹理插值才有效。如果纹理距离足够远,显示像素大于纹理像素,则某些纹理像素将根本不显示,导致外观参差不齐。

    这就是 mipmapping 的用武之地:您有多个版本,而不是单个版本的纹理,每个版本都比以前的小,通过缩小纹理并将相邻像素混合在一起创建。这被称为mipmap,不同的版本传统上都是上一个的一半大小。显示纹理时,渲染器将选择将纹理像素分布到多个显示像素的最大版本,并在其上进行插值。

    但这又会带来一个问题:纹理版本之间的过渡会在显示中产生一条突兀的线条。解决此问题的方法是三线性过滤:渲染器不仅在纹理中的像素之间进行简单插值,而且还在纹理版本之间进行插值。

    【讨论】:

      【解决方案2】:

      纹理 mipmap 是纹理的不同版本。例如,在常见场景中,远处的物体会使用较小分辨率的纹理版本,这有助于提高性能,甚至可以解决混叠伪影,但会增加内存使用量。您甚至可以在采样器中为 mipmap 设置插值方法,例如最近邻交换 mipmap,但它们之间的线性淡入淡出。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-12-07
        • 2011-08-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多