Autor: Darren John Dwyer (++Israel Luengo Garcia)
Translated by: Israel Luengo
Garcia
Recomendamos una resolución de 1024 x 768 para visualizar
este artículo.
INTRODUCCION A DIRECTX
Top
Next
DirectX es un juego de drivers de dispositivos a bajo-nivel para
Windows 95,98,ME,CE,2000,XP.Lo
que es mas importante, DirectX es también un Software Development
Kit (SDK) a bajo nivel para Sistemas Operativos Windows.
o lo que es lo mismo, un Kit de Desarrollo de Software, con funciones
que nos permiten programar todo lo relacionado con el tema multimedia.
En circustancias normales, cuando instalas Windows, o cuando instalas
un programa que necesite DirectX,
la instalación automática procede a los DirectX
device drivers necesarios para el uso del programa (estos device
drivers son conocidos como "runtime" de Dx).
...
DirectX es el motor que provee toda la funcionalidad de Windows,
y el SDK permite a los programadores
escribir aplicaciones para aprovechar todas las capacidades multimedia
del hardware actual. usado por el sistema operativo windows
como por ejemplo, efectos de sonido, musica, gráficos en
2 Dimensiones acelerados, capacidades de Bit-Blitting ,
dispositivos de entrada avanzados como pueden ser, los joysticks
force-feedback o los volantes de conducción, jugabilidad
en Red avanzada para multiples jugadores,
gráficos en 3D acelerados por hardware, y algunas cosas
mas...
...
Un driver de dispositivo a nivel de Hardware, DirectX "se
las entiende" con los diversos dispositivos instalados en
el equipo, e informa
de las funcionalidades de que disponen al sistema DirectX el cual
es parte del Sistema Operativo Windows, dado esto, cuando programemos
en DirectX
utilizaremos dichas capacidades disponibles del hardware, para
proveer de capacidades avanzadas a nuestros programas.
En la terminología de DirectX , esto es conocido como HAL
(Hardware Abstraction Layer), haciendo que programar dichos dispositivos
sea "similar" para los programadores, mediante los diferentes
niveles de características hardware.
Desde el punto de vista de la programación, si un dispositivo
no "soporta" una funcion dada, DirectX intentará
emular dicha funcion de Hardware, mediante drivers de dispositivo
por software, es un poco mas lento, pero útil para los
programadores
que no desean programar para todos los dispositivos hardware existentes
en el mercado.
En la terminología de DirectX , esta capa es conocida como
HEL (Hardware Emulation Layer), y básicamente si una funcion
específica
no está disponible en el hardware, DirectX intentará
emularla por software en nuestro programa para que funcione igualmente.
...
DirectX ha sido puesto en escena en diferentes "paquetes",
conforme Microsoft ha ido actualizándolo a lo largo de
los años
las dos "variantes" mas populares son DirectX 7 (la
mejor version) y DirectX 9.0c, que es la última version.
DirectX 7 es relativamente fácil de aprender, y es muy
util para cualquier programador que quiera tener soporte DirectX
en sus aplicaciones windows, mientras que DirectX 9.0c está
mas "orientado" a programadores avanzados en 3 Dimensiones
(3D).
...
Con el propósito de explicar en que consiste el DirectX
SDK, nos centraremos en el DirectX 7 SDK (el mas fácil
de aprender)...
El DirectX SDK es un completo paquete de software, dividido en
5 secciones principales, para su fácil comprensión:-
- DirectDraw
- programacion avanzada de animación y gráficos
en 2D (2 Dimensiones)
- DirectSound
- programación avanzada de musica y efectos de sonido
- DirectInput
- programacion avanzada de dispositivos de entrada
- DirectPlay
- programación avanzada de capacidades multijugador en
Red
- Direct3D
- programación avanzada de gráficos y animación
en 3D (3 Dimensiones)
...
La programación avanzada en DirectX no es algo sencillo de
aprender, debido a esto, existe la TDx_Library,
para facilitar esta tarea mediante Borland C++ Builder.
DIRECTDRAW - ANIMACION
Y GRAFICOS EN 2D
Top
Next
Prev
DirectDraw es muy divertido de utilizar.
Basicamente, si quieres animar cualquier cosa en pantalla, que no
requiera gráficos en 3D,
utilizaremos DirectDraw.
Si quieres tener miles de imagenes animadas en todas las pantallas
disponibles, todo a un tiempo, con varios
efectos de color, varios efectos de Bit-Blitting, rampas Gamma,
etc. seguramente utilizarás DirectDraw.
...
Partes básicas en DirectDraw son los DirectDrawDevices, y
las DirectDrawSurfaces (dispositivos y superficies de dibujado).
Mediante el uso de DirectDraw, puedes crear un interface para cada
dispositivo gráfico disponible en el que vamos a programar,
entonces, crearemos las diferentes Surfaces (Superficies) que seran
mostradas en pantalla para el usuario.
Necesitas mostrar una imagen?, solo le tienes que "decir"
a DirectDraw que haga un Bit-Blit o un Page-Flip, y estarás
programando gráficos en 2D.
Es muy sencillo.
...
Durante el bit-blitting de una imagen, puedes aplicar diferentes
efectos que afecten a esa imagen, permitiendo muchos
efectos gráficos complejos, de una manera sencilla y sin
tener que programar miles y miles de lineas de código.
Tomemos un ejemplo, supongamos que quieres mostrar una imagen (sprite)
que se desplaza de arriba a abajo , solo le diremos a DirectX que
dibuje de arriba a abajo durante el mismo tiempo que DirectX dibuja
la imagen, lo cual, permite un dibujado muy veloz en nuestro programa
y libre de parpadeos.
Si hay soporte por hardware, para el dibujado de este sprite, DirectX
utilizará las capacidades de Bit-Blitting por hardware,
en caso contrario (no existe aceleracion por hardware) DirectX lo
dibujará igualmente, pero utilizando funciones por software.
De manera similar, si por ejemplo tenemos un Sprite cuyo fondo queremos
que sea "transparente", tambien es muy fácil de
hacer.
...
La "Magia" de DirectDraw es que es capaz de mostrar miles
y miles de imágenes en pantalla en tiempo real, en todos
los monitores, a un mismo tiempo.
Cuando empieces a experimentar con DirectDraw, podrás ver
lo potente que es y los increibles efectos que se pueden obtener....
...
Aqui hay algunas cosas que puedes hacer con DirectDraw ...
Por ejemplo, DirectDraw escanear el dispositivo de pantalla y detectar
los modos de video que es capaz de visualizar...
para usarlo, solo tienes que seleccionar el modo que quieras, siendo
640x480x8 hasta 1024x768x32 o incluso mas...
Tambien, DirectDraw hacer streamind de datos de video a través
de los Video Ports, como por ejemplo las USB camaras, lo malo es
que Microsoft
se olvidó de explicar como utilizar esta funcionalidad...
el DirectX 7 SDK viene con soporte completo en el SDK para los DirectDrawVideoPorts
pero no viene con ningún tipo de código fuente explicando
como usarlo...
A lo largo del tiempo, cuando dispongamos de este hardware, intentaré
programar algo relacionado con streaming de video, para tener algo
con lo que empezar...
...
DIRECTSOUND - EFECTOS
DE SONIDO / MUSICA
Top Next
Prev
DirectSound es la parte mas sencilla de DirectX .
Cubre la parte de reproduccion de todo tipo de efectos de sonido,
musica, grabación de sonido, Sonidos posicionados en 3d
, etc.
...
Basicamente, tenemos dispositivos de sonido (las tarjetas de sonido),
y los buffers de sonido (donde almacenaremos los datos).
Cuando creas un interface para un dispositivo de sonido concreto,
y creas un Buffer de sonido que almacenará los datos del
sonido en si,
cuando queramos escuchar dicho sonido por la tarjeta seleccionada,
Solo le diremos a DirectSound que reproduzca el efecto de sonido.
Todo el trabajo de "Mezclado" de canales está
solucionado en DirectSound.
Solo tenemos que decir, "Reproduce este sonido", "Reproduce este
otro ", "Reproduce aquel otro", y DirectSound los mezclará
en tiempo real,
de manera que podremos escuchar varios efectos de sonido simultáneamente.
Todo lo que tienes que hacer es crear el dispositivo de sonido
que vamos a utilizar, ajustarlo para reproducción y llamar
a la función que reproduce el sonido.
Tan sencillo como eso.
...
La reproducción de Música ya es mas complicado,
debido a que requiere mas programacion, como por ejemplo las notificaciones
del DirectSoundBuffer
o hacer el stream de un dispositivo de entrada mediante un buffer,
como por ejemplo un archivo, o desde un micrófono.
Pero es posible hacerlo, y ademas ya lo tienes demostrado en los
ejemplos de la TDx_Sound_Library.
...
El "Encanto" de DirectSound es que nos permite reproducir
multiples efectos de sonido en tiempo real, y simultáneamente,
en todos los dispositivos de sonido, todo al mismo tiempo.
Cuando tengas experiencia programando en DirectSound, verás
que el efecto es increíble, para dotar nuestros programas
de efectos de sonido.
Por
ejemplo: Imagínate un juego de naves espaciales ...en el
cual...suena el zumbido del motor de la nave, los disparos, las
explosiones etc...
DirectSound se utiliza
también para grabar sonidos de los dispositivos de entrada,
como los microfonos, cascos, auriculares etc,
... es posible grabar con mucha calidad practicamente en cualquier
frecuencia (y tener la misma para la reproducción) y tambien
, gracias a las funciones de streaming incluidas en la TDx_Sound_Library,
puedes grabar fácilmente sonidos, unicamente limitado por
la capacidad de disco duro que tengas... por ejemplo, puedes grabar
un CD entero como un .wav si tienes suficiente espacio libre de
disco duro ...
...
Finalmente, ya que no lo último, DirectSound tambien dispone
de funcionalidades para reproducir sonido posicional en 3 dimensiones
(sonido3D) pero por el momento, no disponemos de ejemplos de como
programarlo, pero básicamente,...lo que permite es que
los sonidos "suenen" con respecto a un "oyente"
(el jugador) posicionados en un espacio tridimensional, por ejemplo
si una avioneta, pasase volando por el lado derecho del espectador/jugador
de nuestra aplicación, el sonido se escucharia viniendo
desde detrás del oyente...pasando por la derecha...y alejandose
...toda la programación relativa a sonido 3D, tiene diferentes
conceptos como por ejemplo, Listener (oyente), Bufferes, Cono
de Sonido...y está basado en el mismo sistema de coordenadas
"left-handled" que el Direct3D ....etc...que intentaremos
explicar mas adelante...
DIRECTINPUT - ADVANCED
INPUT DEVICES
Top Next
Prev
DirectInput es un tema interesante.
...
Utilizando DirectInput, puedes "entenderte" con dispositivos
avanzados de entrada, como por ejemplo un ratón de 5-botones,
O un volante con pedales, o un controlador de vuelo, o un joystick
con force-feedback, practicamente cualquier dispositivo que imagines.
Puedes controlar que botones han sido pulsados / soltados ; para
los dispositivos force-feedback puedes asignar varios tipos de
efectos force-feedback a algun eje del joystick, o en respuesta
a la pulsacion de algun boton...o cuando se produzca alguna "situación"
en el programa.
Tambien tienes acceso directo a los dispositivos standard, como
el ratón y el teclado,
con un par de modos de acceso, un modo polling
donde periódicamente puedes comprobar el status de los
botones, teclas etc...mediante un intervalo definido por un componente
Timer
y un modo event-driven , en tu aplicación, que es llamado
cada vez que se produce algun cambio en el dispositivo
...
Al utilizar DirectInput, te evitas el acceso mediante el sistema
operativo Windows y accedes a los dispositivos directamente.
esto te permite cosas como por ejemplo comprobar la pulsación
de varias teclas a un tiempo, en vez de una sola tecla a un tiempo.
O que botones del ratón han sido "presionados",
la posicion del cursor,....
O el manejo de botones y movimientos de palanca del Joystick,
todo a tu servicio.
...
La "Magia" de DirectInputes que puedes programar todo
tipo de dispositivos de entrada, de forma que puedas programar
los diferentes botones de un dispositivo,
O
puedes programas efectos de respuesta (force-feedback) como "vibraciones
o movimientos' del joystick en una dirección concreta,
y todo puedes hacerlo al momento.
DIRECTPLAY - JUGABILIDAD
EN RED / MULTIJUGADORES
Top Next
Prev
Al igual que DirectPlay,
parece complicado en un principio, pero ya verás.....
...
DirectPlay te permite añadir soporte multijugador a tus aplicaciones,
manteniendo todo el proceso de "protocolos de red" de
forma transparente, sin que tengas que preocuparte de ello.
Por ejemplo, puedes configurar una "Connexion" en una LAN (Red de
Area Local) o a traves de Internet, o por un cable Directo de PC
a PC,
entonces, controlas el paso de "mensajes" entre los diferentes
"Jugadores"", individualmente, o todo de una vez si esta configurado
para "Groups (Grupos)".
Es tan fácil como poner, SendMessage(Player1,"This is a message")
or SendMessage(Group1,"To all players")...
No tienes que preocuparte de si los paquetes llegan a su destino,
no tienes que andar reensamblando los paquetes ni nada parecido,
tampoco tienes que preocuparte por asignar "puertos" de
comunicación...
DirectPlay hace el trabajo de red fácil.
Desafortunadamente, como la mayoria de las cosas de DirectX, ello
es relativamente complicado...pero.....
...
La TDx_Play_Library lo simplifica todo...
...
La "Magia" de DirectPlay es que no tienes que preocuparte
de nada relacionado con los protocolos de Red / ajustes manuales
etc..
Con DirectPlay, solamente, configuras las conexiones de red, ajustas
los players y grupos, y empiezas a enviar y recibir mensajes...
...
DirectPlay tambien viene con la "bestia mítica"
que es el DirectPlayLobby.
Esta cosa, el DirectPlayLobby, se utiliza para crear servers para
multiplayer hosting solutions, eso parece.
Puede hacer cosas como determinar que aplicaciones compatibles con
DirectPlay están instaladas en el pc, automáticamente
lanzar dichas aplicaciones, y mas cosas...
Desafortunadamente, el DirectX 7 SDK does no viene con muchos ejemplos
de como programar los DirectPlayLobby's...
Así que estamos intentando "descifrarlo" ....lo
explicaremos cuando lo sepamos.....
DIRECT3D - ANIMACIÓN
/ GRAFICOS 3D
Top Next
Prev
Direct3D es la mayor "bestia"
que hay.....
En Bcb-tools, estamos trabajando para adaptar esta parte. DirectX
7's Direct3D... el Direct3D que viene con
DirectX 9.0c es mucho mas poderoso, y conviene usarlo.
Mientras, que a lo largo de este tiempo la TDx_3DI_Library cubre
el Direct3D Immediate Mode, el cual es "enorme"...,
y necesitarás cierto "nivel" de conocimientos
para la programación gráfica en 3D para poder utilizarlo.
He aqui un problema, yo soy un desarrollador de componentes, y
no tengo "conocimientos" suficientes para la mayoria
de las cosas relacionadas con el Direct3D.
Dadme unos pocos años, y creo que seré un experto
en Direct3D .
Conforme vaya aprendiendo, Añadiremos mas secciones a nuestra
parte relacionada con las 3D..
SOBRE LA PROGRAMACION
EN DIRECTX
Top Next
Prev
Normalmente, la programación en DirectX es un trabajo muy
duro.
Es un tema complejo,y requiere que seas un programador experimentado
en Win32, y en principio es solo para Visual C++.
Borland C++ Builder no tiene soporte "real" para DirectX,
debido a esto, es "tecnicamente" imposible de desarrollar
aplicaciones DirectX. Cuesta muchísimo trabajo, ya que
el DirectX SDK em si mismo, no compila con el BCB.
y ese es el porque hemos desarrollado la TDx_Library,
Para que el Borland C++ Builder y su comunidad de usuarios y desarrolladores
tengan un RAD interface para DirectX, decente,
sin tener que "sacrificar" nada de las funcionalidades
avanzadas de DirectX.
Para comprender la "dificultad" de programar aplicaciones
DirectX, debes entender primero
algunas de las cosas "complejas" sobre las que funciona
la programacion DirectX , como los COM interfaces, Win32 Event
Queues,
Callbacks, y otro tipo de cosas.
Tambien, para hacer funcionar DirectX 7 trabajando en Borland
C++ Builder, necesitas conocer lo que es el multi-threading (programacion
muti-hilos),
para que puedas integrarlo en la Borland C++ Builder Visual Component
Library, etc.
...
La TDx_Library se diseñó para permitir programar
facilmente, aplicaciones DirectX applications utilizando los beneficios
del Rapid Application
Development en Borland C++ Builder, manteniendo todo el duro trabajo
de la programación DirectX funcionando en
Borland C++ Builder de modo transparente para el usuario-final
de la TDx_Library (o sea, los programadores).
Por ejemplo, la TDx_Library es multi-threaded, monitoriza automáticamente
el Win32 event queue por ti,
Traduciendo las notificaciones de eventos de DirectX a sus equivalentes
en Borland C++ Builder OnNotification() Events, mucho
mas simple que tener que programar el multi-threading por ti mismo
en tu aplicación, con todos los problemas inherentes
de bloqueo y depurado que ello conlleva.
Otro ejemplo, es que la TDx_Library maneja automáticamente
las funciones callback de DirectX , algo que puede convertirse
en una pesadilla
si intentamos llevarlo a cabo en Borland C++ Builder, de nuevo,
nos hemos hecho cargo de este "duro trabajo" traduciendolo
a sencillos eventos del tipo BCB OnCallback() .
...
Para terminar, Microsoft utiliza en su SDK's una convención
de notación conocida como "notación hungara",
la cual produce nombres "confusos" y poco amigables
como LPDIRECTSOUNDBUFFER lpdsBuf4; cuando en Borland C++ Builder,
es
mucho mas amigable ver ....TDx_SoundBuffer* SoundBuffer4;
...
SOBRE COMO PROGRAMAR
CON LA TDX_LIBRARY
Top
Next Prev
En comparación con la programación DirectX normal,
, programar DirectX
usando la TDx_Library es muy sencillo...
Recuerda que es, RAD DirectX... _Rapid_ Application Development...
Asi de facil...
...
Para lo que necesites, tienes todo al alcance de tus dedos. Pulsas
F1 en cualquier lugar, una simple pulsación de tecla, y
aparece la ayuda relevante , detallada, Traducida al Inglés,
todo personalizado en Borland C++ Builder como su SDK standard
para la Visual Component Library.
...
Detrás de todo eso, todo el trabajo "duro", como
todo lo relacionado con la creación y destrucción
de interfaces y comprobación de errores está hecho
ya, y funciona de forma transparente para ti... olvidate de tener
que preocuparte de esas cosas, solo tienes que utilizar la TDx_Library
como otra parte integrada mas de Borland C++ Builder...
No Callbacks, no Win32 event queue management, no multithreading
synchronization entre DirectX y el Borland
C++ Builder VCL... todo está hecho para ti, automágicamente
;).
...
Todo lo que tienes que hacer, es teclear 1 solo linea de código
para crear cualquier interface de DirectX COM standard,
y 'voila', DirectX está listo para funcionar.
...
Luego, añade los beneficios de Borland C++ Builder Rapid
Application Development environment,
como por ejemplo el Object Inspector y los Eventos y asi todo...
Tambien, debido a que puedes mezclar/encajar la TDx_Library con
los controles standard de Borland C++ Builder VCL component library,
todo resulta facil de hacer...
...
Normalmente, cuando usamos la TDx_Library, en una hora puedes
tener un prototipo de tu aplicación funcionando.
Con lo cual, en unos cuantos días. tienes el Framework
de la aplicación funcionando
Es el momento de "sacarle brillo" a ciertas cosas y
lanzar la aplicación.
En general, no hay nada como el Rapid Application Development,
y tampoco hay nada como la TDx_Library - Rapid Application Development
DirectX.
...
Es algo increible, pero el RAD DirectX funciona.
Comparado con la programación tradicional de DirectX ,
La TDx_Library te ahorra un 80% del tiempo, y el 90% del esfuerzo
requerido
en la programación de software compatible con DirectX.
MAS INFORMACION
Top Prev
Para obtener mas información pulsa uno de estos enlaces:-
|