XNA

2012-01-03 11 views
5

में RenderTarget2D का उपयोग करते समय रंग गलत हैं I XNA का उपयोग करके 2 डी स्प्राइट आधारित विंडोज गेम बनाना शुरू कर दिया है। मैं अभी तक इसके साथ बहुत अनुभवी नहीं हूं लेकिन मैं सीख रहा हूं। मुझे यह कहने से शुरू करना है कि मैं एक्सएनए गेम स्टूडियो 3.1 का उपयोग कर रहा हूं, मैंने 4.0 (अभी तक) तक अपडेट नहीं किया है।XNA

जो मैं पूरा करने की कोशिश कर रहा हूं वह है कि मेरे सभी sprites को एक निश्चित आकार बफर में खींचने में सक्षम हो, जो कि प्रतिपादन पास के अंत में, वास्तविक बैकबफर के आकार के लिए स्केल किया गया था और फिर उस पर खींचा गया था । मुझे यकीन नहीं है कि कई संकल्प आमतौर पर कैसे समर्थित होते हैं, लेकिन यह मेरे लिए पर्याप्त समाधान की तरह लग रहा था।

मैंने अपनी सभी सामग्री को आकर्षित करने के लिए 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 का उपयोग करते समय दिखता है।

Example of what's wrong

किसी को भी मैं गलत क्या कर रहा पता है?

+1

यह परेशान है ... एक फ़ाइल में रेंडरटेक्चर के Texture2D को सहेजने का प्रयास करें (Texture2D में सहेजने के तरीके हैं) और यह देखने के लिए कि क्या यह समस्या है जब आप लक्ष्य पर अपना गेम खींच रहे हों या नहीं, यह अभी भी नीला है या नहीं या स्क्रीन पर लक्ष्य ड्राइंग (यानी, अगर सहेजी गई छवि ठीक लगती है, तो समस्या स्क्रीन पर आ रही है)। –

+0

नमस्ते, मैंने जो किया आपने किया और रेंडरटेक्चर की बनावट 2 डी ठीक दिखती है क्योंकि यह गलत रंगों के साथ स्क्रीनशॉट में है। तो जाहिर है कि समस्या इस प्रस्तुति के लिए चित्रण में निहित है। – Jerry

उत्तर

2

ओह मुझे पता चला कि मैंने क्या गलत किया है (तरह)। मुझे लगता है कि नया RenderTarget2D उदाहरण बनाते समय मैंने गलत SurfaceFormat का उपयोग किया था। मैंने SurfaceFormat.Single का उपयोग किया लेकिन मुझे SurfaceFormat.Color का उपयोग करना चाहिए था।

मैं इस एक घड़ी के माध्यम से GraphicsDevice की PresentationParameters पर एक नज़र लेने के द्वारा पता लगा, जबकि नए RenderTarget सेट करने से पहले डिबगिंग:

GraphicsDevice.PresentationParameters.BackBufferFormat 

यह मुझसे कहा कि यह SurfaceFormat.Color करने वाले थे। तो मैंने SurfaceFormat.Single SurfaceFormat.Color के साथ बदल दिया और अब यह काम करता है जैसा कि यह करना चाहिए।

+0

भावी पाठकों के लिए: यह स्पष्ट है कि जब आप इसे पढ़ते हैं तो गलत क्या हुआ: http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.surfaceformat.aspx SurfaceFormat.Color एक साधारण है 32-बिट आरजीबीए कलर स्पेस जबकि SurfaceFormat.Single लाल चैनल के लिए 32 बिट्स के साथ 32-बिट फ्लोट प्रारूप है। – Jerry

+0

मुझे लगता है कि सामान्य रूप से प्रस्तुति निर्दिष्ट किए बिना [RenderTarget2D कन्स्ट्रक्टर] (http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.graphics.rendertarget2d.rendertarget2d.aspx) का उपयोग करना सबसे अच्छा है। मापदंडों। – user1306322

संबंधित मुद्दे