Понимание линейной фильтрации текстуры в cuda - PullRequest
2 голосов
/ 30 декабря 2011

согласно руководству по программированию 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

Скажем, мы хотим получить texal в 1, что, я думаю, должно вернуть 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 Ответ

3 голосов
/ 30 декабря 2011

Алгоритм линейной фильтрации в 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 к координатам, если вы хотите обрабатывать данные текстуры как находящиеся в вершинах вокселя, а не в центре вокселя.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...