Как включить альфа-смешивание в DirectX? - PullRequest
4 голосов
/ 14 января 2012

Как это сделать в DirectX?

glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);

Каким-то образом я просто не могу заставить его работать. Я использую код:

d3ddev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCCOLOR);
d3ddev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCCOLOR);
d3ddev->SetRenderState(D3DRS_ALPHABLENDENABLE, 1);
d3ddev->SetRenderState(D3DRS_ALPHAFUNC, D3DCMP_GREATEREQUAL);
d3ddev->SetRenderState(D3DRS_ALPHAREF, (DWORD)50);
d3ddev->SetRenderState(D3DRS_ALPHATESTENABLE, 1);

Но это сделает мой полигон неким призрачным методом, я могу видеть сквозь все мои полигоны! я просто хочу сделать текстуру с альфа-каналом, чтобы показать сквозь эти полностью прозрачные кусочки текстуры. это работает с alphatest, но он по-прежнему показывает черные края, поэтому я предполагаю, что смешивание не включено, даже если я установил D3DRS_ALPHABLENDENABLE! Что я делаю не так?

1 Ответ

4 голосов
/ 14 января 2012

вместо SRCCOLOR мне нужно было использовать SRCALPHA:

d3ddev->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_SRCALPHA);
d3ddev->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_INVSRCALPHA);
...