1

我正在尝试在 HLSL 中组合两个纹理 - 具体来说,我想从基础图像中获取 alpha 值,并从叠加图像中获取颜色数据。

我的像素着色器看起来像这样:

float4 PixelShaderFunction(VertexOut input) : COLOR0
{
    float4 baseColor = tex2D( BaseSampler, input.baseCoords.xy ).rgba;
    float4 overlayColor = tex2D( OverlaySampler, input.overlayCoords.xy ).rgba;

    float4 color;
    color.r = overlayColor.r;
    color.g = overlayColor.g;
    color.b = overlayColor.b;
    color.a = baseColor.a;

    return color.rgba;
}

我的混合状态如下所示:

    BlendState bs = new BlendState();
    bs.AlphaSourceBlend = Blend.SourceAlpha;
    bs.AlphaDestinationBlend = Blend.DestinationAlpha;
    bs.ColorSourceBlend = Blend.SourceColor;
    bs.ColorDestinationBlend = Blend.DestinationColor;

这给我留下的是应该是覆盖颜色的褪色版本。我已经尝试了 BlendState 设置的多种排列,并且玩了很多像素着色器数学,但无济于事。

谁能指出我正确的方向?

提前感谢=)

4

1 回答 1

0

我不知道 C# 如何处理东西,但总的来说,你会想要

AlphaSourceBlend = SrcAlpha
AlphaDestinationBlend = InvSrcAlpha

(C# 分别称其为 SourceAlpha 和 InvSourceAlpha)。而且,很明显,你会想要启用 alpha 混合,但我相信你已经做到了。

于 2011-03-15T08:13:10.840 回答