Ayer por la noche recibí la confirmación de Gusi de que podía utilizar Managed DirectX en el trabajo a entregar para el cursillo de shaders. Así que claro, más contento que unas pascuas, ya que ahora podría usar mi motor SDE en el que ya tengo implementadas un montón de cosas. Incluso tenía soporte para shaders (algo básico) aún cuando no sabía programar shaders en aquél entonces.

De hecho ahora, sin casi acordarme de nada, me ha resultado muy sencillo de utilizar, así que creo que hice las cosas bastante bien. Ayer monté una escena básica y hoy añadí el cargador de terrenos que me tuve que currar por mi cuenta, porque en C# las cosas son un poco distintas.

Aunque la mayor parte del tiempo la culpa fue de no encontrar tutoriales ni documentación, porque ahora parece que todo cristo se ha pasado a XNA. Sin embargo, en cuanto encontré lo que necesitaba, lo terminé en un suspiro. De hecho ahora cargo el mapa de alturas usando las clases de C# en lugar de cargar una textura de DirectX, así que puedo cargar los tipos de imágen más comunes, y no solo png como hicimos en el cursillo.

Lo que tengo por ahora es una escena sencilla con muchas cosas a mejorar. Solo tengo dos objetos que usan shader (el mínimo de la práctica es 3). Uso un shader de ruido para el agua y otro de post proceso para hacer algo de bloom, aunque es un shader algo cutre, y no se nota mucho.

También tengo algo de aliasing entre el terreno y el plano del océano, aunque solo se aprecia al ampliar la imágen (haced clic en ella para verlo en detalle). Creo que tiene que ver con que el plano lejano de la cámara está demasiado lejos, así que el cálculo de profundidad las pasa canutas. Le he dado vueltas ahora mismo a una solución que puede funcionar, aunque prefiero guardármela hasta ver si funciona.

No está quedando mal, aunque es lo menos que se podía esperar teniendo en cuenta que lo tenía hecho. También he corregido los “tembleques” que tenía la cámara y ahora va más suave (aunque no me termino de creer que se haya resuelto del todo el problema).