Tag Archive: 3d


Tutorial Dibujar un modelo 3D en XNA (Tutorial en bzkGaming)

Hola pues el inicio tan esperado de la creación de un videojuego está por comenzar para este tutorial necesitaremos nuestro modelo en 3D para la gente que no tenga forma de hacer un modelo en 3D Max, Blender, etc. Subo este que yo hice en blender en FBX, pues no es gran cosa no tiene textura solo color, pero es lo que necesitamos para empezar.

Los modelos que usa XNA pueden estar en formato .X o .FBX lo cuales podemos crearlo en algunos programas de diseño, este modelo lo hice en blender.

Ahora que ya han descargado el archivo deben añadirlo al proyecto para esto crearemos una carpeta en Content

Botón derecho en “Content”->Agregar->Nueva Carpeta y la nombraremos Modelos. Le damos clic derecho y le damos Agregar->Elemento existente… y elegimos el archivo tanquecito.fbx que descargamos antes.

Ahora abriremos el archivo Game1.cs y agregaremos una variable de nivel de clase o atributo llamado MiModelo de la Clase Model. La clase modelo pose métodos para poder manipular los modelos 3D que tengamos en nuestro juego. También necesitamos su posición en el espacio. Justo después de

public class Game1 : Microsoft.Xna.Framework.Game
    {
        GraphicsDeviceManager graphics;
        SpriteBatch spriteBatch;
        Model MiModelo;//nuevas lineas de codigo
  Vector3 mPos = new Vector3(0.0f);

Ahora necesitamos decirle donde esta el archivo que debe cargar, para esto vamos la funcion LoaContent y agregamos el siguiente codigo

MiModelo  = Content.Load<Model>("Modelos\\tanquecito");

Necesitamos algunas variables, que como se vio en el Tutorial Sistemas de Coordenadas y cámaras usaremos para mostrar nuestro modelo en pantalla, pondremos una cámara en el espacio, utilizaremos un vector3 para indicar la posición de esta, aunque aún no necesitamos que se mueva. También indicaremos la relación de aspecto que tendrá, para esto incluiremos el siguiente código como variables de clase en Game1 como hemos venido haciendo.

//camara en el espacion
        Vector3 camaraPos = new Vector3(500.0f, 100.0f, 1000.0f);
        //indica la relacion de aspecto
        float relacionAspecto;

Pero para obtener la relación de aspecto necesitaremos incluir  una llamada al dispositivo de gráficos la cual permita indicar la relación. Y para que no se esté ejecutando en cada ciclo, incluiremos está en el método LoadContent() de la siguiente forma

//esto genera un numero decimal equivalente a
            //dividir el ancho de la pantalla
            //entre el largo
           relacionAspecto= graphics.GraphicsDevice.Viewport.AspectRatio;

Ya casi acabamos solo nos falta incluir el método para dibujar nuestro modelo.

En esta ocasión usaremos la clase BasicEffect que contiene los métodos que necesitamos para dibujar un modelo 3D en el escenario.

Es nuestro método Draw()  justo después de los comentarios // TODO: Add your drawing code here. Anexaremos estas líneas de código.   

//toma como origen la estructura 3D que viene por default
            Matrix[] origen = new Matrix[MiModelo.Bones.Count];
            MiModelo.CopyAbsoluteBoneTransformsTo(origen);
            //los objetos 3D en ocasiones como esta estan formados por mallas
            //lo que se indica es que por cada malla que tiene este
            // se dibujara en la pantalla
            foreach (ModelMesh malla in MiModelo.Meshes)
            {
                //indica todos lo efectos basicos que pueden aplicarse a las mallas
                foreach (BasicEffect efecto in malla.Effects)
                {
                    //luz basica
                    efecto.EnableDefaultLighting();
                    //MUY IMPORTANTE
                    //indica que se dibujara ne la pantalla
                    // en esta ocasion sera el objeto tan como esta
                    efecto.World = origen[malla.ParentBone.Index];
                    //crea una vista para la camara
                    //en ella se define la poscion, el objetivo y el vector arriba
                    efecto.View = Matrix.CreateLookAt(camaraPos , Vector3.Zero, Vector3.Up);
                    //indica la proyeccion
                    //esta presente la relacion de aspecto
                    //y los limites cera y lejos para dibujar en la pantalla
                    efecto.Projection = Matrix.CreatePerspectiveFieldOfView(MathHelper.ToRadians(90.0f),
                        relacionAspecto, 100.0f, 10000.0f);
                }
                //Dibuja la malla en la pantalla
                malla.Draw();
            }

Pues eso es todo amigos. En el siguiente tutorial, indicare la forma de darle unas cuantas animaciones básicas a nuestro modelo en 3D.

Pueden checar el video en YouTube o descargar el archivo de proyecto que les anexo. No se olviden de comentar y de suscribirse si les gusto este tutorial. Nos vemos

Descarga el Proyecto pass: xna

Tutorial Sistemas de Coordenadas y cámaras en XNA

Hola bueno siguiendo con la introducción a la lógica de los juegos 3D necesitamos saber más de estos. En este post veremos el sistema de coordenadas que usa XNA y la importancia de las cámaras.

Antes de imaginarnos las coordenadas en 3D imaginemos en 2D, que tenemos, pues X y Y, donde podemos ubicar un punto en el espacio digamos en (0,0) o en (10,5) o en (-5,-3) etc. Pues bien ahora que tenemos ese concepto necesitamos saber que para manejar 3D necesitamos una coordenada más la cual es Z  la cual punta hacia nosotros en un esquema se verían así

XNA

XNA

Donde tenemos objetos tridimensionales y Z aumenta hacia nosotros y disminuye cuando se aleja.

Vectores

Para manejar posiciones en XNA usamos vectores, y si usaremos mucho las matemáticas y algo de física aquí, así que si has tomado clases de Calculo Vectorial o aun que sea has visto vectores te va servir mucho. Tendremos vectores de posición de velocidad, de aceleración, etc. Pero no se desanimen solo será lo más básico, como suma de vectores. Para usar vectores en XNA tendremos que usar la Clase Vector3, (si ya llevaste un curso de XNA en 2D veras que también hay Vector2).

El constructor de esta clase recibe, en el caso más común, tres parámetros 3 Flotantes que representan X, Y e Z respectivamente.

Cámara

La cámara es un objeto de vital importancia en el mundo 3D ya que con ella se muestra al usuario un vista 2D del mundo 3D, pero que significa esto. Significa que con la cámara “tomamos” un video del mundo el cual se representa en la pantalla de 2D .

XNA nos provee un método para poder visualizar en nuestra PC o Xbox lo que está capturando una cámara en un momento. El método se llama CreateLookAt que es un miembro estático de la clase Matrix (hablaremos más tarde de esta clase), los parámetros que recibe son: la posición de la cámara, el objetivo de la cámara, y la posición a la cual se requiere como arriba. Para estos tres parámetros utiliza Vectores, por ejemplo se puede enviar siempre el Vector3.Up (que representa un vector que siempre apunta al cielo) para decirle a la cámara donde es arriba.

Además contamos con un método estático para poder lograr perspectivas.

CreatePerspectiveFieldOfView este método recibe como parámetros: campo de visión, relación de aspecto, tope cercano y tope lejano.

camara XNA

camara XNA

Como indica la imagen la cámara necesita capturar los objetos en el mundo. Los topes cercano y lejano sirven para indicar que objetos si van a ser dibujados en la pantalla y cuáles no. Por ejemplo si pusiéramos como valores para tope cercano 100 y lejano 1000 solo los objetos que estén a esta distancia podrán ser mostrados, y si tenemos un objeto a una distancia de 1200 no será mostrado en la pantalla.

Bien ya ha sido mucha teoría para el siguiente post dibujaremos nuestro primer modelo en 3D.

Saludos y no se olviden de comentar.

Seguir

Get every new post delivered to your Inbox.