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