Эффект свечения на простом прямоугольнике в openGL ES

Я хотел бы создать эффект свечения, на прямоугольнике:

Я действительно не знаю, с чего начать шейдер фрагментов.

..

Вообще, хотелось бы добиться такого эффекта на фигурах (кругах, полигонах, прямоугольниках). Нет реального цвета границы. Есть только блури.

1 ответ

  1. Один из способов:

    Если у вас есть прямоугольник, определенный 4 линиями (4 точками), и есть матрица модели, то умножьте 4 точки с матрицей модели и отправьте их как единое целое в шейдер фрагментов. В вершинном шейдере создайте еще одну переменную для позиции, которая является входной позицией, умноженной только на матрицу модели. Также некоторый радиус должен быть отправлен как единый.

    Теперь в шейдере фрагментов создайте код для каждой из пар точек, представляющих линию, и вычислите расстояние. Теперь, если расстояние меньше, радиус создает цветовую шкалу для границы. Сумма всех 4 используется в результате для цвета границы.

    scale += 1.0-(clamp(currentDistanceToLeftBorder/radius, .0, 1.0));
    scale += 1.0-(clamp(currentDistanceToTopBorder/radius, .0, 1.0));
    scale += 1.0-(clamp(currentDistanceToRightBorder/radius, .0, 1.0));
    scale += 1.0-(clamp(currentDistanceToBottomBorder/radius, .0, 1.0));
    

    Затем смешайте цвета:

    color = mix(defaultColor, borderColor, clamp(scale, .0, 1.0));