编辑:问题解决了!见邮报的结尾。
如何在DirectX 8中实现Photoshop的“屏幕”混合模式?
信息,我在这个主题(id=228)上找到了:
结果=1- (1 -目的地)* (1 -源)结果=1- (1 -源-目的地+目标*源)结果=1-1+源+目的地-目的地*源结果=源+目的地-源*源结果=目的地+源* (1 -目的地) 现在我们已经计算好了,我们只需设置混合模式: 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%不透明
发布于 2009-06-06 19:02:30
以下一行是错误的:
pD3DDevice->SetTextureStageState(0, D3DTSS_COLOROP, D3DTOP_ADD);您的意图可能是状态α搅拌器应该做添加,但D3DTSS_COLOROP设置不影响最终搅拌器,它设置纹理组合器。将其设置为从纹理中向样本添加一些东西(前一/下一阶段的结果,或类似的结果),这是错误的。D3DTOP_SELECTARG1或默认的D3DTOP_MODULATE应该完成这项工作。
相反,您需要写的是:
pD3DDevice->SetRenderState(D3DBLENDOP, D3DBLENDOP_ADD);发布于 2009-06-06 18:24:03
这个数学似乎是正确的,您设置DirectX函数的方式应该是有效的。
我的建议是:
- apologies if you have already done both of those.
https://stackoverflow.com/questions/960176
复制相似问题