Примеры текстур

Рис 8.31. Примеры текстур: а) текстура в виде изображения; 6) процедурная текстура Процедурные текстуры

Текстуру можно также определить с помощью математической функции или процедуры. Например, сферическая форма, изображенная на рис. 8.31, б, может быть генерирована с помощью следующей функции:

float fakeSphereCfloat s. float t) {

float г - sqrt((s-0.5)*(s-0.5)+(t-0.5)*(t-0.5));

if(r < 0.3) return 1 - r/0.3; // sphere intensity // яркость сферы

else return 0.2; // dark background // черный фон }

Визуализация граней для усиления реалистичности

Эта функция изменяется от 1 (белый цвет) в центре до 0 (черный) по кромке видимой части сферы. Другой пример, напоминающий шахматную доску, рассматривается в упражнениях, приводимых ниже. Все, что может быть вычислено, может быть сделано текстурой: плавные переходы и вихри цвета, множество Мандельброта, каркасные изображения объемных тел и т. д.

Позднее мы увидим, что значение функции texture(s, t) может быть использовано различными способами: как цвет самой грани, когда она «ярко светится», как коэффициент отражения для «регулирования» количества света, отраженного от этой поверхности, а также как способ изменения нормали к поверхности для придания ей «бугристого» вида.

Практическое упражнение

8.5.1. Текстура классической шахматной доски На рис. 8.32 показана шахматная доска размером 5 на 5, состоящая из квадратов с уровнями яркости, принимающими значения 0 (для черного цвета) и 1 (для белого).

О Напишите функцию float texture (float s. float t) для данной текстуры. (См. также упражнение 2.3.1.)

О Напишите функцию textureО для случая доски, состоящей из М строк и N столбцов.

Рис. 8.32. Узор классической шахматной доски Следующим этапом после задания текстурной функции является ее правильное отображение на нужную поверхность и затем просмотр ее с помощью камеры. На рис. 8.33 приводится пример, иллюстрирующий эту задачу в целом. Один и тот же образец текстуры отображается на три различных объекта: на плоский полигон, цилиндр и сферу. Для каждого объекта имеется некоторое преобразование, например Ttw («texture to world* - «текстура в мировые координаты»), которое переводит значения текстуры (s, t) в точки (х, у, z) на поверхности данного объекта. Камера осуществляет снимок этой сцены под некоторым углом, получая вид, приведенный на рисунке. Мы вызываем преобразование Тт точек трехмерного пространства в точки экрана («from world to screen* - «из мировых координат в экранные»), поэтому точка (х, у, z) поверхности «видна» на месте пиксела с координатами (sx, sy) = Тш(х, у, z). Таким образом, значение (s*, t*) текстуры в результате помещается в пиксел (sx, sy) = Т (Т (s*, t*)).


⇐ Предыдущая| |Следующая ⇒