Самоучитель по 3dsmax 7

         

Пусть iu, iv - целые части координат текстуры точки u, v; fu, fv - дробные части


Пусть iu, iv - целые части координат текстуры точки u, v; fu, fv - дробные части. Тогда 1, 2, 3, 4 имеют координаты в текстуре (iu,iv), (iu+1,iv), (iu,iv+1), (iu+1,iv+1). Проинтерполируем какую-то компоненту цвета (R, G или B) по прямым 1-3 и 2-4:

a.c = 1.c + (3.c - 1.c) * fv,
b.c = 2.c + (4.c - 2.c) * fv,

то есть

a.c = c[iu][iv] + (c[iu][iv+1] - c[iu][iv]) * fv,
b.c = c[iu+1][iv] + (c[iu+1][iv+1] - c[iu+1][iv]) * fv,

Теперь проинтерполируем цвет по прямой ab в нашей точке:

c = a.c + b.c * fu,

Проинтерполировав по этой формуле каждую компоненту цвета, получим наконец готовый результат - цвет точки, но уже с учетом билинейной фильтрации.

Здесь у нас получилось по три умножения на компоненту. То есть в сумме девять умножений на пиксел. Можно, конечно, честно считать по этим формулам, делая девять умножений для каждого пиксела. Но можно заменить все умножения на выборки по таблице. u, v обычно - это fixedpoint; fu, fv - тоже (кстати, в случае с fixedpoint целые и дробные части вычисляются ровно одним and'ом). Пусть мы используем 24-битный цвет и 16:16 fixedpoint; тогда одна компонента цвета занимает 8 бит, а дробную часть можно одним сдвигом перевести в 24:8 fixedpoint. Получаем 256 возможных значений для любой компоненты цвета и 256 возможных значений для дробной части, то есть - табличка 256x256. Если цвет 15/16-битный, или используется более грубое (скажем, до пяти бит) округление дробной части, то табличка становится еще меньше.



Содержание раздела