Один из способов:
Если у вас есть прямоугольник, определенный с 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));
Проверьте свой ответ в аналогичной должности http://stackoverflow.com/questions/36263404/webgl-glow-effect/36290626#36290626 – stonexjr