为什么插值给出的结果与梯度不同?

raf*_*foo 3 opengl

我有一个像素高度的不同灰度纹理,带有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
Run Code Online (Sandbox Code Playgroud)

一些呈现的例子如下:

T(002)= 在此输入图像描述

T(003)=在此输入图像描述

T(004)=在此输入图像描述

T(255)=在此输入图像描述

为什么纹理会有不同的结果?当使用更多像素时,渐变看起来排列得更好。

在实践中,如果我想要相同的结果,我不能使用更少的像素来渲染漂亮的渐变以节省内存。我认为“正确”的渐变是像素最多的渐变T(256)

der*_*ass 5

为什么纹理会有不同的结果?当使用更多像素时,渐变看起来排列得更好。

因为你对纹理坐标的假设是错误的,s=0.0是左边纹理元素的左边缘,是1.0最右边纹理元素的右边缘。

对于宽度为 2 的纹理,纹素中心位于0.25和,如果您在该范围之外进行采样,则将应用0.75您的环绕模式(在您的情况下似乎是)。GL_CLAMP_TO_EDGE

如果你想看到线性渐变,你必须从1/(2*width)1-1/(2*width)。如果增加width,这些值当然会接近 和01因此当接近无穷大时它会收敛到您想要的结果width