Tôi đã bắt đầu tạo trò chơi Windows dựa trên 2D sprite bằng XNA. Tôi chưa có nhiều kinh nghiệm nhưng tôi đang học. Hãy để tôi bắt đầu với nói rằng tôi đang sử dụng studio game XNA 3.1, tôi chưa cập nhật lên 4.0 (chưa).Màu sắc sai khi sử dụng RenderTarget2D trong XNA
Những gì tôi đang cố gắng hoàn thành là có thể vẽ tất cả các sprites của mình vào một bộ đệm kích thước cố định, sau đó, ở cuối của kết xuất, thu nhỏ kích thước của backbuffer thực tế và sau đó rút ra . Tôi không chắc chắn bao nhiêu độ phân giải thường được hỗ trợ, nhưng nó có vẻ giống như một giải pháp thích hợp cho tôi.
Tôi đã cố gắng để đạt được điều này bằng cách sử dụng một đối tượng RenderTarget2D để vẽ tất cả nội dung của tôi, sau đó lấy Texture2D từ đó và vẽ nó vào bộ đệm sau.
Mã của tôi trông như thế này:
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);
}
Vấn đề tôi gặp phải là các màu sắc đều sai. Dưới đây là hình ảnh hiển thị hai ảnh chụp màn hình: ảnh đầu tiên là ảnh chụp màn hình của nó (tôi đã viết thuật toán chia tỷ lệ của chính tôi trước đó đơn giản là thu nhỏ từng chữ sprite) và bên phải nó trông như thế nào khi sử dụng RenderTarget2D.
Có ai biết tôi đang làm gì sai không?
Thật rắc rối ... hãy thử lưu Texture2D của biểu đồ rendert vào một tệp (Texture2D chứa các phương thức để lưu) và xem liệu nó có còn màu xanh để xác định xem có vấn đề hay không khi bạn vẽ trò chơi của mình đến mục tiêu hoặc vẽ mục tiêu trên màn hình (ví dụ: nếu hình ảnh đã lưu có vẻ ổn, vấn đề sẽ được vẽ lên màn hình). –
Xin chào, tôi đã làm những gì bạn nói và texture2D của rendertarget trông giống hệt như trong ảnh chụp màn hình có màu sai. Vì vậy, rõ ràng vấn đề nằm trong bản vẽ cho mục tiêu này. – Jerry