1

次の方法で「結合」する必要があるアルファ チャネルを持つ 2 つのテクスチャがあります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);

ただし、一定のアルファ値で結果を変調する必要もありますが、その方法がわかりません。そのアルファを単純に拡散色に設定すると、結果は(1-alpha, 1)ではなく範囲内になり(0, alpha)ます。

4

0 に答える 0