При формировании изображений наряду с закраской поверхности решается задача нанесения текстуры, заданной в фактурном пространстве. При наложении текстуры производится отображение этого пространства на пространство изображения.
Текстура для программиста выглядит как квадратная картинка размером 1.0 х 1.0, на которой задана показанная на рис 21.6 система координат ио. В каждой вершине грани надо указать вещественные координаты той точки текстуры, которая при наложении текстуры на многогранник совместится с этой вершиной.
Рис. 21.6. Назначение текстурных координат
Текстура в памяти хранится как один или несколько заполненных кодами цвета буферов-поверхностей, содержащих картинку с целочисленными координатами текселов. Приложение может формировать содержимое текстурной поверхности, загружая картинку из файла, или заполнять ее программно. В DirectX можно назначить текстурную поверхность активной страницей и сформировать в ней изображение сцены. Этот прием используют для повышения скорости работы графической системы. Так, например, сцена, находящаяся на удалении от наблюдателя
Предварительные сведения
(например, трехмерный город, к которому подъезжает автомобиль), формируется в текстурной поверхности. В течение нескольких последующих тактов эта сцена заменяется вертикальной гранью с натянутой на нее текстурой.
При наложении текстуры графическая библиотека масштабирует вещественные текстурные координаты так, чтобы квадрат 1.0 х 1.0 растянулся до размеров текстурной поверхности. После этого нужно в цикле пробежать по всем фрагментам грани, определяя для каждого фрагмента соответствующие текстурные координаты. А уже потом по полученной паре вещественных чисел определяется место картинки, которое задает цвет тексела.
Если размер накладываемого на грань участка текстурной поверхности (в тек-селах) меньше размеров проекции грани, один тексел отображается на несколько точек экрана, при этом вместо плавного изменения цвета на экране будет отображена мозаика из однотонных прямоугольников. Если размер накладываемого на грань участка текстурной поверхности (в текселах) значительно превышает размеры проекции грани, то одному фрагменту будет соответствовать множество тек-селов. В результате при малых перемещениях наблюдателя ближайшими к текущим текстурным координатам оказываются новые точки картинки и на грани возникает мерцание точек.