Задумывались ли вы, проходя какую-нибудь трехмерную игрушку, про то, как и почему при приближении к стене текстура на ней плавно размывается? Задумывались ли вы, как именно накладывается текстура на тот или иной полигон? Если да, то в этой статье вы найдете ответы на эти и многие другие вопросы, связанные с текстурированием.

Текстура как клочок резины

Для начала рассмотрим, как же осуществляется масштабирование текстуры перед ее наложением на полигон. Как вы уже знаете, этот процесс связан с такими понятиями как билинейная, трилинейная фильтрация и мип-мэппинг (см. статью Валерия Аксака «Трехмерный ликбез», МК №44(215)). Я предлагаю рассмотреть эти технологии на уровне алгоритмов их создания, и может, самим написать что-то подобное. Хоть, впрочем, писать вам и не придется. Чтобы проиллюстрировать материал, я сам написал программку на Delphi, исходный код которой я и буду здесь приводить.

Итак, прежде чем приступить к самим алгоритмам, хотел бы вас познакомить с понятием интерполяции. Что же это такое и зачем оно нам нужно? Интерполяция — это процесс плавного перехода одного значения в другое на некотором участке. Если мое определение звучит несколько невнятно, то попытаюсь объяснить это на примере линейной интерполяции цветов. Что получится, если проинтерполировать два цвета на участке длинной в n пикселей? Получится градиент — плавный переход от одного цвета к другому, причем по краям будут располагаться пиксели заданного цвета, а между ними промежуточные значения. Общая формула для создания градиента имеет такой вид :

Формула 1 Рис. 1

Где Ci — цвет в i-той точке, Cl— цвет в начальной, а Cn — в конечной точке, l же — длина участка, на котором проводится интерполяция (причем i