2016-11-09 3 views
0

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

Я не знаю, с чего начать пиксельный шейдер.

..

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

+0

Проверьте свой ответ в аналогичной должности http://stackoverflow.com/questions/36263404/webgl-glow-effect/36290626#36290626 – stonexjr

ответ

0

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

Если у вас есть прямоугольник, определенный с 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)); 
Смежные вопросы