如果具有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
处采样纹理,会返回哪些值?
答案 0 :(得分:2)
如果我正确地阅读Section 3.8.8 (page 175),则两个轴上都会使用floor()
。
o4--xA--o3
| x |
x x x x xB
| x |
o1--x---o2
因此,所有x
es都会对o1
进行抽样。除了xA
和xB
之外,它会对o4
和o2
进行抽样。
答案 1 :(得分:1)
我在selected answer中阅读了规范的各个部分,似乎选择的答案是错误的。
根据使用GL_NEAREST时的规范,为指定(s,t,r)返回的纹理值是具有以下内容的纹素之一:i = floor(u),j = floor(v)。 注意,texel(i,j)的值是坐标(u,v)=(i + 0.5,j + 0.5)的值。见图。 3.10,第160页。
这归结为给定样本点的简单规则,使用最接近的纹素的值。在我们准确地在2个纹素中心之间进行采样的情况下,使用右侧或顶部的那个。例如,如果我们想要在u = 1(在texel 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坐标处对颜色编码纹理进行采样,并且其表现符合预期。