xna

XNA – tutorial 1 – upside down camera

Introducción

La idea es hacer un juego de aviones tipo raptor (si, aquel que jugabamos en D.O.S.) pero realizado en 3D.

A diferencia de mis otros tutoriales, estos van a ser mucho mas complejos y apuntan a programadores con conocimientos avanzados de orientación a objetos y análisis matemático. Esta vez tengo novia, trabajo y vivo solo por lo tanto el tiempo escasea y no da para detenerme en tantas explicaciones. Lo siento…

Camara “Upside Down”

Como dije, la idea es un juego en 3d que se ve de arriba. A diferencia de los juegos en dos dimensiones, para dibujar modelos y objetos con volumen necesitamos una cámara virtual. La idea es mas o menos esta:

public static class Camera
{
    public static Matrix World { get; private set; }
    public static Matrix View { get; private set; }
    public static Matrix Projection { get; private set; }

    public static Vector3 Position { get; set; }

    // needed attributes
    private static float nearClip = 1.0f;
    private static float farClip = 1000.0f;
    private static float fov = MathHelper.PiOver4;

    private static float ratio = 800 / 600; // default aspect ratio
    public static float Ratio
    {
        get { return ratio; }
        set { ratio = value; }
    }

    // helper utils
    private static Matrix rotationMatrix = Matrix.CreateRotationX(MathHelper.ToRadians(90));

    public static void Update()
    {
        UpdateMatrices();
    }

    private static void UpdateMatrices()
    {
        Vector3 transformedReference = Vector3.Transform(Vector3.Forward, rotationMatrix);

        View = Matrix.CreateLookAt(Position + transformedReference, Vector3.Zero, Vector3.Up);
        Projection = Matrix.CreatePerspectiveFieldOfView(fov, ratio, nearClip, farClip);
        World = Matrix.Identity;
    }
}

El método UpdateMatrices es el mas importante. No tiene nada que no se haya visto anteriormente. Se genera una transformación en un vector y se gira 90 grados para poder ver el modelo desde arriba.

alert Nota: en el ejemplo deje algo de lógica para que vean la cámara en acción.

Ahora dejo como descarga el proyecto de prueba.

download

descargar ejemplo


Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s