1

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

4

0 回答 0