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テクスチャの半透明性の正しい色付けが保証されます。ここで何かが問題を引き起こしていると思いますが、何が原因かわかりません。誰かがこれを手伝ってくれるなら、私はとても感謝しています。
乾杯。