XNAを使用して2DスプライトベースのWindowsゲームを作成し始めました。私はまだそれほど経験はありませんが、私は学んでいます。私はXNAゲームスタジオ3.1を使用していて、私はまだ4.0にアップデートしていないと言って始めましょう。XNAでRenderTarget2Dを使用すると、色が正しくない
私が達成しようとしているのは、固定サイズのバッファにすべてのスプライトを描画できるようにすることです。レンダリングパスの最後に、実際のバックバッファのサイズにスケーリングしてから描画します。私はどのように複数の解像度が通常サポートされているか分かりませんが、それは私にとっては適切な解決策のようです。
RenderTarget2Dオブジェクトを使用してすべての要素を描画し、それからTexture2Dを取得し、バックバッファに描画することで、これを達成しようとしました。
私のコードは次のようになります。
private RenderTarget2D RenderTarget;
private DepthStencilBuffer DepthStencilBufferRenderTarget;
private DepthStencilBuffer DepthStencilBufferOriginal;
private SpriteBatch SpriteBatch;
protected override void Initialize()
{
base.Initialize();
RenderTarget = new RenderTarget2D(GraphicsDevice, 1920, 1080, 1, SurfaceFormat.Single);
DepthStencilBufferRenderTarget = new DepthStencilBuffer(GraphicsDevice,
1920, 1080, GraphicsDevice.DepthStencilBuffer.Format);
DepthStencilBufferOriginal = GraphicsDevice.DepthStencilBuffer;
SpriteBatch = new SpriteBatch(GraphicsDevice);
}
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.DepthStencilBuffer = DepthStencilBufferRenderTarget;
GraphicsDevice.SetRenderTarget(0, RenderTarget);
GraphicsDevice.Clear(Color.Black);
SpriteBatch.Begin();
//drawing all stuff here
SpriteBatch.End();
GraphicsDevice.DepthStencilBuffer = DepthStencilBufferOriginal;
GraphicsDevice.SetRenderTarget(0, null);
GraphicsDevice.Clear(Color.Black);
Texture2D output = RenderTarget.GetTexture();
SpriteBatch.Begin();
Rectangle backbuffer = new Rectangle(0, 0, m_Options.DisplayWidth, m_Options.DisplayHeight);
SpriteBatch.Draw(output, backbuffer, Color.White);
SpriteBatch.End();
base.Draw(gameTime);
}
私が遭遇した問題は、色はすべて間違っているということです。以下は2つのスクリーンショットを示す画像です:最初は、どのように見えるのかのスクリーンショットです(私は独自のスケーリングアルゴリズムを書き、それまでは各スプライトを単純にスケーリングしていました)、RenderTarget2Dを使用したときの見た目です。
誰も私が間違ってやっている知っていますか?
これは難しいことです...レンダリングターゲットのTexture2Dをファイルに保存してみましょう(Texture2Dには保存用のメソッドがあります)。ターゲットにゲームを描画しているときに問題が発生しているかどうかを確認するために、 (つまり、保存された画像がうまく見える場合、問題は画面に描画されています)。 –
こんにちは、私はあなたが言ったことをして、レンダリングターゲットのtexture2Dは、間違った色でスクリーンショットにあるように正確に見えます。だから明らかに、このレンダリングターゲットに描画することに問題があります。 – Jerry