Смешивание с Direct3D SpriteBatch

Я пытаюсь добиться простого эффекта: рисование изображения на экране с прозрачным фоном. Я использую SpriteBatches для этого.

Вот мой код для создания состояния наложения:

D3D11_BLEND_DESC descBlend;
ZeroMemory(&descBlend, sizeof(descBlend));
descBlend.RenderTarget[0].BlendEnable = true;
descBlend.RenderTarget[0].BlendOp = D3D11_BLEND_OP_ADD;
descBlend.RenderTarget[0].BlendOpAlpha = D3D11_BLEND_OP_ADD;
descBlend.RenderTarget[0].DestBlend = D3D11_BLEND_INV_SRC_ALPHA;
descBlend.RenderTarget[0].DestBlendAlpha = D3D11_BLEND_INV_SRC_ALPHA;
descBlend.RenderTarget[0].SrcBlend = D3D11_BLEND_SRC_ALPHA;
descBlend.RenderTarget[0].SrcBlendAlpha = D3D11_BLEND_ONE;

m_d3dDevice->CreateBlendState(&descBlend, &m_Blend);

Я начинаю рисовать свои спрайты с:

m_SpriteBatch->Begin(SpriteSortMode_BackToFront, m_Blend);

Ничего не появляется на экране! Я что-то пропустил?

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

Любая помощь будет оценена.

0

Решение

Однажды я пытался достичь чего-то подобного и записал то, что я сделал в разработка игр

1

Другие решения

Вы должны определить, какие компоненты каждого пикселя цели рендеринга доступны для записи во время наложения.

descBlend.RenderTarget[0].RenderTargetWriteMask = D3D11_COLOR_WRITE_ENABLE_ALL;
1

С ZeroMemory(&descBlend, sizeof(descBlend)); Вы очистите все поля D3D11_BLEND_DESC включительно RenderTargetWriteMask, Эта маска определяет, записаны ли каналы или нет, если она равна нулю, ничего не пишется. Попробуйте установить его на D3D11_COLOR_WRITE_ENABLE_ALL,

1
По вопросам рекламы [email protected]