Имеют ли FrontBuffer альфа-значение?

Я пытался сохранить изображение .tga с помощью метода GetFrontBufferData, но значение альфа-канала теряется. Они абсолютно одно целое. Я мог бы получить правильное значение альфа-канала из RenderTarget или BackBuffer, но не значение rgb неверно. Даже сцена, присутствующая для немедленного отображения , задний буфер все еще кажется более темным, чем передний буфер.
Теперь я получаю 2 вопроса:
В1: Имеют ли передний буфер альфа-значение?
В2: В чем разница между данными заднего буфера и переднего буфера, когда вы пытаетесь визуализировать прозрачные вещи?


person April    schedule 25.06.2012    source источник


Ответы (1)


Когда вы визуализируете прозрачный объект, его альфа-значение используется для выполнения альфа-смешивания. Как только смешивание завершено, новое значение записывается в задний буфер. Если вы хотите сохранить альфа-значение, формат заднего буфера должен быть D3DFMT_A8R8G8B8. Вы также должны помнить об очистке альфа-канала при вызове IDirect3DDevice9::Clear(). После завершения рендеринга указатели заднего буфера и переднего буфера просто меняются местами (подробнее). Таким образом, оба буфера имеют одинаковый формат (поэтому, если вы создали задний буфер в формате RGBA, передний буфер также будет в формате RGBA). Кстати, вы можете получить задний буфер и заблокировать его вместо того, чтобы получать передний буфер.

По умолчанию альфа-смешение выполняет те же операции на каналах R, G, B и A, но вы можете указать отдельную операцию только для альфа-канала — см. это.

person miloszmaki    schedule 28.06.2012
comment
Спасибо, я сейчас работаю с D3DRS_SEPARATEALPHABLENDENABLE.‹br/› - person April; 03.07.2012
comment
Но флип не всегда реализуется водителем. Реально наличие альфа-канала в переднем буфере не определено. Однако передний буфер должен содержать только полностью отрендеренную сцену, поэтому я понятия не имею, зачем ему нужен альфа-буфер... - person Goz; 14.07.2012