XNA 4: Desactivar antialiasing

Meleagant

Buenas gente.

Estoy haciendo un juego de plataformas con gráficos rollo retro, totalmente pixelados. El caso es que tengo unas texturas de 16x16 para cada tile, pero cuando las dibujo sobre un rectángulo de 64x64 se me aplica un filtro de suavizado.

Quisiera eliminar ese filtro para que las imágenes se vean totalmente pixeladas, pero no encuentro la manera de hacerlo con XNA 4.0.

Os dejo unas imágenes para que veáis mi problema:

  • Este es el tileset original ampliado:

  • Este es el resultado en el juego:

B

En el constructor del juego pon:

graphics.PreferMultiSampling = false;

Meleagant

Eso ya lo hice (es lo único que he encontrado por ahí), pero el resultado es el mismo.

1 respuesta
B

#3 GraphicsDevice.RenderState.MultiSampleAntiAlias = false; tambien has probado? Creo que asi es solo para fullscreen.

De todas formas no habl yo, habla msdn xDDDD. Ahora, mi pregunta, a parte de los propios de C# has utilizado algun libro de referencia para aprender XNA o tiras de tutoriales?

1 respuesta
Meleagant

#4

Esa también la probé, pero RenderState ya no es miembro de GraphicsDevice en la versión 4 al parecer.

Antes de preguntar aquí he estado un buen rato con Google, así que lo más probable es que ahí no se encuentre la respuesta :( Muchas gracias de todas formas.

Sobre tu pregunta, utilizo el libro XNA Essentials que me compré hara un par de años. Lo malo es que ese libro está escrito para XNA 2.0, aunque en líneas generales sirve bastante bien.

Meleagant

SOLUCIONADO:

Para quien le interese, después de pegarme un buen rato con la documentación online de XNA, la causa está en que cuando utilizas el método Begin() sin parámetros del SpriteBatch, coge por defecto el SamplerState.Linear y aplica ese filtro.

Hay que utilizar alguna sobrecarga del método Begin que permita pasar el SamplerState.PointClamp como parámetro.

En mi caso he usado la siguiente:

spriteBatch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, SamplerState.PointClamp, DepthStencilState.None, RasterizerState.CullCounterClockwise);

Muchas gracias a ccoKee por su ayuda _

1 respuesta
B

#6 No ha sido nada, gracias en nombre de los desarrolladores con el mismo problema que googlearan intensamente en el futuro con pocas esperanzas de encontrar una solucion y menos un hilo auto-respondido.

Y gracias por la referencia, vi una charla sobre programacion de videojuegos en la universidad y pintaban bastante bien esta herramienta, sobre todo para compañias que empiezan y buscan una forma facil de desarrollar para una gran plataforma como xbox. De toda formas, siempre me ha dado tirria la maniobra de atar a los desarrolladores a sus plataformas como forma de inversion. Es sucio y a veces puede ser destructivo para el programador.

1 respuesta
r2d2rigo

Es que XNA es una capa de DirectX, normal que solo vaya en Win/Xbox/WP7...

dr_Rouman

Vaya, hace un año y medio o así me pasó lo mismo y no lo supe arreglar. Para juegos así pixeladitos los filtros lineales son un poco mierda, mejor nearest neighbour o similares.

NeB1

#7 también puedes verlo como una facilidad a la hora de desarrollar productos para una plataforma en concreto. Tardé un par de horas en hacer un juego tonto en XNA, eso no sería así si me tocara hacerlo en c++ a pelo.

No sé si era la play2 o la 3 (o ambas, o ninguna en caso de que sea fake xDD) que los desarrolladores tardarón en acostumbrarse al sistema de programación lo que retrasaba la salida de titulos (eso oí hace tiempo :P)

Usuarios habituales