2012-05-11 55 views
1

所以,我試圖將我的遊戲玩法渲染到XNA中的RenderTarget2D,所以我可以將着色器應用到場景中。它在某種程度上起作用,但是任何已經用255以外的alpha級別繪製的東西似乎都是紫色的。阿爾法效果工作,但也有一個紫色色調。我嘗試過四處尋找解決方案,而我似乎可以找到的唯一方法是全屏顯示爲紫色,或者將alpha替換爲紫色。RenderTarget2D色調所有阿爾法紫色

我的問題是不是那些......

Tinting purple!

相當要麼這是一個場景我吐出來給你看這是怎麼回事。正如你所看到的,阿爾法效果正在發揮作用,但是物體呈紫色。

這裏就是我發表我的渲染代碼部分:

gameTarget = new RenderTarget2D(GraphicsDevice, (int)screenSize.X, (int)screenSize.Y, 1, SurfaceFormat.Color, RenderTargetUsage.PreserveContents); 

gameDepthBuffer = new DepthStencilBuffer(GraphicsDevice, (int)screenSize.X, (int)screenSize.Y, GraphicsDevice.DepthStencilBuffer.Format); 

這是我使用的初始化。

GraphicsDevice g = GraphicsDevice; 
DepthStencilBuffer d = g.DepthStencilBuffer; 
g.SetRenderTarget(0, gameTarget); 
g.DepthStencilBuffer = gameDepthBuffer; 
g.Clear(Color.Black); 
GameBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState); 
     level.Draw(GameBatch); 

GameBatch.End(); 
g.SetRenderTarget(0, null); 
g.DepthStencilBuffer = d; 
GameBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState); 
     if (renderEffect != null) 
     { 
      renderEffect.Begin(); 
      renderEffect.CurrentTechnique.Passes[0].Begin(); 
     } 
     Sprite.Draw(GameBatch, gameTarget.GetTexture(), new Rectangle(0, 0, (int)assumedSize.X, (int)assumedSize.Y), Color.White); 
     if (renderEffect != null) 
     { 
      renderEffect.CurrentTechnique.Passes[0].End(); 
      renderEffect.End(); 
     } 
     GameBatch.End(); 

renderEffect是效果文件,Sprite是處理相對於假定屏幕尺寸的繪圖的類(以應對不同的分辨率)。

我正在使用XNA 3.1。我知道我現在應該使用4.0,但我並不是因爲我有3.1的書,這在某些情況下很有幫助。

總之,這裏的一些幫助,將不勝感激......

+0

可能有更好超過在[gamedev]問這樣一個(http://gamedev.stackexchange.com/) – musefan

+0

可能,但我不知道是否存在的gamedev部分的內容,直到您發佈鏈接。 – Hoeloe

回答

1

固定!我需要設置一些參數阿爾法:

GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = true; 
GraphicsDevice.RenderState.AlphaDestinationBlend = Blend.One; 
GraphicsDevice.RenderState.AlphaSourceBlend = Blend.SourceAlpha; 
GraphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha; 
GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha; 
3

一般紫色是默認顏色到渲染目標被清除。

考慮到這一點,在將渲染目標設置爲null後,我發現您並未清除Back Buffer。所以你的代碼應該是這樣的:

g.SetRenderTarget(0, null); 
g.Clear(Color.Transparent);//or black 
+0

謝謝你,這個伎倆。只需將其設置爲TransparentBlack,它就可以工作。 – Hoeloe

+0

實際上,再看一遍,它現在將所有的東西都染成黑色。在XNA 3.1中沒有「Color.Transparent」,所以我不知道該怎麼做。 – Hoeloe

+0

等一下,修好了。我會發布我自己的答案... – Hoeloe

相關問題