为什么插值给出的结果与梯度不同?
Why interpolation gives different results than a gradient?
我有一个像素高度的不同灰度纹理,带有 GL_LINEAR
插值。
纹理 T(k)
由从左到右的 k
个像素的渐变组成,从 0
(黑色)到 255
(白色)。
示例:
T(2) = 0 255
T(3) = 0 128 255
T(4) = 0 85 170 255
T(256) = 0 1 2 ... 255
那里有一些呈现的例子:
T(002)=
T(003)=
T(004)=
T(255)=
为什么纹理有不同的结果?当使用更多像素时,渐变看起来更漂亮。
实际上,如果我想要相同的结果,我不能使用更少的像素来渲染漂亮的渐变来节省内存。我想“正确”的渐变是像素最多的渐变,T(256)
.
Why textures do have different results ? The gradient appears more nicely arranged when more pixels are used.
因为你对纹理坐标的假设是错误的,s=0.0
是左纹素的左边,1.0
是纹素的右边缘最右边的一个。
对于宽度为 2 的纹理,纹素中心位于 0.25
和 0.75
,如果您在该范围之外采样,您的环绕模式(在您的情况下似乎是 GL_CLAMP_TO_EDGE
) 将适用。
如果你想看到线性渐变,你必须从 1/(2*width)
到 1-1/(2*width)
。如果你增加width
,这些值当然会向0
和1
靠拢,所以当width
接近无穷大时,它会收敛到你想要的结果。
我有一个像素高度的不同灰度纹理,带有 GL_LINEAR
插值。
纹理 T(k)
由从左到右的 k
个像素的渐变组成,从 0
(黑色)到 255
(白色)。
示例:
T(2) = 0 255
T(3) = 0 128 255
T(4) = 0 85 170 255
T(256) = 0 1 2 ... 255
那里有一些呈现的例子:
T(002)=
T(003)=
T(004)=
T(255)=
为什么纹理有不同的结果?当使用更多像素时,渐变看起来更漂亮。
实际上,如果我想要相同的结果,我不能使用更少的像素来渲染漂亮的渐变来节省内存。我想“正确”的渐变是像素最多的渐变,T(256)
.
Why textures do have different results ? The gradient appears more nicely arranged when more pixels are used.
因为你对纹理坐标的假设是错误的,s=0.0
是左纹素的左边,1.0
是纹素的右边缘最右边的一个。
对于宽度为 2 的纹理,纹素中心位于 0.25
和 0.75
,如果您在该范围之外采样,您的环绕模式(在您的情况下似乎是 GL_CLAMP_TO_EDGE
) 将适用。
如果你想看到线性渐变,你必须从 1/(2*width)
到 1-1/(2*width)
。如果你增加width
,这些值当然会向0
和1
靠拢,所以当width
接近无穷大时,它会收敛到你想要的结果。