我们需要一个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
以“色彩”的纹理,但我们希望它在一般工作第一。