2016-07-05 69 views
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_*_FILTERGL_NEAREST(在GL_REPEAT模式),它的工作原理如果采样看纹理像素在指定s的权,而GL_LINEAR过滤花费的平均左,右texels为s==1

我的结论是否正确?纹理坐标范围的末端在纹理像素的外边缘,而不是在它们的中心?

+1

是的。这是真正有意义的唯一方法。由于[0,1]覆盖了整个纹素范围,因此s = 1必须是最右边纹素的右边缘。虽然不是同一个问题,但解释与我在这里的答案非常相似:http://stackoverflow.com/questions/31810822/opengl-3d-texture-shine-through。 –

回答

0

我得出结论,纹理坐标范围的末端不在边缘纹素的中心,而是在它们的外边缘。

正确。