首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在XNA中使用RenderTarget2D时颜色错误

在XNA中使用RenderTarget2D时颜色错误
EN

Stack Overflow用户
提问于 2012-01-03 20:15:24
回答 1查看 1.1K关注 0票数 5

我已经开始使用XNA制作一个基于2D sprite的Windows游戏。我对它还不是很有经验,但我正在学习。首先我要说的是,我使用的是XNA游戏工作室3.1,我还没有更新到4.0 (还没有)。

我试图完成的是能够将我所有的精灵绘制到一个固定大小的缓冲区中,然后,在渲染过程结束时,缩放到实际后台缓冲区的大小,然后绘制到该缓冲区。我不确定通常如何支持多分辨率,但对我来说,这似乎是一个足够的解决方案。

我试图通过使用RenderTarget2D对象来绘制我的所有内容,然后从中获取Texture2D并将其绘制到后台缓冲区来实现这一点。

我的代码如下所示:

代码语言:javascript
复制
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);
}

我遇到的问题是颜色都错了。下面的图片显示了两个屏幕截图:第一个是它应该是什么样子的屏幕截图(我之前写了我自己的缩放算法,它只是简单地自动缩放每个精灵),右边是使用RenderTarget2D时它的外观。

有人知道我做错了什么吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-01-04 16:14:30

哦,我发现我做错了什么(有点)。我想我在创建新的RenderTarget2D实例时使用了错误的SurfaceFormat。我使用的是SurfaceFormat.Single,但我应该使用SurfaceFormat.Color。

我通过在设置新的PresentationParameters之前调试时通过手表查看GraphicsDevice的RenderTarget来解决这个问题:

代码语言:javascript
复制
GraphicsDevice.PresentationParameters.BackBufferFormat

这告诉我它被设置为SurfaceFormat.Color。所以我用SurfaceFormat.Color替换了SurfaceFormat.Single,现在它可以正常工作了。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8712152

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档