MonoGame – BlendState – SpriteBatch 2D

J'ai besoin de SpriteBatch pour rendre les images comme je l'attendrais dans WPF ou une application UIKit normale:

  • les files PNG partiellement transparents s'affichent les uns sur les autres, comme vous pouvez vous y attendre
  • J'ai un alpha que je peux modifier, de preference quelque chose comme l'utilisation de Color.White et la modification de la valeur A

Le plus proche a utilisé BlendState.NonPremultiplied , mais j'ai des lignes bizarres où les PNG partiellement transparents se chevauchent les uns les autres.

J'avais des problèmes similaires sur Windows (voir ici) , mais je l' Premultiplied corrigé en modifiant le paramètre Premultiplied dans le projet de contenu XNA. Comment puis-je faire similaire pour MonoGame? (Je m'attends à ce qu'il y ait une différence dans OpenGL ici)

Nous l'avons résolu en utilisant deux configurations différentes.

Sur Windows et XNA:

  • Utiliser BlendState.NonPremultiplied
  • Modifier le paramètre par défaut à Premultiply = False sur le projet de contenu pour tous les files PNG
  • Pour modifier la valeur Alpha d'une image-object, utilisez Color.White et définissez A valeur

Sur MonoGame et iOS:

  • Utiliser BlendState.AlphaBlend
  • Laissez les files PNG tels quels
  • Pour modifier la valeur Alpha d'une image-object, utilisez Color.White * (float)Alpha / (float)byte.MaxValue

Mes files PNG ne sont pas pré-multipliés et sont utilisés exactement comme vous le pensez en sortant de Photoshop.