Direct3D es parte de DirectX (conjunto de bibliotecas para multimedia), propiedad de Microsoft. Consiste en una API para la programación de gráficos 3D. Está disponible tanto en los sistemas Windows de 32 y 64 bits, como para sus consolas Xbox Xbox 360 Y Xbox One.
El objetivo de esta API es facilitar el manejo y trazado de entidades gráficas elementales, como líneas, polígonos y texturas, en cualquier aplicación que despliegue gráficos en 3D, así como efectuar de forma transparente transformaciones geométricas sobre dichas entidades. Direct3D provee también una interfaz transparente con el hardware de aceleración gráfica.
Se usa principalmente en aplicaciones donde el rendimiento es fundamental, como los videojuegos, aprovechando el hardware de aceleración gráfica disponible en la tarjeta gráfica.
El principal competidor de Direct3D es OpenGL, desarrollado por Silicon Graphics Inc.
Direct3D es uno de los múltiples componentes que contiene la API DirectX de Windows. Se le podría situar al nivel del GDI de Windows, presentando un nivel de abstracción entre una aplicación de gráficos 3D y los drivers de la tarjeta gráfica (véase gráfico adjunto). Con arquitectura basada en el COM de Microsoft, la mayor ventaja que presenta Direct3D frente al GDI es que Direct3D se comunica directamente con los drivers de pantalla, consiguiendo mejores resultados en la representación de los gráficos por pantalla que aquel.
Direct3D está compuesto por dos grandes API. El modo retenido y el modo inmediato. El modo inmediato da soporte a todas las primitivas de procesamiento 3D que permiten las tarjetas gráficas (luces, materiales, transformaciones, control de profundidad, etc). El modo retenido, construido sobre el anterior, presenta una abstracción de nivel superior ofreciendo funcionalidades preconstruidas de gráficos como jerarquías o animaciones. El modo retenido ofrece muy poca libertad a los desarrolladores, siendo el modo inmediato el que más se usa.
El modo inmediato de Direct3D trabaja fundamentalmente con los llamados dispositivos (devices). Son los encargados de realizar la renderización de la escena. El dispositivo ofrece una interfaz que permite diferentes opciones de renderización. Por ejemplo un dispositivo mono permite la renderización en blanco y negro mientras que un dispositivo RGB permite el uso de colores. Podemos clasificar los dispositivos en tres clases principales:
Cada dispositivo tiene asociada una o más cadenas de intercambio (swap chains). Dichas cadenas están compuestas por varios buffers de superficies, considerando a una superficie como un conjunto de píxeles más todos los atributos asociados a cada uno de ellos como la profundidad, el color, la transparencia (canal alfa), etc.
Además, los dispositivos tienen asociados también una colección de recursos (resources) o datos concretos necesarios para realizar la renderización. Cada uno de estos recursos tiene los siguientes atributos:
En la figura adjunta se presenta una versión simplificada
de la pipeline de Direct3D.Las diferentes etapas del proceso de renderización son:
Direct3D permite la reconfiguración de todas las etapas, aumentando considerablemente la flexibilidad de esta pipeline.
Ejemplo de cómo dibujar un triángulo en Direct3D:
Direct3D permite dos modos de presentación en pantalla:
En 1992, Servan Keondjian fundó RenderMorphics, una compañía que desarrollaba una API de gráficos 3D llamada Reality Lab. Esta API se usaba en programas de CAD y representación de imágenes médicas. En febrero de 1995, Microsoft compró RenderMorphics, incorporando a Keondjian a la compañía para implementar un motor gráfico para Windows 95. El resultado fue la primera versión de Direct3D, incluida en DirectX 2.0 y DirectX 3.0.
Inicialmente, Direct3D se implementó sobre dos API: la API retained mode y la API inmediate mode. El modo retenido era una API de escenarios gráficos basada en el COM (Computer Object Model) de Microsoft, que tuvo escasa acogida. Los desarrolladores de juegos solicitaron un control más directo sobre las actividades del hardware del permitido en el Retained Mode. Solamente el juego Lego Island se basó en dicha API, por lo que Microsoft abandonó la evolución de dicho modo después de DirectX 3.0, quedando intacto desde entonces.
La primera versión del modo inmediato de Direct3D consistía en un modelo de programación basado en un buffer de ejecución. Microsoft confiaba en que dicho buffer fuera soportado directamente por los vendedores de hardware pretendiendo que se almacenaran en memoria y fueran parseados por hardware, con el objetivo de realizar renderización 3D. Dichos buffers resultaron ser muy difíciles de programar, frenando la adopción de la nueva API y generando una corriente de opinión que solicitaba la adopción de OpenGL como la oficial para renderización 3D en Microsoft. Microsoft decidió seguir mejorando Direct3D, no solo para ser competitivos con OpenGL, sino también para competir de forma más efectiva contra otras API privativas como Glide de 3dfx. Se encargó a un equipo de Redmond hacerse cargo del desarrollo del modo inmediato de Direct3D, mientras el equipo de RenderMorphics continuaba el trabajo sobre el modo retenido, abandonado no mucho después como ya se ha dicho.
A continuación se muestra una relación de las diferentes versiones de Direct3D con las mejoras más importantes que aportaron:
Escribe un comentario o lo que quieras sobre Direct3D (directo, no tienes que registrarte)
Comentarios
(de más nuevos a más antiguos)