xna 4.0中需要特殊混合

时间:2011-10-16 11:12:08

标签: c# xna-4.0

我有2个动态纹理,并希望为第一个纹理颜色添加第二个纹理颜色但是只是第一个纹理颜色alpha不是0 像反透明的东西 我添加两个图片链接,以显示我的意思:

http://img.7setare.com/images/k5znp5efpn1szfvwka.pnghttp://img.7setare.com/images/vs4p0qx81zxxrfh1v8d5.png

只是碰撞部分必须添加两个纹理像素颜色

为你提供帮助

2 个答案:

答案 0 :(得分:1)

也许使用BlendState.Additive对你来说已经足够了。

或者也许可以使用自定义BlendState实现..但我没有经历过这个...

或者您可以制作着色器,您应该注意到必须使用四边形:

  1. Quad with a rag doll。 (QRD)
  2. 带圆圈的四边形。 (QC)
  3. 你在Qrd上画Qc ......

    所以你必须描述你在拥有Qc的像素着色器中获得的纹理坐标,以便在Qrd空间纹理坐标......

    然后你从Qrd纹理中采样颜色, 如果alpha接近零,则剪切像素... 否则你从Qrc纹理

    返回样本

答案 1 :(得分:1)

刚刚做到了,效果很好

sampler circleSampler : register(s1);
sampler playerSampler : register(s0);

float4 main(float4 color : COLOR0 ,float2 texCoord : TEXCOORD0):COLOR0
{
float4 output = float4(1,1,1,1);
float4 CircColor = tex2D(circleSampler,texCoord);
float4 playerColor = tex2D(playerSampler,texCoord);
if (CircColor.a ==0)
{
output = playerColor;
}
else
{
output = CircColor* playerColor;
}
output.a = playerColor.a;
return output;
}

technique Technique1
{
    pass Pass1
    {

        PixelShader = compile ps_2_0 main();
    }
}

无论如何都是你的时间