Mi relación intima, personal y secreta con DirectX.
- Capitulo I de la serie "Diario de un sufrido programador de DirectX" -


Autor  

 Lord Trancos

Ámbito  

 Opinión / Iniciación a DirectX

Lenguaje de Programación  

 Ninguno (no contiene código)

Fecha  

 2000/12/13

Índice

    I - Como comenzo todo.
    II - Un vistazo a la evolución de la arquitectura de DirectX.
    III - Mis inquietudes actuales y mi modelo actual de DirectX.



I - Como comenzo todo.

Desde que comenze a programar hace mas tiempo del que me gusta recordar (Basic en MSX), siempre he tenido como meta hacer un videojuego, y siempre me he acercado lo suficiente a cumplir ese sueño como para sentir un; "esta vez por fin lo lograre!". Sin embargo, aqui sigo. Con la firme convicción de que "esta vez por fin lo lograre!", sin haberlo logrado todavia.

Mi relación con DirectX comenzo en el caluroso verano de 1998. Debido a la más que evidente extinción de MS-DOS me vi obligado a migrar de sistema operativo y de entorno de programación (Borland Pascal). Debido a la gran expansión de Windows, me decidi por probar con este "S.O", usando como herramienta de desarrollo el Delphi 2.0.

De este modo, conforme iba aprendiendo Delphi con los tipicos programitas que se suelen hacer, comenze a programar DirectX. Aunque siendo un perfecto novato en la programación bajo Win32, y en el modelo de programación orientada a objetos; al final me las apañe (no se todavia como), para hacer un programa que cargaba modelos 3D (de 1 solo material, sin texturas y sin z-buffer) y permitia rotarlos y moverlos por la pantalla. Desafortunadamente, la existencia de un maldito Bug que jamas logre encontrar y otras circunstancias me obligaron a retrasar mi proyecto de hacer un videojuego con DX.

Comenze con DirectX 3 para acabar haciendo el comentado programa bajo DirectX 5. Aproximadamente, dos años despues, es decir en este año 2000 que acaba, y despues de haber mejorado considerablemente mis conocimientos en Delphi y de programación orientada a objetos (aunque todavia suelo trabajar de forma mas cercana al modelo tradicional, que al de objetos) volvi a proponerme la incursión en la programación de DirectX, esta vez en su versión 6.

El trabajo con la versión 6, solo resulto un ensayo/precalentamiento y no llego muy lejos ya que al mes, mas o menos, volvi a empezar pero con DirectX 7. Esta vez, las cosas fueron mucho mejor; consegui hacer mis pinitos con DirectDraw, DirectInput, DirectMusic, DirectSound (con sonido 3D y todo), y con Direct3D (esta vez consegui z-buffer, texturas, filtro bilineal, efectos de transparencias,.... es decir, un motor 3D simple pero "decente" y que cumplia todas las necesidades del proyecto que todavia tengo en mente).

Recientemente me he iniciado en DirectX 8, el cual a mi modo de ver, presenta mejoras muy interesantes en los aspectos de música y sonido, pero que cuenta con importantes escollos en la parte grafica, ya que se ha eliminado el DirectDraw (aunque todavia se puede usar el interfaz del DirectX7) y la mayoria de las mejoras en 3D requieren de hardware de última generación (id diciendole adios a vuestras "desfasadas" voodoo 2, y tarjetas de la misma generación...), y por si fuera poco la emulación por software supone una lentitud extrema, hasta el punto de inservible en muchos de los casos. Eso si, las nuevas "pijaditas" 3D tienen un aspecto prometedor.

 



II - Un vistazo a la evolución de la arquitectura de DirectX.

Sin pretender ser muy riguroso, desde hace tiempo DirectX venia estando formado por los siguientes elementos;

DirectDraw - Se encargaba de todo lo relacionado con graficos en 2D, y era necesario para la utilización de Direct3D.

Direct3D - Se encargaba de mediar con el hardware 3D (si existia) o de proporcionar una emulación por software; era la base del motor 3D. Este módulo contaba con dos variantes; Retained mode (modo facilón) e Inmediate mode (modo chungo pero con mayor nivel de control y por lo tanto mas profesional), encontradonse en la actualidad el RM practicamente muerto (al igual que DirectDraw).

DirectInput - Todo lo relacionado con la entrada de datos por parte del usuario; es decir, teclado, ratón, joystick, gamepad,....

DirectPlay - Se encargaba de todo lo relacionado con las comunicaciones entre aplicaciones a traves de redes; es decir, se encargaba de la parte de comunicaciones de los juegos en red.

DirectSound - Se encargaba de todo lo relacionado con el sonido.

DirectMusic - Este modulo, surgio en las hasta ahora últimas versiones de DirectX. Su mision era proporcionar una de las mayores carencias hasta el momento de DirectX; un modulo para la música. En contreto; para música MIDI y otro tipo de archivos de Microsoft que vienen a ser una especie de MODs (son como un MIDI en cuanto que la música se almacena en unas partituras pero en lugar de usar sonidos sintetizados se usan sonidos grabados).

DirectShow - Hasta ahora este módulo no formaba parte de las DirectX, pero ya existia anteriormente a DirectX 8. Este modulo presenta las posibilidades multimedia que podemos encontrar en el Media Player de Microsoft; es decir, la reproducción de numerosos formatos de video y de audio (incluido el MP3!!). Además de soporte para archivos MIDI y algunos tipos de imagenes.

Actualemente (DirectX 8) las cosas estan asi;

DirectX Graphics - Union de Direct3D y DirectDraw (mas bien, extinción de DirectDraw y nueva versión de Direct3D). Se encarga de todos los aspectos graficos (excepto la reproducción de video, que todavia corresponde a DirectShow). Y trabaja siempre en 3D, por lo que aunque quisieramos hacer un juego en 2D deberiamos de usar una arquitectura 3D (si bien, todavia se puede usar el interfaz DirectDraw del DirectX 7 y versiones anteriores.)

DirectX Audio - Union de DirectSound y DirectMusic, si bien el uso de DirectSound deja de ser interesante en la mayoria de los casos, resultando DirectMusic como el módulo mas interesante para todo lo relacionado con los sonidos; y no solo eso, sino que también resulta interesante el prescindir de DirectMusic para la parte de la música, siendo mas jugoso el uso de DirectShow para esos menesteres. Es resumen;

DirectMusic más interesante que DirectSound para la parte de sonidos.

DirectShow más interesante que DirectMusic para la parte de música.

DirectInput - Sigue ahi. :-) con algunas "mejoras".

DirectPlay - con la introducción del "voice chat" (chat de voz), y una nueva reorganización mas racional de los interfaces.

DirectShow - Con mejoras y su incorporación como un módulo mas de DirectX (antes se distribuia de forma separada.).

 



III - Mis inquietudes actuales y mi modelo actual de DirectX.

Actualmente, trabajo en uno de los videojuegos menos ambiciosos que me he planteado, y por lo tanto creo que por fin podre decir que he terminado un videojuego, si bien se trata mas de un ensayo que de un videojuego.

En realidad el proyecto nacio de una doble intención;

I - Probar a usar la nueva version de DirectMusic (DX8) para todo lo relacionado con los sonidos (en lugar de usar DirectSound) y de usar DirectShow (DX8) para todo lo relacionado con la música.

Lo primero se debe a que DirectMusic, a diferencia de DirecSound, dispone de un interfaz (IDirectMusicLoader) que permite cargar archivos de sonido (WAVs comprimidos o sin comprimir) de forma muy sencilla. Mientras que con DirectSound, el cargar los archivos de sonido era trabajo del programador; por lo que el cargar archivos WAV descomprimidos (PCM) resultaba mas o menos sencillo, pero para usar WAVs comprimidos se solia usar el ACM (Audio Compression Manager), complicando la cosa de forma innecesaria (especialmente ahora que la nueva versión de DirectMusic se encarga de usar el ACM por nosotros).

Y lo segundo se debe a que DirectShow puede reproducir música en numerosos formatos de audio (como por ejemplo MP3), mientras que DirectMusic solo soporta WAV, MIDI y los "MODs" de Microsoft. Si bien, al final el juego en proyecto usara música MIDI con fin de reducir considerablemente su tamaño y facilitar su distribución (aunque internamente esta preparado para MP3 y todos los formatos de audio soportados por DirectShow).

II - Probar la posibilidad de usar DX7 para la parte de graficos y DX8 para el resto.

Quedando el módelo de DirectX que uso para dicho proyecto del siguiente modo:

DirectDraw (DX7) - para todo el tema grafico puesto que no se trata de un juego 3D.

DirectInput (DX8) - para la lectura del teclado y en un futuro puede que del gamepad.

DirectMusic (DX8) - para cargar y reproducir WAVs comprimidos. Es decir, para el sonido.

DirectShow (DX8) - para reproducir la música del juego.


 

 
Hosted by www.Geocities.ws

1