Я хотел имитировать эффект свечения в студии клипа, используя opengl и его шейдер. Итак, я обнаружил, что следующее уравнение - это то, как работает «светящийся уклонение».
final.rgb = dest.rgb / (1 - source.rgb)
Затем я нашел 2 способа сделать это, но ни один из них, похоже, не работа.
Сначала нужно было вычислить 1 / (1 - source.rgb)
в шейдере и умножить смешивание, используя glBlendfunc(GL_ZERO, GL_SRC_COLOR)
или glBlendfunc(GL_DST_COLOR, GL_ZERO)
.
, но, как говорит страница Хроноса, все коэффициенты масштабирования имеют диапазон от 0 до 1. Это означает, что я не могу умножить числа на 1., поэтому я не могу использовать этот метод, потому что в большинстве случаев это больше, чем 1.
Второй - перенести фоновые тексели используя glReadPixel()
, затем вычислите все в шейдере, затем выполните аддитивное смешивание, используя glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
.
независимо от того, какой результат я могу получить, glReadPixel()
само по себе занимает слишком много времени даже с 30 x 30 текселями площадь. поэтому я не могу использовать этот метод.
Интересно, есть ли какой-нибудь другой способ получить результат, который должен иметь режим наложения светлячка.