Comment désactiver le filtrage de texture pour la mise à l'échelle des sprites dans XNA 4.0?

22

J'ai un sprite que j'essaie de mettre à l'échelle dans XNA, mais XNA applique une sorte de filtrage de texture qui le lisse et le rend laid. J'aimerais qu'il fasse juste un doublage de pixels au lieu d'une interpolation. Comment pourrais-je accomplir cela?

Daniel T.
la source

Réponses:

28

Vous devez définir l'état de l'échantillonneur. La valeur par défaut pour SpriteBatch est SamplerState.LinearClamp(c'est-à-dire: interpolation linéaire - celle lisse / floue).

Choisissez l'un des SpriteBatch.Beginappels qui prend un SamplerStateet passe SamplerState.PointClamp(sélectionne le pixel à ce "point" de précision).

Andrew Russell
la source
13

Juste au cas où quelqu'un d'autre se demanderait comment faire cela en dehors d'un lot de sprites, vous le feriez juste avant de rendre vos primitives:

this.GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;

Cela doit être fait sur chaque image, s'il y a d'autres éléments dans votre pipeline de rendu qui changeraient cette valeur (comme a SpriteBatch).

John Gietzen
la source
3
Oui! Et juste pour être complet, il y a aussi un SamplerState.PointWrapsi vous souhaitez que le wrapping de texture ait lieu (tout en désactivant le filtrage de texture). Ou si vous avez besoin de votre propre comportement personnalisé, vous pouvez créer un nouvel SamplerStateobjet pour répondre à tous les besoins personnalisés et modifier la Filterpropriété en TextureFilter.Point.
David Gouveia