Lo que estoy tratando de hacer es usar la mezcla alfa en XNA para hacer parte de una textura transparente dibujado. Entonces, por ejemplo, borro la pantalla de algún color, digamos Azul. Luego dibujo una textura que es roja. Finalmente dibujo una textura que es solo un degradado radial, desde completamente transparente en el centro hasta completamente negro en el borde. Lo que quiero es que la textura roja dibujada antes sea transparente en los mismos lugares que la textura radial del degradado. Entonces debería poder ver el fondo azul a través de la textura roja.XNA Fundido alfa para hacer parte de una textura transparente
pensé que esto iba a funcionar.
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;
Pero parece que ignora todas las configuraciones de mi RenderState. También intenté configurar el SpriteBlendMode en AlphaBlend. Combina las texturas, pero ese no es el efecto que quiero.
Cualquier ayuda sería apreciada.
Gracias por la respuesta y esto es extremadamente estrecha, pero su es un problema. La textura del círculo es más pequeña que la textura de fondo, y lo que está sucediendo con el código anterior es que el fondo solo se dibuja donde existe la textura del círculo. La idea es dibujar la textura del círculo donde está el puntero del mouse y el usuario puede ver a través del fondo donde está la textura del círculo. – DangerMouse
@ David, si usted necesita para invertir la máscara alfa borrar el canal alfa utilizando blanco y dibujar el círculo usando negro. –
Funcionó gracias. Tuve que agregar GraphicsDevice.RenderState.DestinationBlend = Blend.Zero; GraphicsDevice.RenderState.SourceBlend = Blend.One; justo antes de dibujar los círculos para conseguir que funcione sin embargo. Pensé que estos eran los valores predeterminados, pero no funcionó hasta que los configuré. Gracias por toda la ayuda. – DangerMouse