正好在具有GL_NEAREST过滤的样本之间的中间:它返回什么



如果具有 GL_NEAREST mag 和最小滤波(并且没有 mipmapping,即仅存在 1 级(的 2D 纹理正在 4 个纹素之间的中间采样,将返回什么值?

不幸的是,官方文档中没有对此进行任何说明。

更新:

实际上,整个十字架对我来说看起来很模棱两可。在下图中,我用x绘制了不明确的点(线(,4 个纹素用 o 表示:

o---x---o
|   x   |
x x x x x
|   x   |
o---x---o

那么,如果在x处对纹理进行采样,则返回哪些值?

如果我

正确阅读了第 3.8.8 节(第 175 页(,看起来两个轴都使用了floor()

o4--xA--o3
|   x   |
x x x x xB
|   x   |
o1--x---o2

所以所有的x都会对o1进行采样。 除了xAxB会采样o4o2

我阅读了所选答案中的规范部分,似乎所选答案是错误的。

根据使用 GL_NEAREST 时的规范,为指定的 (s,t,r( 返回的纹理值是具有以下特征的纹素之一:i=floor(u(,j = floor(v(。请注意,纹素 (i,j( 的值是坐标为 (u,v(=(i+0.5, j+0.5( 的值。参见第160页的图3.10。

这归结为一个简单的规则,即给定一个采样点,使用最接近的纹素的值。如果我们在 2 个纹素中心之间精确采样,则使用右侧或顶部的那个。例如,如果我们想在 u=1 处采样(纹素 0 和 1 中心之间的距离相等(,那么我们将选择 i=floor(1(=1,即右侧的纹素。纹素的中心在 u=1.5。

所以这就是将要发生的事情:

o4----x3----o3
|     x3     |
x4 x4 x3 x3 x3
|     x2     |
o1----x2----o2

我还使用 OpenGL ES 执行了一项测试,方法是从片段着色器中以预定义的 s,t 坐标对颜色编码纹理进行采样,它的行为符合预期。

相关内容

最新更新