Определение пользовательской функции смешивания (OpenGL) - PullRequest
1 голос
/ 31 декабря 2011

Для реализации физически точного размытия в движении путем рендеринга в промежуточных местах, кажется, что для правильного выполнения этой операции мне нужна специальная функция смешивания. Аддитивное смешивание будет работать только на черном фоне, и стандартная функция «прозрачности» (GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA) может выглядеть хорошо для небольшого числа образцов, но это физически неточно, потому что образцы, представленные в конце, будут вносить больший вклад в результирующий цвет.

Мне нужна функция, чтобы получить цвет, который является средневзвешенным значением исходного и целевого цветов, в зависимости от количества образцов, охватывающих фрагмент. Однако я могу обобщить это, чтобы лучше учесть различия в рендеринге между образцами. Предположим, я должен рендерить размытый объект n раз. Рассматривая цвет как 3-вектор, пусть D будет цветом DEST - SRC. Я хочу, чтобы каждый рендер добавлял D/n к исходному цвету.

Можно ли это сделать с помощью конвейера с фиксированными функциями? Ссылка glBlendFunc довольно загадочна, по крайней мере для меня. Кажется, что это можно сделать тривиально или невозможно. Кажется, я бы хотел установить альфа на 1/n. Для поведения, которое я только что описал, мне нужна опция GL_DEST_MINUS_SRC_COLOR?

У меня также есть связанный вопрос: на каком этапе происходит эта операция смешивания? До или после фрагмента шейдерной программы? Смогу ли я получить доступ к исходным и целевым цветам в фрагментном шейдере?

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

1 Ответ

1 голос
/ 21 февраля 2012

Решение, которое я в итоге использовал для реализации своего эффекта, представляет собой комбинацию аддитивного смешивания и цели рендеринга, к которой я получаю доступ как текстура из фрагментного шейдера.

...