Я пытался сохранить изображение .tga с помощью метода GetFrontBufferData, но значение альфа-канала теряется. Они абсолютно одно целое. Я мог бы получить правильное значение альфа-канала из RenderTarget или BackBuffer, но не значение rgb неверно. Даже сцена, присутствующая для немедленного отображения , задний буфер все еще кажется более темным, чем передний буфер.
Теперь я получаю 2 вопроса:
В1: Имеют ли передний буфер альфа-значение?
В2: В чем разница между данными заднего буфера и переднего буфера, когда вы пытаетесь визуализировать прозрачные вещи?
Имеют ли FrontBuffer альфа-значение?
Ответы (1)
Когда вы визуализируете прозрачный объект, его альфа-значение используется для выполнения альфа-смешивания. Как только смешивание завершено, новое значение записывается в задний буфер. Если вы хотите сохранить альфа-значение, формат заднего буфера должен быть D3DFMT_A8R8G8B8
. Вы также должны помнить об очистке альфа-канала при вызове IDirect3DDevice9::Clear()
. После завершения рендеринга указатели заднего буфера и переднего буфера просто меняются местами (подробнее). Таким образом, оба буфера имеют одинаковый формат (поэтому, если вы создали задний буфер в формате RGBA, передний буфер также будет в формате RGBA). Кстати, вы можете получить задний буфер и заблокировать его вместо того, чтобы получать передний буфер.
По умолчанию альфа-смешение выполняет те же операции на каналах R, G, B и A, но вы можете указать отдельную операцию только для альфа-канала — см. это.