我一直试图让AlphaBlending使用DX9 + SharpDX + WPF组合,但是却无法获得正确的结果!
这里是两个三角形的样子,第一个是完全灰色的灰色,另一个是灰色,但是alpha为0.5。
问题在于,由于某种原因,半透明灰色被添加到目标灰色,即使根据我的理解,它应该用(Source * SourceFactor)+(Dest * DestFactor)来计算,它应该是(0.5 * 0.5)+ (0.5 *(1 - 0.5))= 0.5,但不是。
代码的有趣部分:
device9.SetRenderState(D3D9.RenderState.AlphaBlendEnable, true);
device9.SetRenderState(D3D9.RenderState.SourceBlend, D3D9.Blend.SourceAlpha);
device9.SetRenderState(D3D9.RenderState.DestinationBlend, D3D9.Blend.InverseSourceAlpha);
device9.SetRenderState(D3D9.RenderState.BlendOperation, D3D9.BlendOperation.Add);
我有一个HLSL着色器,它获取顶点的位置和颜色,以及一个常量Alpha值,像素着色器看起来像这样:
float4 PixelShaderFunction(VertexShaderOutput input) : COLOR0
{
return float4(input.Color[0], input.Color[1], input.Color[2], input.Color[3] * Alpha);
}