OpenGL: рендеринг на прозрачном кадровом буфере с наложением - PullRequest
0 голосов
/ 06 октября 2018

Я бы хотел выполнить рендеринг с наложением на прозрачный буфер кадров.Поэтому обычно стандартное смешивание цветов

SRCa * SRCrgb + (1 - SRCa) * DSTrgb

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

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

SRCrgb * (1 - (1 - SRCa) * DSTa) + DSTrgb * (1 - SRCa) * DSTa

Но OpenGL не позволит мне сделать это легко.Я действительно разочарован смешиванием OpenGL.

Есть ли какой-нибудь трюк OpenGL, который позволил бы мне рисовать на прозрачном буфере кадров со стандартным смешиванием?(Конечно, я могу просто отключить смешивание, но смысл в том, чтобы заставить его работать и с заполненным буфером кадров; содержимое буфера не определено, оно может быть прозрачным, а может и не быть.)

У меня есть только две идеи: нарисовать все, что отображается за буфером прозрачной рамки.Что вызовет больше проблем, чем исправит.Другим было бы выполнить такое смешивание с фрагментным шейдером, что, к сожалению, очень хлопотно.

Есть ли другой способ?

...