После определения всех необходимых uniform- и varying-переменных определяется код фрагментного шейдера:

void main (void)
{
vec3 color:
vec2 position. useBrlck:

Вычисления, выполненные в этом шейдере, очень похожи на обычные вычисления на языке С, а все локальные переменные будут определены до их использования в начале функции mai г. В некоторых случаях это делает код более удобочитаемым и понятным, но в основном такие определения зависят от предпочтений разработчика. Первая строчка кода в примере будет вычислять значения для локальной переменной position типа vec2:

position = MCposition / BrickSize;

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

if (fractfposition.y * 0.5) > 0.5) position.х += 0.5: б.З. Фрагментный шейдер

«Номер ряда» (position ,у) умножается на 0,5, и результат сравнивается с 0,5. Через ряд это значение будет получаться true, и «номер кирпича» (position.х) увеличивается на 0,5, чтобы сместить ряд с нечетным номером на половину кирпичика. Теперь нужно вычислить координаты фрагмента по отношению к текущему кирпичу:

position = fractfposition):

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

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


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