OpenGL Render To Texture Прозрачность Проблема - PullRequest
0 голосов
/ 20 января 2011

Я строю «конвейер постобработки», который собирает вызовы рендера и помещает их в текстуру. После рендеринга всех эффектов постобработки, я объединил все результаты. И вот моя проблема:

Вначале я очищаю буфер с помощью glClearColor (0,0,0,0). Затем я вызываю розыгрыши. Приходит, когда объект имеет текстуру с 0,5 альфа. Это приводит к смешению цвета фона и текстуры. Я хотел бы избежать смешивания. Например, если пиксель текстуры равен 0,5, 0,5, 0,5, 0,5, результат равен 0,25, 0,25, 0,25, 0,5, поскольку это влияет на черный фон с нулевой прозрачностью.

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

У кого-нибудь есть совет для меня?

1 Ответ

2 голосов
/ 20 января 2011

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

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);

вы бы использовали

glBlendFunc(GL_ONE, GL_ONE_MINUS_SRC_ALPHA);

Пиксель текстуры будет равен 0,25, 0,25, 0,25, 0,5. Результат будет 0,25, 0,25, 0,25, 0,5, потому что все это умножено на 1. Конечно, вы должны убедиться, что полученная выходная текстура снова правильно интерпретируется как предварительно умноженная альфа.

Есть довольно хорошее объяснение в пыльном углу Википедии.

...