BCB Components rotating around DirectX

Welcome to BCB-Tools.com Latest News

Development Tools Demo Applications Step-By-Step Tutorials Component Reference

Register Here Available Downloads

Frequently Asked Questions Discussion Forums Receive emails from BCB-Tools.com Send us some Feedback

Links to other sites Information about the BCB-Tools.com website


    TUTORIAL - SOBRE DIRECT X
    Go to the Welcome Page
        ABOUT DIRECTX

    Read some step-by-step TDx_Library Tutorials...

    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:-












Top

Welcome |  Latest News |  Tools |  Demos |  Tutorials |  Reference |  Register |  Downloads
FAQ |  Forums |  Feedback |  Mailing List |  Links |  Site Information

This page is Copyright © 2000-2007 Darren John Dwyer, Australia. All Rights Reserved.
Borland C++ Builder, CBuilder, etc are Trademarks of Borland Corporation.
DirectX, DirectDraw, Windows, etc are Trademarks of Microsoft Corporation.