Неправильная компоновка альфа при рендеринге в QGLFrameBufferObject vs screen - PullRequest
1 голос
/ 28 марта 2012

У меня проблема при рендеринге даже простых фигур с частичной непрозрачностью в QGLFrameBufferObjects в Qt.

Я уменьшил проблему до этого:

Когда я рендерил простой квадQGLFrameBufferObject с цветом, установленным в (1,0,0, .5), и затем перетаскивание его на экран, я получаю слишком светлый красный цвет для непрозрачности 50%.Если я рисую тот же четырехугольник с тем же цветом (фактически с тем же кодом) прямо на экране, я получаю правильное значение цвета.Если я отрисовываю четырехугольник с непрозрачностью == 1,0, то результаты одинаковы ... Я получаю полный глубокий красный цвет в обоих случаях.Я подтвердил, что цвет в буфере действительно неправильный, выгрузив буфер на диск напрямую с помощью buffer.toImage (). Save ("/ tmp / blah.tif").

В обоих случаях яочистил буфер вывода до (1,1,1,1) перед выполнением операции.

Почему объекты, которые я рисую, частично прозрачны, получаются легче при обращении к закадровому буферу, чем если бы я рисовал ихпрямо на экран?Должно быть какое-то состояние, которое я должен установить на FBO или что-то еще, но я не могу понять, что это такое.

1 Ответ

3 голосов
/ 28 марта 2012

Альфа не означает «прозрачный». Это не значит что-нибудь вообще. Значение приобретает смысл только тогда, когда вы даете его. Это означает только «прозрачный», когда вы устанавливаете режим наложения, который использует альфа-канал для управления прозрачностью. Так что, если вы не настроили режим наложения , который создает эффект прозрачности , тогда альфа - это просто еще один компонент цвета, который будет записан точно так же, как и в кадровый буфер. *

...