Quello che sto cercando di fare è usare la fusione alfa in XNA per rendere trasparente una parte di una trama disegnata. Quindi, ad esempio, ho cancellato lo schermo con un po 'di colore, diciamo Blue. Poi disegno una trama che è rossa. Alla fine disegno una texture che è solo un gradiente radiale da completamente trasparente al centro a completamente nero sul bordo. Quello che voglio è che la texture rossa disegnata in precedenza sia trasparente negli stessi punti della trama gradiente radiale. Quindi dovresti essere in grado di vedere il terreno posteriore blu attraverso la trama rossa.XNA Alpha Fusione per rendere trasparente una parte di una trama
Ho pensato che questo avrebbe funzionato.
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;
Ma sembra proprio ignorare tutte le mie impostazioni RenderState. Ho anche provato a impostare SpriteBlendMode su AlphaBlend. Mescola le trame, ma questo non è l'effetto che voglio.
Qualsiasi aiuto sarebbe apprezzato.
Grazie per la risposta e questo è estremamente vicino, ma il loro è un problema. La trama del cerchio è più piccola della trama dello sfondo e ciò che sta accadendo con il codice precedente è che lo sfondo è disegnato solo dove esiste la trama del cerchio. L'idea è di disegnare la trama del cerchio dove si trova il puntatore del mouse e l'utente può vedere attraverso il terreno posteriore dove si trova la trama del cerchio. – DangerMouse
@David, Se è necessario invertire la maschera alfa, deselezionare il canale alfa usando il bianco e disegnare il cerchio usando il nero. –
Ha funzionato grazie. Ho dovuto aggiungere GraphicsDevice.RenderState.DestinationBlend = Blend.Zero; GraphicsDevice.RenderState.SourceBlend = Blend.One; giusto prima di disegnare i cerchi per farlo funzionare. Pensavo che fossero i valori predefiniti ma non ha funzionato fino a quando non li ho impostati. Grazie per tutto l'aiuto. – DangerMouse