我有两个带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)
。