编辑:问题解决了!见帖子结尾。
如何在 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
问题解决:公式不考虑图像 alpha,要修复它,您需要使图像背景为纯黑色,不透明度为 100%