1

次のように機能するには、BlendStateが必要です。

  • 透明なPNGは期待どおりに描画され、背後にあるものはすべて保持されます
  • Color.WhitePNGをそのまま描画するために使用します
  • 色のアルファチャネルを変更して、テクスチャの「不透明度」を変更します

この効果を得るには、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を使用すると、背景が白に置き換えられます。

BlendStateSpriteBatchから目的の効果を得るには、何を使用する必要がありますか?Color.Black別の方法で機能させるなど、別の色を使用してもかまいません。

Color.Red* PS-もう1つの優れた機能は、テクスチャを「色付け」するために使用できる場合ですが、最初に一般的に機能させたいと考えています。

4

1 に答える 1

1

コンテンツプロジェクトでそれらの.pngをに設定premultipliedAlphaしてみてください。false

残念ながら、を使用するときにこの問題を解決する方法がわかりませんTexture2d.FromStream()

于 2012-05-05T21:04:31.830 に答える