[XNA] Más cambios en la API de XNA 4.0, wireframes

Shawn Hargreaves, del XNA Team explica de forma extensa los cambios en los objetos de estado en XNA 4.0 -o sea que no voy a repetir o traducir su artículo-. Lo que sí que voy a hacer es poner un pequeño ejemplo de como usar estos nuevos objeots para renderizar un modelo 3D sin su textura, y sin rellenar los triángulos, “pintando” sólo las aristas, es decir, renderizar su wireframe. Lo que vendría a ser algo así:

¿Para qué sirve renderizar un modelo en forma de wireframes? En mi opinión puede ser muy útil para debugar, para analizar el comportamiento de nuestros modelos ante nuestras rutinas de detección de colisiones por ejemplo, o contra un posible engine de físicas.

En XNA es muy fácil decirle a la tarjeta gráfica si debe renderizar el wireframe o bien todo el modelo con sus texturas y demás. En XNA 3.1 esto lo hacíamos así:

GraphicsDevice.RenderState.FillMode = FillMode.WireFrame;

Así de simple! Ahí va un ejemplo de como quedaría la cosa:

[View:http://www.youtube.com/watch?v=P8T1w_ZzldQ:550:0]

Lo cierto es que en XNA 4.0 no es más difícil, pero sí que ha cambiado. Es uno de los cambios “molestos” con los que me he encontrado en un proyecto personal -y de aquí a que lo comparta con vosotros, además que la documentación de estas clases en el MSDN digamos que es quizá un poco “breve”-. Se haría de la forma siguiente:

RasterizerState raster = new RasterizerState();

raster.FillMode = FillMode.WireFrame;
GraphicsDevice.RasterizerState = raster;

Este sería un ejemplo en XNA 4.0, y además sobre el emulador de Windows Phone 7:

[View:http://www.youtube.com/watch?v=EZzMelXdfJA:550:0]

Lo “molesto” es que hay que instanciar un objeto “RasterizerState”, pero tampoco es el fin del mundo verdad?

5 comentarios en “[XNA] Más cambios en la API de XNA 4.0, wireframes”

  1. Buena explicación, aunque donde dices que “lo molesto es tener que instanciar un objeto RasterizerState”, la verdad es que esto ha sido un gran avance en eficiencia, se hace para no tener que estar copiando estados como se hacía hasta la versión 3.1 de XNA con el SaveStateMode que tenían los spriteBatch por ejemplo, lo cual era muy lento.

    Saludos

  2. hola Tyler,

    Pues de echo lo creé a partir de ese artículo, que es muy bueno pero no entraba mucho en ejemplos concretos. Gracias por los comentarios.

    JB

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *