8
我想要做的是在XNA中使用alpha混合,使繪製的紋理的一部分透明。舉例來說,我將屏幕清除爲某種顏色,可以說Blue。然後我畫一個紅色的紋理。最後,我繪製出的紋理只是從中心完全透明到邊緣完全黑色的徑向漸變。我想要的是先前繪製的紅色紋理在徑向漸變紋理的相同位置是透明的。所以你應該能夠通過紅色紋理看到藍色的背景。XNA Alpha混合使紋理的一部分透明
我認爲這會奏效。
GraphicsDevice.Clear(Color.CornflowerBlue);
spriteBatch.Begin(SpriteBlendMode.None);
spriteBatch.Draw(bg, new Vector2(0, 0), Color.White);
spriteBatch.End();
spriteBatch.Begin(SpriteBlendMode.None);
GraphicsDevice.RenderState.AlphaBlendEnable = true;
GraphicsDevice.RenderState.AlphaSourceBlend = Blend.One;
GraphicsDevice.RenderState.AlphaDestinationBlend = Blend.Zero;
GraphicsDevice.RenderState.SourceBlend = Blend.Zero;
GraphicsDevice.RenderState.DestinationBlend = Blend.One;
GraphicsDevice.RenderState.BlendFunction = BlendFunction.Add;
spriteBatch.Draw(circle, new Vector2(0, 0), Color.White);
spriteBatch.End();
GraphicsDevice.RenderState.AlphaBlendEnable = false;
但它似乎忽略了我所有的RenderState設置。我也嘗試將SpriteBlendMode設置爲AlphaBlend。它融合了紋理,但這不是我想要的效果。
任何幫助,將不勝感激。
感謝您的回答,這是非常接近的,但他們是一個問題。圓形紋理比背景紋理小,以上代碼發生的情況是僅在圓形紋理存在的地方繪製背景。這個想法是在鼠標指針所在的地方繪製圓形紋理,並且用戶可以看到圓形紋理所在的背景。 – DangerMouse 2010-04-19 02:00:58
@大衛,如果你需要反轉阿爾法面具使用白色清除阿爾法通道,並使用黑色繪製圓圈。 – 2010-04-19 10:24:01
它的工作表示感謝。 我不得不添加 GraphicsDevice.RenderState.DestinationBlend = Blend.Zero; GraphicsDevice.RenderState.SourceBlend = Blend.One; 就在繪製圓之前讓它工作。我認爲這是默認值,但它沒有工作,直到我設置它們。 感謝您的幫助。 – DangerMouse 2010-04-19 23:45:34