我有不同的灰度纹理的高度为一个像素,与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)
。
1条答案
按热度按时间zhte4eai1#
为什么纹理会有不同的结果?当使用更多的像素时,渐变看起来排列得更好。
因为您对纹理坐标的假设是错误的,所以
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
接近无穷大时,它会收敛到你想要的结果。