Я начал делать 2D-игру на основе спрайтов Windows с помощью XNA. Я еще не очень опытен, но я учусь. Позвольте мне начать с того, что я использую XNA game studio 3.1, я не обновил до 4.0 (пока).Цвета ошибочны при использовании RenderTarget2D в XNA
То, что я пытаюсь выполнить, состоит в том, чтобы иметь возможность рисовать все мои спрайты в буфере фиксированного размера, который затем в конце прохода рендеринга масштабируется до размера фактического буфера, а затем натягивается на этот , Я не уверен, как обычно поддерживается несколько резолюций, но это казалось мне адекватным решением.
Я попытался добиться этого, используя объект 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);
}
Проблема я сталкиваюсь, что цвета все не так. Ниже приведена картинка с двумя скриншотами: первый - это скриншот того, как он должен выглядеть (я написал свой собственный алгоритм масштабирования, перед которым просто масштабировался каждый спрайт сам по себе), и вправо он выглядит так, как он выглядит при использовании RenderTarget2D.
Кто-нибудь знает, что я делаю неправильно?
Это недоумение ... попробуйте сохранить текстуру Rendertarget's Texture2D в файл (Texture2D содержит методы для сохранения) и посмотрите, все еще синий, чтобы определить, является ли проблема, когда вы рисуете игру до цели или рисование цели на экране (т. е. если сохраненное изображение выглядит нормально, проблема заключается в рисовании на экран). –
Привет, я сделал то, что вы сказали, и текстура rendertarget текстуры2D выглядит точно так же, как на скриншоте с неправильными цветами. Таким образом, очевидно, что проблема заключается в том, чтобы привлечь к этой rendertarget. – Jerry