programador profesional de juegos programación de gráficos i unidad 1 introducción instructor:...

23
Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner [email protected]

Upload: raquel-miguelez-benitez

Post on 02-Feb-2016

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Programador Profesional de Juegos

Programación de Gráficos IUnidad 1

Introducción

Instructor:Daniel Brenner

[email protected]

Page 2: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Introducción

DirectX está compuesto por diversos componentes, los cuales en su conjunto ayudan al programador en las tareas de bajo nivel de la creación de juegos y aplicaciones multimedia.

El API de Microsoft fue creciendo y madurando desde su primer distribución popular (DirectX 3.0). Hoy la versión mas reciente en el mercado es la 9.0b y su grado de avance y desarrollo permite la creación de juegos de nivel internacional haciendo un uso muy eficiente de la plataforma.

Page 3: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Un poco de historia

DOS

• Sistema operativo mas popular

• Programadores acceden directamente al hardware

• Rendimientos muy altos

• No era un sistema operativo multitarea

• Las aplicaciones no debían convivir ni interactuar con ningún otro componente mas allá del creado por el programador

Page 4: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Un poco de historia

Windows 3.1

• Los programadores de juegos se mostraron escépticos de poder programar sus juegos debido a que interactuar con su componete de gráficos (GDI) era extremadamente lento.

• Por este motivo los juegos continuaban saliendo para DOS mientras que Windows 3.1 se reservaba, principalmente, a la utilización de aplicaciones de oficina.

Page 5: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Un poco de historia

Sin embargo, el acceder directamente al hardware tenía su lado negativo y es que su programación estaba muy ligada a él y a medida que el mercado de la PC crecía y la cantidad de hardware disponible se diversificada, soportar todas las configuraciones posibles se volvió una pesadilla.

Las tarjetas de sonidoSólo como ejemplo: los mas memoriosos recordarán que configurar la placa de sonido requería la mención del nombre del fabricante (Creative Labs - Soundblaster) y especificación de modelo (SB Pro) y datos de configuración (DMA, IRQ, etc). El tener otro modelo de placa menos popular significaba prácticamente jugar sin sonido.

Page 6: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Un poco de historiaWindows 95

• Microsoft prometía un sistema operativo serio.

• Se introdujo por primera vez el “Plug & Play” que tornaba la instalación de nuevo hardware mas sencilla.

• Se comenzó con la tarea de evitar que las aplicaciones accediesen directamente al hardware (aunque se seguía tolerando para mantener compatibilidad con viejas aplicaciones)

• Se introdujo un nuevo tipo de multitarea - ya utilizada hace mucho tiempo en otros sistemas - llamada preemptive (también se la llamó multitarea real), lo cuál evitaba que un proceso monopolizara el CPU.

• A pesar de todos estos avances el acceso al dispotivo por medio del GDI seguía siendo poco eficiente para la manipulación intensiva de gráficos.

Page 7: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Un poco de historiaDirectX

Para cambiar esta situación Microsoft creó DirectX.

Sus diseñadores tuvieron como objetivo desde el primer día “hacer de Windows un sistema operativo atractivo para la programación de juegos”, de hecho en sus primeros días fue conocido como “Game SDK”.

DirectX debía ser rápida y de nivel suficientemente bajo para otorgar a los programadores la libertad suficiente para que puedan crear cualquier tipo de juego.

Page 8: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Un poco de historiaDirectX

Para poder hacer un uso óptimo de este nuevo recurso, los drivers de los dispositivos afectados debían de soportar la implementación de funciones pertenecientes a la interfaz de DirectX - en el nivel de abstracción del hardware (HAL, Hardware Abstraction Layer) - o en el caso del hadware antiguo o directamente que no soporte DirectX se utilizaría el nivel de emulación de hardware (HEL, Hardware Emulation Layer).

De este modo, se tomaba lo mejor de los dos mundos, si existía un driver específico se aprovechaban sus características y de otro modo se emulaban estas funciones realizando un acceso convencional al mismo. Además, los drivers serían escritos por los desarrolladores del hardware, personas que se encontraban mucho mas calificados para esta tarea que el programador de juegos.

Page 9: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Un poco de historiaDirectX

Existen, sin embargo, funciones que para poder ser utilizadas deben estar sí o sí soportadas por hardware.

Aplicación Win32

API de Direct3D

Dispositivo HAL

GDI

Hardware de gráficos

Interfaz al manejador del dispositivo (DDI)

Page 10: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Componentes de DirectXDirectGraphics

Integración de DirectDraw y Direct3D. A partir de la versión 8 de DirectX, ya no es posible acceder directamente a DirectDraw.

Page 11: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Componentes de DirectXDirectInput:

Provee una interfaz para poder acceder de modo eficiente a los dispositivos de entrada (ej: mouse, teclado, joysticks, etc), incluyendo el soporte a dispositivos con force feedback (especie de vibrador incorporado al dispositvo que otorga al jugador una sensación de resistencia, muy utilizado en volantes y joysticks).

Page 12: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Manejo de teclado con Win32

Recordemos como se obtenía la entrada de teclado en una aplicación de Windows convencional.

Cuando un usuario presiona una tecla, el driver lee este nuevo estado y genera un mensaje dirigido hacia la cola de mensajes del sistema. Windows procesa los mensajes entrantes de modo secuencial, llegado el turno del mensaje recientemente inserto se lo envía a la aplicación que se encuentra en foco dirigiéndolo a su cola de mensajes.Finalmente, la aplicación irá despachando los mensajes entrantes y llegado el turno de nuestro mensaje será atendido por el Window Procedure de nuestra aplicación.

Como el lector se puede imaginar, este mecanismo no es apropiado para un juego, donde por lo general se requiere reaccionar rápidamente a los eventos de entrada. DirectX pasa por encima de este mecanismo de mensajes.

Componentes de DirectX

Page 13: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Manejo de teclado con Win32

Este mecanismo no es apropiado para un juego, donde por lo general se requiere reaccionar rápidamente a los eventos de entrada. DirectX pasa por encima de este mecanismo de mensajes.

Componentes de DirectX

Keyboard

Keyboarddevice driver

Scan code

Cola de mensajes delsistema

Cola de mensajes delthread

Window procedureMessageloop delthread

Mensaje Mensaje

Page 14: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Componentes de DirectXDirectPlayProvee una manera simplificada de comunicación por medio de una red de datos (LAN, Internet).

DirectShowProvee un soporte multimedia para la reproducción y adquisición de video. Este componente se integró a DirectX a partir de la versión 8.

DirectSetupProvee un conjunto de funciones para instalar DirectX - de modo muy simple - desde nuestro juego.

Page 15: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

La arquitectura de DirectXDirectX se encuentra desarrollado según el modelo de programación COM (Common Object Model).

Básicamente este modelo especifica la contrucción de objetos por medio de un sistema de negociación de interfases, gestión del ciclo de vida de un programa, sistema de licencias y servicio de eventos.

Page 16: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

La arquitectura de DirectXEsto significa que podremos hacer uso de cualquier versión de DirectX igual o inferior a la que el jugador posea instalada.

También nos asegura que el lanzamiento de una nueva versión no modificará para nada el uso de la interfaz de una versión anterior del sistema.

Por lo tanto, si hacemos uso de DirectX 5 y el jugador instala DirectX 9, nuestro juego seguirá funcionando perfectamente ya que la interfaz de la versión 5 ha permanecido inalterada, como lado negativo el tamaño de los componentes reinstalables se acrecientan de modo significativo ya que cada nueva versión incluye las anteriores.

Page 17: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Runtimes y el SDK

DirectX runtimes: Necesarios para ejecutar las aplicaciones DirectX en la plataforma (Windows trae preinstalada la última versión al lanzamiento del sistema operativo).

DirectX 8.1Windows XP

DirectX 7.1Windows ME

DirectX 7.0Windows 2000

DirectX 6.1ªWindows 98 SE

DirectX 5.2Windows 98 Gold

Versión de DirectXSistema Operativo

Page 18: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Runtimes y el SDK

DirectX SDK: Necesario para desarrollar aplicaciones utilizando DirectX. Incluye:

• Documentación• Tutoriales y demostraciones• Librerías• Archivos cabecera

Los SDK son paquetes muy pesados y puede sobrepasar fácilmente los 100Mb - dependiendo de la versión.

Page 19: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Requerimientos mínimosCuando se realiza un juego normalmente se establece de antemano los requerimientos mínimos que tendrá el mismo.

Si utilizamos la interfaz de la versión 9 de DirectX y no hacemos uso de ninguna funcionalidad especial de la misma estaremos elevando los requerimientos de nuestro juego (respecto a la versión de DX requerida) sin suficientes motivos.

Page 20: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

Requerimientos mínimosNinguna versión de Windows, por el momento, trae preinstalada la versión 9 de DirectX, por lo tanto el jugador deberá instalar antes de poder utilizar nuestro juego los runtimes de DirectX que son aproximadamente 30 Mb, si nuestro juego tiene como objetivo el mercado shareware de descarga online y ocupa algunos pocos megabytes.

En este texto utilizaremos DirectX 8 debido a que no requiere ningún tipo de instalación adicional en sistemas operativos WindowsXP y trae una serie de características significativas sobre DirectX 7 que nos facilitará en gran medida la creación de juegos.

Page 21: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

El componente DirectDrawEn DirectX, hasta la versión 7, Microsoft ofrecía un componente de bajo nivel llamado DirectDraw que nos permitía trabajar con superficies de modo directo. El API proveía todas las primitivas necesarias que requiere un motor 2d (al día de hoy es posible seguir utilizándola siempre y cuando se solicite la versión 7 o menor a DirectX) como manipulación de superficies (espejado, escalamiento), transferencias con color key, etc.

Con el lanzamiento de DirectX 8, Microsoft hizo un gran cambio en el diseño de su API. Combinó DirectDraw y Direct3D en un solo componente al que denominó DirectGraphics, sin embargo este nuevo componente es básicamente 3D y se lo conoce también como Direct3D 8.

Page 22: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

El componente DirectDraw

¿Qué le pasó a DirectDraw? - extracto del Microsoft’s DirectX FAQ

“Gran parte de la funcionalidad de DirectDraw ha sido colocada en las interfaces de Direct3D 8. Los desarrolladores que requieran sólo uso de primitivas 2d podrán seguir utilizando el componente de modo directo con la interfaz 7 de DirectX. Los desarrolladores que realizan aplicaciones 3d con elementos 2d les convendrá utilizar la nueva alternativa (point sprites y texturas billboards por ejemplo) y de este modo mejorarán performance y flexibilidad.”

Page 23: Programador Profesional de Juegos Programación de Gráficos I Unidad 1 Introducción Instructor: Daniel Brenner danielbrenner@hotmail.com

El componente DirectDraw

Desgraciadamente muchos de los programadores 2d no encontraron “gran parte de la funcionalidad de directdraw…”, de hecho perdieron una de las funciones mas importantes (blit). Sin embargo, el gran atractivo de la nueva API es precisamente “la performance y la flexibilidad”, DirectX 8 está desarrollado para hacer uso del hardware mas moderno.

Las rotaciones y escalamientos, así como la utilización del alpha blending proveen al desarrollador de potentes herramientas para hacer que su juego se vea realmente bien. En esta nueva versión se facilitó, además, el código requerido para la inicialización y destrucción.