¿Cómo deshabilito el filtrado de texturas para la escala de sprites en XNA 4.0?

22

Tengo un sprite que estoy tratando de escalar en XNA, pero XNA está aplicando algún tipo de filtro de textura que lo suaviza y lo hace ver feo. Me gustaría simplemente duplicar los píxeles en lugar de la interpolación. ¿Cómo lograría eso?

Daniel T.
fuente

Respuestas:

28

Necesita establecer el estado del muestreador. El valor predeterminado para SpriteBatch es SamplerState.LinearClamp( es decir: interpolación lineal, la suave / borrosa).

Elija una de las SpriteBatch.Beginllamadas que toma un SamplerStatey pasa SamplerState.PointClamp(selecciona el píxel en ese "punto" de precicio).

Andrew Russell
fuente
13

En caso de que alguien más se pregunte cómo hacer esto fuera de un lote de sprites, debe hacerlo justo antes de presentar sus primitivas:

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

Esto debe hacerse en cada cuadro, si hay otros elementos en su canal de renderizado que cambiarían este valor (como a SpriteBatch).

John Gietzen
fuente
3
¡Sí! Y solo en aras de la exhaustividad, también hay una SamplerState.PointWrapopción si desea que se realice el ajuste de la textura (mientras se deshabilita el filtrado de textura). O si necesita su propio comportamiento personalizado, puede crear un nuevo SamplerStateobjeto para adaptarse a cualquier necesidad personalizada y cambiar la Filterpropiedad a TextureFilter.Point.
David Gouveia