将纹理与常见的alpha结合起来

时间:2013-04-15 12:13:43

标签: c++ directx

我有两个带alpha通道的纹理,我需要通过以下方式“合并”:result_alpha = 1 - (1 - alpha_1) * (1 - alpha_2)。我可以通过一些渲染状态操作来做到这一点:

device->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_INVSRCALPHA); // note the inversion
device->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_SRCALPHA);

device->SetTextureStageState(0, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
device->SetTextureStageState(0, D3DTSS_ALPHAARG1, D3DTA_TEXTURE | D3DTA_COMPLEMENT);

device->SetTextureStageState(1, D3DTSS_ALPHAOP, D3DTOP_MODULATE);
device->SetTextureStageState(1, D3DTSS_ALPHAARG1, D3DTA_TEXTURE | D3DTA_COMPLEMENT);

但是,我还需要用一个恒定的alpha值调制结果,我不知道该怎么做。如果我只是将此Alpha设置为漫反射颜色,则结果将在(1-alpha, 1)范围内,而不是(0, alpha)

0 个答案:

没有答案