-->

XNA BlendState与SpriteBatch(XNA BlendState with Spr

2019-10-16 16:44发布

我们需要一个BlendState充当如下:

  • 透明的PNG绘制预期,任何事情他们身后保存
  • 我们使用Color.White绘制PNG原样
  • 我们将改变颜色的alpha通道来改变纹理的“不透明度”

为了获得这种效果, BlendState.AlphaBlend是接近的,但如果我们将阿尔法100或任意数量超过255个其他绘制白色的透明部分。

因此,我们尝试这样的:

        _blendState = new BlendState();
        _blendState.AlphaSourceBlend = Blend.SourceAlpha;
        _blendState.AlphaDestinationBlend = Blend.InverseSourceAlpha;
        _blendState.ColorSourceBlend = Blend.SourceAlpha;
        _blendState.ColorDestinationBlend = Blend.InverseSourceAlpha;

这工作,但我们现在得到不期望的效果,如果两个PNG文件都在彼此的顶部。 基本上,我们得到了一些奇怪的地方行,它看起来像的像素数据将被加入(或一些)。

例:

实际上, BlendState.AlphaBlend是这样的:

        _blendState = new BlendState();
        _blendState.AlphaSourceBlend = Blend.SourceAlpha;
        _blendState.AlphaDestinationBlend = Blend.InverseSourceAlpha;
        _blendState.ColorSourceBlend = Blend.One;
        _blendState.ColorDestinationBlend = Blend.InverseSourceAlpha;

图片看起来比上面的好:

但随后阿尔法不起作用,使用100作为阿尔法将取代白色背景。

什么BlendState我们应该用它来获得从SpriteBatch我们所期望的效果? 我们即可使用不同的颜色,如Color.Black有另一种方式来得到它的工作。

* PS -另一个不错的功能是,如果我们可以用Color.Red以“色彩”的纹理,但我们希望它在一般工作第一。

Answer 1:

尝试设置premultipliedAlphafalse ,在内容项目为那些巴纽的。

不幸的是,我不知道使用后如何解决这个问题Texture2d.FromStream()



文章来源: XNA BlendState with SpriteBatch