OpenGL's glBlendFunc

Есть ли способ в GLBlendFunc OpenGL для увеличения целевого RGB? (то есть (10,50,5) - (20,100,10)

кажется, единственное, что вы можете сделать, это добавить исходный rgb (умноженный на некоторые факторы, которые <1)

1 ответ

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

Затем вам нужно ввести шаг постобработки, если вы этого еще не сделали. Там вы читаете значение цвета и берете 2 в степень цвета, который даст вам окончательный цвет.

Начальные значения должны быть логарифмическими, конечно.

Однако, если вы хотите только умножить цвета для некоторых операций рисования (я надеюсь, что только последние в вашей сцене), вам нужно разделить процедуру дальше: Сначала нарисуйте "нормальный" контент, где вы используете нормальное смешивание цветов. Затем преобразуйте цвета в логарифмическую шкалу (вы можете использовать отдельную текстуру для этого), используйте это для следующих операций рисования, которые должны умножить цвета (но вы скажете OpenGL добавить цвета), затем преобразуйте обратно в линейный масштаб, взяв мощность.

Конечно, вы также можете использовать e в качестве базы, в этом случае вы используете натуральный логарифм и функцию exp.

Другие вопросы по тегам