2

XNA 3.1で何かを作成していて、DrawUserPrimitivesを使用して2Dリボントレイルを作成しようとしています。私のアルゴリズムは、フレームごとに新しい頂点を追加するだけであり(何らかの動きが発生した場合)、頂点を繰り返し処理してフェードアウトし、不要な頂点を削除します。これは、他の多くのグラフィックにSpriteBatchを使用していることを除いて、非常にうまく機能します。現在、この画面全体をRenderTarget2Dに描画しています(さまざまな理由で、回避できません)。この奇妙なアルファの問題が発生しています。

私が抱えている問題は次のようになります。

トレイルは明らかに正しく動作していません

これは、進むにつれてフェードアウトする白いトレイルである必要があります。明らかにこれは起こっていません。代わりに、グラフィックスデバイスのクリアな色にフェードします。このトレイルを描画するときは、SpriteBatchを一時停止し(描画が完了したらEnd()を呼び出し、続いてBegin()を呼び出します)、正しい深さを取得できるようにします。プリミティブを描画するために使用しているエフェクトは、特別なものが何もないBasicEffectであり、SpriteBatchを初期化するコードは次のとおりです。

        spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState);
        graphics.GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = true;
        graphics.GraphicsDevice.RenderState.AlphaDestinationBlend = Blend.One;
        graphics.GraphicsDevice.RenderState.AlphaSourceBlend = Blend.SourceAlpha;
        graphics.GraphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha;
        graphics.GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha;

SpriteBatchを初期化した後の設定により、RenderTargetテクスチャの半透明性の正しい色付けが保証されます。ここで何かが問題を引き起こしていると思いますが、何が原因かわかりません。誰かがこれを手伝ってくれるなら、私はとても感謝しています。

乾杯。

4

1 に答える 1

2

ああ...私はそれを修正しました。SaveStateMode.SaveStateをSaveStateMode.Noneと交換する必要があります。

それでも、なぜアンチエイリアスを取得できないのか疑問に思っています...

于 2012-12-10T15:20:24.840 に答える