2012-03-30 73 views
0

我基本上是在每一幀畫一個紋理到自己,每次我畫它我想遞減的alpha,以便它最終擊中0,所以沒有人工製品留下。自定義BlendState以避免AlphaBlending工件

的基本公式爲:

result = (source * sourceBlendFactor) blendFunction (destination * destinationBlendFactor) 

而且因爲我的目標是Color.Transparent我想我需要:

result = 0 = (source * sourceBlendFactor); 

林貨架我的大腦會在不同BlendState組件,但我似乎爲了達到這個目標...

有沒有辦法讓alpha遞減線性?

+0

請不要用「C#XNA「和這樣的前綴您的圖書。這就是標籤是。 – 2012-03-30 03:59:19

+0

做文物存在,當你在我們選擇的編輯器查看您的資產?如果是這樣固定在那兒,如果沒有修復你設置的渲染選項以防止僞像出現,你所做的只是迫​​使任何部分透明的像素變得完全透明,換句話說,我確信你試圖修復症狀 – ClassicThunder 2012-03-30 18:07:40

+0

另外你如何導入你的資產,這聽起來像你的資產不預乘,你在你的Spritebatch中使用Blendstate,假設Texture2D是預乘。 – ClassicThunder 2012-03-30 18:10:51

回答

1

當然可以。定義一個值,該值保持1和0之間的當前alpha狀態。每幀縮小該值,直到它達到0.在draw方法中,確定色調的alpha值。

byte alpha = 255 - (currentAlphaState * 255); 
spriteBatch.Draw(...., new Color(255, 255, 255, alpha) ...); // assuming white is your default tint color 
+0

有沒有辦法從當前alpha狀態一個RenderTarg et2D對象?我基本上連續渲染到一個持久的RenderTarget2D類,其中舊圖像更透明,然後更新的圖像。我基本上希望它能夠將像素阿爾法值遞減到0. – kbirk 2012-03-30 02:49:55

+0

Rendertarget2D沒有類似'當前'阿爾法狀態的東西。紋理可以包含alpha像素,但這是不相關的。您可以將數據存儲在類的標籤成員中,但您真正應該看看的是一個可繪製的遊戲組件,它封裝了RenderTarget2D,它存儲了alpha混合狀態並更新了它的值。 – Polity 2012-03-30 02:56:30

+0

你也可以這樣做。spriteBatch.Draw(....,Color.White * currentAlphaState,...); – Blau 2012-03-30 06:35:26

相關問題