C#XNA renderTarget2D.Clear(颜色.透明)不工作

C#XNA renderTarget2D.Clear(颜色.透明)不工作,c#,xna,draw,rendertarget,C#,Xna,Draw,Rendertarget,我只想清除一次renderTarget2D,使其完全透明,然后在帧之间保留其内容 我在绘制背景纹理后绘制renderTarget纹理,因此我不希望它在上面绘制。无论多么清晰(Color.Transparent),它显示为不透明的紫色,据我所知,这是默认的清晰颜色 我做错了什么?我尝试在构造函数中更改SurfaceFormat参数,但没有效果。我做错了什么 // instantiate renderTarget to preserve contents renderTarget = new Ren

我只想清除一次renderTarget2D,使其完全透明,然后在帧之间保留其内容

我在绘制背景纹理后绘制renderTarget纹理,因此我不希望它在上面绘制。无论多么清晰(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);

RenderTarget2D用于在屏幕外绘制内容,这会导致代码示例在屏幕上没有绘制任何内容。使用精灵批处理将RenderTarget2D实际绘制到后缓冲区,这将影响显示

另一个问题是,通过绘制完全透明的RenderTarget2D,您不会在屏幕上更改任何内容,因此即使您的代码正在创建rendertarget,使用透明度清除它,并且绘制它在屏幕上也不会产生任何效果

下面是使用渲染目标然后在屏幕上绘制该渲染目标的示例。通常不希望使用渲染目标,除非您有非常昂贵的静态绘制操作,以便可以将它们渲染一次到渲染目标并重用它们。或者,因为您不希望隔离要在其上运行着色器的场景

        _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()

愚蠢的问题,但是
renderTarget
renderTarget1
是一个输入错误吗?是的,在这里转换代码时,这是一个输入错误!哦,如果要做的第一件事是清除RenderTargetUsage.PreserveContents,那么为什么要使用它?PreserveContents是迄今为止最慢的RenderTargetUsage.GraphicsDevice.Clear(Color.Transparent);按预期清除渲染目标。但是,PreserveContents仅在rendertarget更改时保留内容,例如i GraphicsDevice.SetRenderTarget(null)。在所有RenderTargetUses中,RenderTarget在其spawwed out.PS之前不受影响。如果你想谈谈渲染目标是如何工作的,我在GameDev聊天中已经结束了,谢谢你在GameDev聊天中帮我弄明白了这一点!