3

私が望むのは、renderTarget2D を一度クリアして完全に透明にしてから、フレーム間でコンテンツを保持することだけです。

背景テクスチャを描画した後に renderTarget テクスチャを描画するので、塗りつぶしたくありません。ただし、 Clear(Color.Transparent) は不透明な紫色として表示されます。これは、私が理解しているように、デフォルトの透明な色です...

私は何を間違っていますか?コンストラクターで SurfaceFormat パラメーターを変更しようとしましたが、効果がありませんでした。私は何を間違っていますか?

// instantiate renderTarget to preserve contents
renderTarget = new RenderTarget2D(GraphicsDevice,
                                   GraphicsDevice.PresentationParameters.BackBufferWidth,
                                   GraphicsDevice.PresentationParameters.BackBufferHeight,
                                   false,
                                   GraphicsDevice.PresentationParameters.BackBufferFormat,
                                   DepthFormat.Depth24,
                                   0,
                                   RenderTargetUsage.PreserveContents);
// clear with transparent color
GraphicsDevice.SetRenderTarget(Globals.renderTarget);
GraphicsDevice.Clear(Color.Transparent);
GraphicsDevice.SetRenderTarget(null);
4

1 に答える 1

3

RenderTarget2D は、コード サンプルが画面に何も描画していないという事実をもたらす画面外に描画するために使用されます。スプライト バッチを使用して、実際に RenderTarget2D をバック バッファーに描画し、表示に影響を与えます。

もう 1 つの問題は、完全に透明な RenderTarget2D を描画しても、画面上で何も変更されないことです。そのため、コードでレンダー ターゲットを作成し、透明度でクリアし、描画しても画面には何も影響しません。

以下は、レンダー ターゲットを使用して、そのレンダー ターゲットを画面に描画する例です。通常は、レンダー ターゲットに一度レンダリングして再利用できる、非常にコストのかかる静的な描画操作がない限り、レンダー ターゲットを使用したくありません。または、シェーダーを実行するシーンを分離したくないためです。

        _renderTarget = new RenderTarget2D(
            GraphicsDevice, 
            (int)size.X, 
            (int)size.Y);

        GraphicsDevice.SetRenderTarget(_renderTarget);
        GraphicsDevice.Clear(Color.Transparent);

        SpriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque);

        //draw some stuff.

        SpriteBatch.End()

        GraphicsDevice.SetRenderTarget(null);

        GraphicsDevice.Clear(Color.Blue);

        SpriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque);

        SpriteBatch.Draw(_renderTarget, Vector2.Zero, Color.white);

        SpriteBatch.End()
于 2012-03-29T16:33:58.563 に答える