opengl 为什么插值会产生与渐变不同的结果?

uqzxnwby  于 2022-11-04  发布在  其他
关注(0)|答案(1)|浏览(155)

我有不同的灰度纹理的高度为一个像素,与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)

zhte4eai

zhte4eai1#

为什么纹理会有不同的结果?当使用更多的像素时,渐变看起来排列得更好。
因为您对纹理坐标的假设是错误的,所以s=0.0是左侧纹理元素的左 * 边缘 *,而1.0是最右侧纹理元素的右边缘。
对于宽度为2的纹理,纹理像素中心位于0.250.75,如果在该范围之外采样,则将应用包裹模式(在您的示例中似乎为GL_CLAMP_TO_EDGE)。
如果你想看到一个线性渐变,你必须从1/(2*width)1-1/(2*width)。如果你增加width,这些值当然会向01移动,所以当width接近无穷大时,它会收敛到你想要的结果。

相关问题