{

vec3 color;

vec2 position. useBrick: Вычисления, выполненные в этом шейдере, очень похожи на обычные вычисления на языке С, а все локальные переменные будут определены до их использования в начале функции mai п. В некоторых случаях это делает код более удобочитаемым и понятным, но в основном такие определения зависят от предпочтений разработчика. Первая строчка кода в примере будет вычислять значения для локальной переменной position типа vec2: position = MCposition / BrickSize; В этой строке происходит деление координаты х фрагмента в модельных координатах на ширину столбца, а координаты ]/ фрагмента - на ширину строки. Получаем «номер ряда» (position.у) и «номер кирпича» (position.х). Это знаковые значения, числа с плавающей запятой, так что можно получить отрицательные номера кирпичей и рядов. Определим, нужно ли рисовать данный ряд со смещением (каждый второй ряд смещается на полкирпича):

if (fract(position.y * 0.5) > 0.5) position.* += 0.5; «Номер ряда» (position .у) умножается на 0,5, и результат сравнивается с 0,5. Через ряд это значение будет получаться true, и «номер кирпича» (position.x) увеличивается на 0,5, чтобы сместить ряд с нечетным номером на половину кирпичика. Теперь нужно вычислить координаты фрагмента по отношению к текущему кирпичу:

position = fract(position): Это вычисление дает нам горизонтальную и вертикальную координаты отдельного кирпича, которые будут использоваться для определения того, следует ли использовать для закраски цвет кирпичей или цвет промежутка между ними.

https://viktoria-auto-otzyv.ru/vyvod-vi/.

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

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

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


⇐ вернуться назад | | далее ⇒