如何在DirectX上启用alpha混合?

时间:2012-01-14 18:17:41

标签: directx alphablending blending

如何在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);

但它会用某种幻影方法渲染我的多边形,我可以看到我的所有多边形!我只是想用alpha通道制作纹理来展示那些完全透明的纹理。这适用于alphatest,但它仍然显示黑色边缘,所以我猜混合未启用,即使我已设置D3DRS_ALPHABLENDENABLE!我做错了什么?

1 个答案:

答案 0 :(得分:4)

而不是SRCCOLOR我需要使用SRCALPHA:

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