我想要的只是清除我的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);
答案 0 :(得分:3)
RenderTarget2D用于在屏幕上绘制内容,这会导致您的代码示例无法在屏幕上绘制任何内容。使用sprite批处理实际将RenderTarget2D绘制到后台缓冲区,这将影响显示。
另一个问题是,通过绘制完全透明的RenderTarget2D,您不会在屏幕上更改任何内容,因此即使您的代码正在创建渲染目标,使用透明度清除它,并在屏幕上绘制它也不会产生任何效果。
下面是使用渲染目标然后在屏幕上绘制该渲染目标的示例。您通常不希望使用rendertargets,除非您有非常昂贵的静态绘制操作,因此您可以将它们渲染一次到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()