Si utiliza un sombreado para dibujar la imagen, se puede modificar el estado de muestreo:
sampler2D mySampler = sampler_state
{
Texture=<SomeTexture>;
Filter=POINT;
};
muestreo de puntos debe evitar que la GPU de interpolación cuando el muestreo de la imagen, que es probablemente lo que está causando sus antialias/desenfoque comportamiento.
Si sólo está utilizando SpriteBatch
para dibujar la imagen, se puede establecer que el filtro usando:
Device.SamplerStates[0] = SamplerState.PointClamp;
Además, parece que puede que tenga que configurar el SpriteBatch utilizar el modo inmediato. See this article on MSDN for more information, o this thread on the App Hub forums.
He aquí un SO anterior hilo que probablemente va a ser muy útil:
See this thread for more information.
texturas son muestreadas utilizando coordenadas normalizadas (0..1, 0..1) en lugar de las coordenadas Texel. La GPU encontrará los cuatro téxeles más cercanos para una determinada coordenada de textura e interpolará entre ellos en función de la posición del punto de muestra dentro de ese cuadrado.
Por lo tanto, si tengo una textura de 10 x 10 píxeles y trato de leer, digamos, (0.15, 0.15), la GPU interpolará entre los téxeles en (1,1), (2, 1), (1,2) y (2,2). En este caso, el 0.05 debería hacer que el pixel resultante en la pantalla sea simplemente el promedio de los cuatro píxeles circundantes. Sin embargo, si la textura se muestreara a (0,19, 0,19), el color resultante estaría muy sesgado hacia el téxel en (2,2).
El muestreo de puntos hará que la GPU lea siempre un color exacto de la textura subyacente en lugar de ponderar las coordenadas alrededor del área de muestra.
Aquí hay una .draw() método de trabajo que ilustra todo esto:
protected override void Draw(GameTime gameTime)
{
GraphicsDevice.Clear(Color.Black);
var largeRect = new Rectangle(50, 50, sprite.Width * 3, sprite.Height * 3);
/// start the batch, but in immediate mode to avoid antialiasing
spriteBatch.Begin(SpriteSortMode.Immediate, BlendState.Opaque);
/// set the filter to Point
GraphicsDevice.SamplerStates[0] = SamplerState.PointClamp;
/// draw the sprite
spriteBatch.Draw(sprite, largeRect, Color.White);
/// done!
spriteBatch.End();
// TODO: Add your drawing code here
base.Draw(gameTime);
}
+1 para el sprite Star Control. – Rotem