C# xna 4.0中需要的特殊混合物

C# xna 4.0中需要的特殊混合物,c#,xna-4.0,C#,Xna 4.0,我得到了2个动态纹理,并希望将第二个纹理颜色添加到第一个纹理颜色,但第一个纹理颜色alpha不是0 类似于逆transparncey的东西 我添加了两个pic链接以显示我的意思: 到 仅碰撞部分必须添加两个纹理像素颜色 谢谢你的帮助,也许可以使用BlendState。添加剂对你来说就足够了 或者,也可以通过定制的混合状态来实现。。但我没有这方面的经验 或者您可以制作着色器,您应该注意,您必须使用四边形: 和一个布娃娃在一起。Qrd 四方形和圆形。质量控制 你在Qrd上画Qc 因此,你必须转换

我得到了2个动态纹理,并希望将第二个纹理颜色添加到第一个纹理颜色,但第一个纹理颜色alpha不是0 类似于逆transparncey的东西 我添加了两个pic链接以显示我的意思:

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


谢谢你的帮助,也许可以使用BlendState。添加剂对你来说就足够了

或者,也可以通过定制的混合状态来实现。。但我没有这方面的经验

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

和一个布娃娃在一起。Qrd 四方形和圆形。质量控制 你在Qrd上画Qc

因此,你必须转换你在像素着色器中得到的纹理坐标,该着色器拥有Qc,以在Qrd空间对纹理进行坐标变换

然后从Qrd纹理中采样颜色, 如果alpha接近于零,则剪裁像素。。。
否则您将从Qrc纹理返回样本

刚刚完成,效果非常好

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();
    }
}

无论如何,在你的时间里,这个问题可能会被问得更好,因为这与其说是添加,不如说是替换。如果你把它们加在一起,我想你最后会有品红色的斑点。否则,某种只影响RGB通道而忽略A的添加将实现您想要的效果。对不起,我帮不了你什么忙:我是2d着色器的新手,你能给我演示一下这个着色器的例子吗?你没有变换纹理坐标,所以如果你的纹理大小相同并且绘制在相同的位置也是正确的……是的,两个纹理都有相同的大小,请注意:D