2012-12-10 87 views
2

我正在做一些XNA 3.1的工作,我試圖用DrawUserPrimitives創建2D Ribbon Trails。我的算法只是在每一幀添加新的頂點(提供一些移動發生),並且迭代遍歷頂點並在它們消失時將它們淡出,去除不需要的頂點。這工作得很好,除了我使用SpriteBatch的很多其他圖形。現在,我將整個屏幕畫到一個RenderTarget2D(出於各種原因,我無法避免它),並且我得到了這個奇怪的alpha問題。XNA(3.1)DrawUserPrimitives和SpriteBatch alpha問題

這個問題我有看起來像這樣:

Trail is clearly not behaving correctly

這應該是一個白色痕跡淡出,因爲它去。顯然這沒有發生。相反,它會淡化到圖形設備的清晰顏色。繪製該軌跡時,我暫停SpriteBatch(通過調用End(),然後在繪圖完成後跟着Begin()),以便我可以深度正確。我使用繪製原始的作用僅僅是一個沒有什麼特別的它BasicEffect,並初始化SpriteBatch的代碼是在這裏:

 spriteBatch.Begin(SpriteBlendMode.AlphaBlend, SpriteSortMode.Immediate, SaveStateMode.SaveState); 
     graphics.GraphicsDevice.RenderState.SeparateAlphaBlendEnabled = true; 
     graphics.GraphicsDevice.RenderState.AlphaDestinationBlend = Blend.One; 
     graphics.GraphicsDevice.RenderState.AlphaSourceBlend = Blend.SourceAlpha; 
     graphics.GraphicsDevice.RenderState.SourceBlend = Blend.SourceAlpha; 
     graphics.GraphicsDevice.RenderState.DestinationBlend = Blend.InverseSourceAlpha; 

的設置初始化了SpriteBatch確保半透明正確着色後在RenderTarget紋理中。我的猜測是這裏有些東西會導致這個問題,但我不確定是什麼。如果有人能幫助我,我會非常感激。

乾杯。

回答

2

哦......我修好了。需要將SaveStateMode.SaveState替換爲SaveStateMode.None。

仍然不知道爲什麼我不能讓反鋸齒就可以了,但...

+1

值得指出的是'SaveStateMode.SaveState'是從來沒有很好的表現(在XNA 4得到去除)。多邊形邊緣的消除鋸齒需要在後端緩衝器上設置多重採樣。 –

+0

是的,謝謝你指出。 我已經在我的後臺緩衝區中設置了多重採樣,並且已經測試過它在繪製多邊形時仍然是首選,並且我的硬件支持它。 – Hoeloe