2011-04-07 48 views
1

我正試圖在XNA 4.0中實現相同的效果,即this stackoverflow questioner試圖在XNA 3.1中獲得:即繪製背景,並在該透明「黑色遮罩」like so的黑色遮罩之上。XNA中的Alpha混合 - 我做錯了什麼?

在我試圖從其他提問者的答案中使用相同的着色器代碼獲得類似效果的XNA 4.0中,屏幕截圖爲i.imgur.com/V4yK6.jpg。很明顯,我做錯了什麼,因爲我希望它看起來像這樣:i.imgur.com/ZgD3l.jpg。任何人都可以在下面看看我的代碼,並告訴我一些關於我可能會做錯什麼的線索?這被後臺被抽出後叫:

  Rectangle originRect = glowingObject.BoundingRectangle; 

      // Draw glow overlay 
      int glowSideLength = SideLength; 
      Rectangle glowRect = new Rectangle(originRect.X - ((glowSideLength - originRect.Width)/2), 
       originRect.Y - ((glowSideLength - originRect.Height)/2), glowSideLength, glowSideLength); 

      RenderTarget2D renderTarget = new RenderTarget2D(spriteBatch.GraphicsDevice, 
       800, 600, false, SurfaceFormat.Color, DepthFormat.None, 4, RenderTargetUsage.PreserveContents); 

      spriteBatch.GraphicsDevice.SetRenderTarget(renderTarget); 
      spriteBatch.GraphicsDevice.BlendState = BlendState.Additive; 
      spriteBatch.GraphicsDevice.Clear(Color.Black); 

      //Draw some lights and apply shader 
      lightEffect.CurrentTechnique.Passes[0].Apply(); 
      spriteBatch.Draw(glowOverlay, glowRect, Color.White); 

      spriteBatch.GraphicsDevice.SetRenderTarget(null); 

      //Draw "light mask" 
      foreach (Gem gem in level.gems) 
       gem.Draw(gameTime, spriteBatch); 

      spriteBatch.Draw(renderTarget, Vector2.Zero, Color.White); 
      spriteBatch.GraphicsDevice.BlendState = BlendState.NonPremultiplied; 

的glow3質地,我現在測試的是一個透明的背景只是這個黑色形狀:i.imgur.com/3t9gf.png。 (注:我最初只是做了一個簡單的紋理,黑色的背景和透明的中心,並把它畫在上面,但現在我需要多個物體,可能會重疊的發光區域,這種方法將不再起作用;因此爲什麼我需要弄清楚阿爾法混合...)

回答