そのため、ゲームプレイを XNA の RenderTarget2D にレンダリングして、シーンにシェーダーを適用できるようにしようとしています。ある程度は機能していますが、255 以外のアルファ レベルで描画されたものはすべて紫色に着色されているようです。アルファ効果は効いていますが、紫がかっています。解決策を探してみましたが、全画面が紫色にレンダリングされているか、アルファが紫色に置き換えられているように見えるだけです。
私の問題は、それらのどちらでもありません...
これは、何が起こっているかを示すために投げたシーンです。ご覧のとおり、アルファ効果は機能していますが、オブジェクトは紫色に着色されています。
レンダリングコードを投稿する部分は次のとおりです。
gameTarget = new RenderTarget2D(GraphicsDevice, (int)screenSize.X, (int)screenSize.Y, 1, SurfaceFormat.Color, RenderTargetUsage.PreserveContents);
gameDepthBuffer = new DepthStencilBuffer(GraphicsDevice, (int)screenSize.X, (int)screenSize.Y, GraphicsDevice.DepthStencilBuffer.Format);
これは私が使用している初期化です。
GraphicsDevice g = GraphicsDevice;
DepthStencilBuffer d = g.DepthStencilBuffer;
g.SetRenderTarget(0, gameTarget);
g.DepthStencilBuffer = gameDepthBuffer;
g.Clear(Color.Black);
GameBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState);
level.Draw(GameBatch);
GameBatch.End();
g.SetRenderTarget(0, null);
g.DepthStencilBuffer = d;
GameBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState);
if (renderEffect != null)
{
renderEffect.Begin();
renderEffect.CurrentTechnique.Passes[0].Begin();
}
Sprite.Draw(GameBatch, gameTarget.GetTexture(), new Rectangle(0, 0, (int)assumedSize.X, (int)assumedSize.Y), Color.White);
if (renderEffect != null)
{
renderEffect.CurrentTechnique.Passes[0].End();
renderEffect.End();
}
GameBatch.End();
renderEffect はエフェクト ファイル、Sprite は想定される画面サイズ (さまざまな解像度に対応するため) に対する描画を処理するクラスです。
私は XNA 3.1 で作業しています。今では 4.0 を使用する必要があることはわかっていますが、特定の状況で役立つ 3.1 に関する本を持っているため、使用していません。
とにかく、ここでいくつかの助けをいただければ幸いです...