我正在尝试在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设置的排列,并尝试了相当多的像素着色器数学,但都没有用。
有谁能给我指个方向吗?
提前感谢=)
发布于 2011-03-15 16:13:11
我不知道C#是如何处理这些东西的,但一般来说,您会希望
AlphaSourceBlend = SrcAlpha
AlphaDestinationBlend = InvSrcAlpha(C#将其分别称为SourceAlpha和InvSourceAlpha )。显然,你会想要启用alpha混合,但我确信你已经做到了。
https://stackoverflow.com/questions/5308961
复制相似问题