OpenGL смешивает два FBO

В игре, которую я пишу, у меня есть уровень, который правильно отображается в экранном буфере рендеринга, предоставленном мне ОС. Я также могу отрендерить это в фреймбуфер, а затем отрендерить этот фреймбуфер в выходной буфер рендеринга.

Чтобы добавить фон, я хочу отобразить другую сцену, эффект или что-то еще во втором буфере кадра, а затем «показать» его везде, где буфер кадра, содержащий уровень, не имеет установленного пикселя, т.е. значение альфа равно 0. Я думаю это называется альфа-смешением.

Как мне это сделать с OpenGL? Я думаю, что glBlendFunc можно использовать для достижения этого, но я не уверен, как я могу связать это с процедурами рисования кадрового буфера, чтобы должным образом достичь желаемого результата.


person Tristan    schedule 29.01.2014    source источник


Ответы (2)


glBlendFunc позволяет приложению смешивать (объединять) вывод всех ваших текущих операций рисования (скажем, X) с текущим «отображаемым» фреймбуфером (скажем, Y), который уже существует.

ie,

Новый вывод на дисплей = X (смесь) Y

Вы можете управлять функцией blend с помощью gl, как показано ниже, например:

glEnable(GL_BLEND);
glBlendEquation(GL_FUNC_ADD);
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

Полное использование показано здесь

https://github.com/prabindh/sgxperf/blob/master/sgxperf_test4.cpp

Обратите внимание, что концепции «просвечивания» и «смешивания» немного отличаются, вы можете просто придерживаться терминологии «альфа-смешивание на пиксель».

person Prabindh    schedule 29.01.2014
comment
Это имеет смысл — я полагаю, что сначала нарисовал бы свой фон в целевом буфере кадра, установил его в качестве целевого буфера, затем установил мой передний план в качестве буфера чтения и выполнил операцию блитинга с установленными режимами наложения? - person Tristan; 30.01.2014
comment
Битье @TristanSeifert здесь не подходит. Это другая операция, чем смешивание. - person concept3d; 30.01.2014

FBO — это просто контейнеры, а не хранилища. Что вам нужно сделать, так это прикрепить целевую текстуру для каждого FBO и визуализировать свой вывод в эту текстуру, как только вы это сделаете. Вы можете использовать свои выходные текстуры на полноэкранном квадроцикле и делать со своим смешиванием все, что захотите.

person concept3d    schedule 29.01.2014