2

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

不幸的是,官方文档中没有关于此的任何注释。

更新:

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

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

那么如果纹理在x's 处采样,则返回哪些值?

4

2 回答 2

2

如果我正确阅读了第 3.8.8 节(第 175 页),它看起来就像floor()在两个轴上都使用了。

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

所以所有的xes 都会 sample o1。除了xAandxB会采样o4and o2

于 2013-07-16T17:07:46.340 回答
1

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

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

这归结为一个简单的规则,即给定一个样本点,使用最接近的纹素的值。在我们恰好在 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 坐标处对颜色编码的纹理进行采样,它的行为符合预期。

于 2015-11-24T21:34:15.430 回答