次のように機能するには、BlendStateが必要です。
- 透明なPNGは期待どおりに描画され、背後にあるものはすべて保持されます
Color.White
PNGをそのまま描画するために使用します- 色のアルファチャネルを変更して、テクスチャの「不透明度」を変更します
この効果を得るには、BlendState.AlphaBlend
は近いですが、アルファを100または255以外の数値に設定すると、透明な部分として白が描画されます。
だから私たちはこれを試みました:
_blendState = new BlendState();
_blendState.AlphaSourceBlend = Blend.SourceAlpha;
_blendState.AlphaDestinationBlend = Blend.InverseSourceAlpha;
_blendState.ColorSourceBlend = Blend.SourceAlpha;
_blendState.ColorDestinationBlend = Blend.InverseSourceAlpha;
これは機能しますが、2つの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
別の方法で機能させるなど、別の色を使用してもかまいません。
Color.Red
* PS-もう1つの優れた機能は、テクスチャを「色付け」するために使用できる場合ですが、最初に一般的に機能させたいと考えています。