Для получения такой функции можно использовать функцию step (edge. х). Онаполучает два аргумента: край (edge) и параметр для повторной проверки этого края. Если значение параметра меньше или равно значению границы, функция возвращает 0; в противном случае - 1,0 (см. рис. 5.11). Обычно функцию step используют для получения импульсов (прямоугольных колебаний), при этом функ-пия начинается с 0 и поднимается до 1 при достижении некоего порога. Для данной задачи можно получить функцию, значения которой начинаются с 1,0 и затем падают до 0. Этого можно достичь перестановкой ее аргументов:

useBrick " stepfposition. BnckPct):

Здесь вычисляются два значения, по которым можно узнать, находится ли данная точка на кирпиче или вне его, позиции прослеживаются в горизонтальном (useBri ck.х) и вертикальном (useBri ck. у) направлениях. Встроенная функция step будет возвращать 0 при условии Bri ck Pet. х <= posi ti on. x и 1,0 при условии Bri ckPct. x > posit i on. x. Функция tract обеспечивает попадание значения position.x в диапазон [0, 1). Переменная BrickPct - типа uniform, так что ее значение будет постоянным в пределах одного примитива. Это определяет, что значение useBri ck. х будет равно 1,0 для кирпича и 0 - для промежутка между кирпичами (по горизонтали). То же самое выполняется для вертикального направления, pos i t i on. у и Bri ck Pet. у используются для того, чтобы вычислить значение useBri ck .у. Умножив useBrick. х на useBri ck .у, получим 0 или 1,0, что позволит выбрать цвет фрагмента. Периодическая функция для горизонтального компонента шаблона кирпичной стены приведена на рис. 6.3.

Значения BrickPct-х и BrickPct .у можно вычислить приложением, чтобы получить ширину промежутков между кирпичами в обоих направлениях, основываясь на соотношении высоты ряда и ширины столбца; эти значения можно выбирать и произвольно.

Остается только вычислить окончательное значение цвета и сохранить его в особой переменной д! JragCol or:

color - mix(MortarColor. BrickColor. useBrick,x * useBrick.y): color *- Lightlntensity:

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