編集:問題は解決しました!投稿の最後を参照してください。
DirectX 8 で Photoshop から「スクリーン」描画モードを実装するにはどうすればよいですか?
情報、このトピックで見つけました ( http://www.ziggyware.com/readarticle.php?article_id=228 ):
Result = 1 – (1 – destination) * (1 – source) Result = 1 – (1 – source – destination + destination * source) Result = 1 – 1 + source + destination – destination * source Result = source + destination – destination * source Result = destination + source – source * destination Result = destination + source * (1 – destination)
計算が完了したので、あとはブレンド モードを設定するだけです。
BlendOperation = Add DestinationBlend = One SourceBlend = InvDestColor
DirectX のブレンディング状態は次のようになっている必要があると思います。
pD3DDevice->SetRenderState(D3DRS_BLENDOP, D3DBLENDOP_ADD);
pD3DDevice->SetRenderState(D3DRS_DESTBLEND, D3DBLEND_ONE);
pD3DDevice->SetRenderState(D3DRS_SRCBLEND, D3DBLEND_INVDESTCOLOR);
それが正しいか?(結果が間違っています)
Photoshop の結果:
http://img192.imageshack.us/img192/7015/photoshopf.jpg
DirectX での私の結果:
http://img193.imageshack.us/img193/2969/directx.jpg
問題の解決: 式は画像のアルファを考慮していません。これを修正するには、画像の背景を不透明度 100% の黒一色にする必要があります。