001 Serie Guerra Espacial: Dibujar Modelos 3D en Pantalla

Esta serie inicia como parte de la secuencia de DEMOs cortas que se estarán transmitiendo en los episodios de MSCafeTV. La idea es iniciar un juego en 3D desde lo más básico e irlo construyendo y haciéndolo más complejo en cada episodio, aceptando ideas y sugerencias de ustedes! Espero que al final entre todos tengamos un juego divertidoSmile.

Para iniciar esta serie, lo primero que haremos es cargar modelos 3D al juego y dibujarlos en pantalla, para esto, en la parte de Content del Solution Explorer de Visual Studio creamos una carpeta llamada Models en donde agregamos todos los modelos que utilizaremos. Para este ejemplo utilizaremos un lanzador de misiles que está compuesto por dos modelos, la base y la cabeza (launcher_base.fbx y launcher_head.fbx) además incluimos la textura que en este caso se llama launcher.tga, luego de haber agregado estos 3 elementos, le damos clic derecho a la textura y seleccionamos la opción Exclude from Project para que no tengamos conflictos con los nombres y al final se debería ver así:

image

 

Seguido de eso proseguimos a declarar tanto los vectores y matrices que servirán para construir la cámara, creamos una clase para definir la estructura de nuestros objetos como esta:

class GameObject
{
        public Model model = null;
        public Vector3 position = Vector3.Zero;
        public Vector3 rotation = Vector3.Zero;
        public float scale = 1.0f;
        public Vector3 velocity = Vector3.Zero;
        public bool alive = false;
}

Luego declaramos nuestros modelos y los inicializamos. Luego de haberlo hecho, en el método de LoadContent() cargamos a nuestros objetos los modelos que agregamos anteriormente de la siguiente manera:

armaBase.model = this.Content.Load<Model>("Models/launcher_base");
armaCabeza.model = this.Content.Load<Model>("Models/launcher_head");

Y finalmente los dibujamos en pantalla para obtener un resultado como este:

image

Acá te dejo los siguientes links para que obtengas el código fuente y algunos artículos de interés:

Las herramientas utilizadas fueron:

  • Visual Studio 2010 – .NET Framework 4
  • XNA 4.0
Advertisements

Sprites Series: Draw many Sprites from a single Sprite Sheet

With a Sprit sheet you can combine sprite images into larger sheets, so you will only have to load one image to your project and then draw different sprites from it.

In this example the sprite sheet I’m going to use is a simple image named colors.png with four colors to be drawn in different sprites each color, first I have to add it to our project. (Right click to Content—>Add –> existing item)

colors

After adding colors.png to my project, I’m going to create a texture2D to hold my colors.png image and I’m also going to create four rectangles which are going to indicate where in the image colors.png is located each color square so the we can draw them separately:

Texture2D colorsSprite;

Rectangle red = new Rectangle(0, 0, 103, 150);
Rectangle green = new Rectangle(103, 0, 100, 150);
Rectangle yellow = new Rectangle(203, 0, 100, 150);
Rectangle brown = new Rectangle(303, 0, 100, 150);

Then I’m going to load colors.png to my content pipeline:

colorsSprite = this.Content.Load<Texture2D>("colors");

Now I’m ready to draw different sprites from the same colorsSprite like this:

protected override void Draw(GameTime gameTime)
{
     GraphicsDevice.Clear(Color.CornflowerBlue);

     spriteBatch.Begin();

     spriteBatch.Draw(colorsSprite, new Vector2(50.0f, 50.0f), brown, Color.White);
     spriteBatch.Draw(colorsSprite, new Vector2(150.0f, 100.0f), yellow, Color.White);
     spriteBatch.Draw(colorsSprite, new Vector2(250.0f, 150.0f), green, Color.White);
     spriteBatch.Draw(colorsSprite, new Vector2(350.0f, 200.0f), red, Color.White);

     spriteBatch.End();

     base.Draw(gameTime);
}

And the result is this:

colorsSprites

Resources:

SpriteSheetDEMO Source Code

Tool For Building Complex Sprite Sheets Easily