了解cuda中纹理的线性过滤

时间:2011-12-29 22:21:36

标签: cuda

根据CUDA编程指南,纹理提取返回的值是

tex(x) = (1-a)T[i] + aT[i+1] for a one-dimensional texture

where i = floor(Xb), a = frac(Xb), Xb=x-0.5

假设我们有一个只有两个纹素的一维纹理。例如:

T[0] = 0.2, T[1] = 1.5

假设我们想在1处获取texal,我认为它应该返回T [1],这是1.5。

但是,如果您遵循编程指南中给出的规则,返回值将为:

Xb = 1 - 0.5 = 0.5
a = 0.5
i = 0
return value = 0.5*T[0] + 0.5*T[1] = 0.85

这对我没有任何意义。有人可以解释为什么线性过滤是由CUDA以这种方式完成的吗?感谢

1 个答案:

答案 0 :(得分:3)

CUDA中的线性滤波算法假设纹理像素值位于插值体积的质心(如果您愿意,则体素居中,如果您愿意)。在您的1D过滤示例中,输入数据隐式地被视为

T[0]=(0.5, 0.2) T[1]=(1.5, 1.5)

所以你的例子是要求Tex(1),这是两个纹素值之间的中点,即。

0.5*0.2 + 0.5*1.5 = 0.85

要返回T [1],您需要Tex(1.5),这是一般规则 - 如果要将纹理数据视为体素顶点而不是体素中心,则将0.5添加到坐标。