0
从我调试,我发现,随着128个像素长的1D纹理我要夹紧我的s
坐标传给texture1D
在GLSL片段着色器不是范围[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
过滤花费的平均左,右texels为s==1
。
我的结论是否正确?纹理坐标范围的末端在纹理像素的外边缘,而不是在它们的中心?
是的。这是真正有意义的唯一方法。由于[0,1]覆盖了整个纹素范围,因此s = 1必须是最右边纹素的右边缘。虽然不是同一个问题,但解释与我在这里的答案非常相似:http://stackoverflow.com/questions/31810822/opengl-3d-texture-shine-through。 –