【问题标题】:Understanding texture's linear filtering in cuda了解 cuda 中纹理的线性过滤
【发布时间】:2011-12-29 22:21:35
【问题描述】:

根据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 以这种方式进行线性过滤吗?谢谢

【问题讨论】:

    标签: cuda


    【解决方案1】:

    CUDA 中的线性过滤算法假定纹素值位于插值体积的质心(如果您愿意,可以使体素居中)。在您的一维过滤示例中,输入数据被隐式视为

    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 添加到坐标。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-03
      • 1970-01-01
      • 1970-01-01
      • 2013-12-07
      • 2015-08-23
      • 1970-01-01
      相关资源
      最近更新 更多