纹理坐标范围是否在边缘纹素的外边缘结束?
Are texture coordinate range ends at the outer edges of edge texels?
从我的调试中,我发现对于长度为 128 像素的一维纹理,我必须将传递给 GLSL 片段着色器中的 texture1D
的 s
坐标限制在范围 [0,1]
,但类似于 [0,1-1./257]
(增加 257->258
返回神器;通过二分法获得的数字为 0.99610897
)。否则我会重复在 s==0
.
获得的值
当然,当我将纹理参数 GL_TEXTURE_WRAP_T
设置为 GL_CLAMP_TO_EDGE
而不是默认值 GL_REPEAT
时,这不会发生。
我得出的结论是纹理坐标范围的末端不在边缘纹素的中心,而是在它们的外边缘。
如果我将 GL_TEXTURE_*_FILTER
设置为 GL_NEAREST
(在 GL_REPEAT
模式下),它的工作方式就好像采样在指定的右侧查看纹素一样s
,而对于 GL_LINEAR
过滤器,它取 s==1
左右纹素的平均值。
我的结论正确吗?纹理坐标范围的末端是在纹素的外边缘,而不是在它们的中心吗?
I'm coming to a conclusion that the ends of texture coordinate range are not at the centers of edge texels, but at the outer edges of them.
正确。
从我的调试中,我发现对于长度为 128 像素的一维纹理,我必须将传递给 GLSL 片段着色器中的 texture1D
的 s
坐标限制在范围 [0,1]
,但类似于 [0,1-1./257]
(增加 257->258
返回神器;通过二分法获得的数字为 0.99610897
)。否则我会重复在 s==0
.
当然,当我将纹理参数 GL_TEXTURE_WRAP_T
设置为 GL_CLAMP_TO_EDGE
而不是默认值 GL_REPEAT
时,这不会发生。
我得出的结论是纹理坐标范围的末端不在边缘纹素的中心,而是在它们的外边缘。
如果我将 GL_TEXTURE_*_FILTER
设置为 GL_NEAREST
(在 GL_REPEAT
模式下),它的工作方式就好像采样在指定的右侧查看纹素一样s
,而对于 GL_LINEAR
过滤器,它取 s==1
左右纹素的平均值。
我的结论正确吗?纹理坐标范围的末端是在纹素的外边缘,而不是在它们的中心吗?
I'm coming to a conclusion that the ends of texture coordinate range are not at the centers of edge texels, but at the outer edges of them.
正确。