XNA Alpha Blending de faire partie d'une texture transparente
Ce que j'essaie de faire est d'utiliser le mélange alpha dans XNA pour faire partie d'une texture transparente. Ainsi, par exemple, je effacer l'écran pour un peu de couleur, permet de dire que le Bleu. Je dessine ensuite une texture qui est rouge. Enfin je dessine une texture qui est juste un dégradé radial de complètement transparente dans le centre de complètement noir au bord. Ce que je veux, c'est le Rouge de la texture établi plus tôt pour être transparent dans les mêmes endroits que le gradient radial de la texture. Donc, vous devriez être en mesure de voir le bleu de l'arrière du terrain par le biais de la texture red.
J'ai pensé que ce serait le travail.
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;
Mais il semble juste d'ignorer tous mes RenderState paramètres. J'ai aussi essayé le réglage de la SpriteBlendMode à AlphaBlend. Il mélange les textures, mais ce n'est pas l'effet que je veux.
Toute aide serait appréciée.
OriginalL'auteur DangerMouse | 2010-04-17
Vous devez vous connecter pour publier un commentaire.
Ce que vous essayez de pour est le masquage du canal alpha.Le plus simple est de faire cuire le canal alpha en utilisant le contenu du pipeline. Mais si, pour une raison quelconque vous souhaitez le faire au moment de l'exécution, voici comment faire (à peu près) à l'aide d'une cible de rendu (Une meilleure et plus rapide solution serait d'écrire un shader)
D'abord créer un RenderTarget2D pour stocker et intermédiaire masquée texture
Définir la renderTarget, et de l'appareil d'état
Configurer les canaux d'écrire à la R, G, B de canaux et de dessiner le premier de la texture à l'aide d'un sprite lot
Ensemble des canaux alpha seulement, et de dessiner le masque alpha
vous pouvez maintenant restaurer la cible de rendu à la mémoire tampon d'arrière et de dessiner la texture de vos cheveux à l'aide de l'alpha blending.
Aussi n'oubliez pas de restaurer l'état:
Si vous avez besoin d'inverser le masque alpha effacer le canal alpha à l'aide de blanc et de tracer le cercle à l'aide de noir.
Il a travaillé grâce. J'ai dû ajouter GraphicsDevice.RenderState.DestinationBlend = Mélange.Zéro; GraphicsDevice.RenderState.SourceBlend = Mélange.Un; à droite avant de dessiner les cercles pour qu'il fonctionne bien. Je pensais que c'était les valeurs par défaut, mais cela n'a pas fonctionné jusqu'à ce que je les ai. Merci pour toute l'aide.
OriginalL'auteur Pop Catalin