У FrontBuffer есть альфа-значение?

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

1 ответ

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

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

Другие вопросы по тегам