AlphaBlending宽度DirectX和SharpDX给出了奇怪的结果

时间:2015-04-29 13:12:01

标签: c# wpf directx sharpdx

我一直试图让AlphaBlending使用DX9 + SharpDX + WPF组合,但是却无法获得正确的结果!

这里是两个三角形的样子,第一个是完全灰色的灰色,另一个是灰色,但是alpha为0.5。

enter image description here

问题在于,由于某种原因,半透明灰色被添加到目标灰色,即使根据我的理解,它应该用(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);
}

0 个答案:

没有答案