lunes, 18 de octubre de 2010

[XNA] Tratando sprites como quads empleando shaders

Una de las novedades de XNA 4.0 radica en la posibilidad de usar un SpriteBatch como si de un quad se tratara. La principal ventaja que tiene este método es por un lado que nos evitamos la necesidad de programar y gestionar el quad y por otro la posiblidad de tratar dicho sprite con Shaders.

Para ello vamos a emplera el shader básico que soporta XNA, es decir, el BasifEffect. Con este shader vamos a pinta el sprite. Por lo tanto, lo primero que tenemos que hacer es declarar las variables e instanciarlas:

   1: private SpriteBatch sprite;
   2: private BasicEffect basicEffect;
   1: public override void Initialize()
   2: {
   3:     this.sprite = new SpriteBatch(this.Game.GraphicsDevice);
   4:     this.basicEffect = new BasicEffect(this.Game.GraphicsDevice);
   5:     base.Initialize();
   6: }   

En el método Draw la estructura cambia un poco. Antes, para dibujar un sprite se tenía la siguiente estructura:

sprite.Begin(params….);

sprite.Draw(…);

sprite.End();

Al usar el shader, en primer lugar debemos configurarle los parámetros adecuados. En este caso, como lo vamos a tratar como un quad necesitamos indicarle la matriz de vista y la matriz de proyección. Posteriormente trataremos el sprite como se mostró anteriormente, pero insertándole el shader:

   1: this.basicEffect.View = game.WorldEngine.Camera.ViewMatrix;
   2: this.basicEffect.Projection = game.WorldEngine.Projection;
   3: sprite.Begin(0, BlendState.AlphaBlend, null, null, null, this.basicEffect);
   4: for (int i = 0; i < this.spriteList.Count; i++)
   5: {
   6:     this.sprite.Draw(this.spriteList[i].Texture, this.spriteList[i].Position, Color.White);
   7: }
   8: this.sprite.End();

No hay comentarios:

Publicar un comentario