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?
Shawn Hargreaves , del XNA Team explica de forma extensa los cambios en los objetos de estado en XNA
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
mmmm, qué interesante. Gracias Javi!
Me pareció interesante y complementa el artículo:
http://blogs.msdn.com/b/shawnhar/archive/2010/04/02/state-objects-in-xna-game-studio-4-0.aspx
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