我有一个像素高度的不同灰度纹理,带有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(256)。
为什么纹理会有不同的结果?当使用更多像素时,渐变看起来排列得更好。
因为你对纹理坐标的假设是错误的,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。
| 归档时间: |
|
| 查看次数: |
86 次 |
| 最近记录: |