Ir al contenido
Menú principal
Menú principal
mover a la barra lateral
ocultar
Navegación
Página principal
Cambios recientes
Página aleatoria
Ayuda sobre MediaWiki
Buscar
Buscar
español
Apariencia
Crear una cuenta
Acceder
Herramientas personales
No has accedido
Discusión
Contribuciones
Crear una cuenta
Acceder
Edición de «
Direct3D
»
Página
Discusión
español
Leer
Editar
Editar código
Ver historial
Herramientas
Herramientas
mover a la barra lateral
ocultar
Acciones
Leer
Editar
Editar código
Ver historial
General
Lo que enlaza aquí
Cambios relacionados
Información de la página
Apariencia
mover a la barra lateral
ocultar
Advertencia:
no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si
inicias sesión
o
creas una cuenta
, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.
Comprobación antispam. ¡
No
rellenes esto!
'''Direct3D''' es parte de [[DirectX]] (conjunto de bibliotecas para multimedia) siendo propiedad de [[Microsoft]]. Consiste en una [[interfaz de programación de aplicaciones]] (API) para [[Gráficos 3D por computadora|gráficos 3D]]. Está disponible para los sistemas [[Microsoft Windows|Windows]] de 32 y [[64 bits]], así como para las consolas de la línea [[Xbox (marca)|Xbox]] El objetivo de esta API es facilitar el manejo y trazado de entidades gráficas elementales, como [[línea]]s, [[polígono]]s y [[Textura (gráficos por computadora)|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 [[videojuego]]s, aprovechando el ''hardware'' de aceleración gráfica disponible en la [[tarjeta gráfica]]. El principal competidor de Direct3D es [[OpenGL]] y su sucesor [[Vulkan]], desarrollado originalmente por [[Silicon Graphics|Silicon Graphics Inc]]. == Arquitectura == [[Archivo:D3D Capa de Abstracción (es).png|thumb|185px|Capa de Abstracción.]] 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 [[Controlador de dispositivo|drivers]] de la tarjeta gráfica (véase gráfico adjunto). Con arquitectura basada en el [[Component Object Model|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, y otros). 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 [[Hardware|dispositivos]]. 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 [[Modelo de color RGB|RGB]] permite el uso de colores. Podemos clasificar los dispositivos en tres clases principales: * Dispositivo de [[capa de abstracción]] de ''hardware'' (HAL, del inglés ''hardware abstract layer''): permite aceleración hardware. Se trata del dispositivo más rápido. [[Archivo:D3D Dispositivo (es).png|thumb|190px|Dispositivo.]] * Dispositivo de referencia: es necesaria la instalación previa del [[SDK|kit de desarrollo de ''software'']] (SDK) de Direct3D para poder usar este tipo de dispositivo. Permite la simulación software de un tipo de renderización y resulta muy útil cuando el hardware todavía no tiene incorporadas nuevas características de renderización. Un caso muy concreto del dispositivo de referencia es el dispositivo de referencia nula cuya función es presentar la pantalla en negro. Se usa por defecto cuando se intenta usar un dispositivo de referencia y no se encuentra el SDK. * Dispositivos de conexión ''software'': permite opciones de rasterización por ''software''. Previamente se ha tenido que obtener el dispositivo mediante el método ''RegisterSoftwareDevice''. Este tipo de dispositivos no fueron usados hasta DirectX 9.0.<ref>{{Cita web |url = http://www.microsoft.com/downloads/details.aspx?FamilyID=57d03491-6c49-4429-bff7-130408b5f410&DisplayLang=en |título = Software de Rasterizazión para el SDK de DirectX 9.0 |urlarchivo = https://web.archive.org/web/20080418103807/http://www.microsoft.com/downloads/details.aspx?FamilyID=57d03491-6c49-4429-bff7-130408b5f410&DisplayLang=en |fechaarchivo = 18 de abril de 2008 }}</ref> Cada dispositivo tiene asociada una o más cadenas de intercambio. Dichas cadenas están compuestas por varios [[buffer de datos|búferes]] de superficies, considerando a una superficie como un conjunto de [[píxel]]es 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 o datos concretos necesarios para realizar la renderización. Cada uno de estos recursos tiene los siguientes atributos: * Tipo: define el tipo de recurso del que se trata: superficie, volumen, textura, textura de cubo, textura de volumen, textura de superficie, búfer de vértices o búfer de índices. * Almacén:<ref>{{Cita web |url = http://www.toymaker.info/Games/html/d3d_resources.html#MemoryPool |título = Recursos de Direct3D - Almacén de memoria |urlarchivo = https://web.archive.org/web/20080509150221/http://www.toymaker.info/Games/html/d3d_resources.html#MemoryPool |fechaarchivo = 9 de mayo de 2008 }}</ref> describe dónde se almacena el recurso durante la ejecución. ''Por defecto'' indica que se almacena junto con el dispositivo; ''gestionado'' que se guarda en la memoria del sistema y se copia en el dispositivo cuando éste lo necesita; ''memoria del sistema'' que se encuentra exclusivamente en la memoria del sistema, al igual que la [[memoria virtual]], ignorando este último las restricciones de la tarjeta gráfica. * Formato: describe el formato en que se almacena el recurso en memoria. La información más importante es respecto al almacenamiento de los píxeles en memoria. Un ejemplo de valor de formato es ''D3DFMT_R8G8B8'' que indica que una [[profundidad de color]] de 24 bits (los ocho de más peso para el rojo, los ocho de en medio para el verde y los ocho de menos peso para el azul). * Utilización: mediante una lista de banderas, indica cómo se va a usar el recurso. También permite distinguir los recursos estáticos, aquellos que una vez cargados solo interesa su valor, de los recursos dinámicos, cuyo valor se modifica repetidamente. == Tubería gráfica == [[Archivo:D3D Pipeline (es).png|thumb|185px|Proceso en la tubería de gráficos.]] En la figura adjunta se presenta una versión simplificada<ref>{{Cita web |url=http://www.xmission.com/~legalize/book/preview/poster/pipeline-9.0.png |título=Pipeline gráfica de Direct3D 9.0 }}</ref> de la [[Tubería de renderizado|tubería]] gráfica de Direct3D. Las diferentes etapas del proceso de renderización son:<ref>{{Cita web |url=http://msdn2.microsoft.com/en-us/library/bb205123.aspx |título=Etapas de la pipeline de Direct3D 10 }}</ref> # Ensamblaje de entrada: aporta los datos de entrada (líneas, puntos y triángulos). # Sombreador de vértices: se encarga de las operaciones de vértices (iluminación, texturas, transformaciones). Trata los vértices individualmente. # Sombreador de geometría: realiza operaciones con entidades primitivas (líneas, triángulos o vértices). A partir de una primitiva, el sombreador de geometría puede descartarla, o devolver una o más primitivas nuevas. # Flujo de salida: almacena la salida de la etapa anterior en memoria. Resulta útil para realimentar la tubería con datos ya calculados. # Rasterizador: convierte la imagen 3D en píxeles. # Sombreador de píxeles: operaciones con los píxeles. # Fusionador de salida: se encarga de combinar la salida del sombreador de píxeles con otros [[Tipo de dato|tipos de datos]], como los patrones de profundidad, para construir el resultado final. Direct3D permite la reconfiguración de todas las etapas, aumentando considerablemente la flexibilidad de esta tubería. {{clear}} == Ejemplo == Ejemplo de cómo dibujar un triángulo en Direct3D: /* Definición de un polígono de 3 vértices */ D3DLVERTEX v[3]; /* Establecer un vértice */ v[0]=D3DLVERTEX( D3DVECTOR(0.f, 5.f, 10.f), 0x00FF0000, 0, 0, 0 ); /* Establecer un vértice */ v[1]=D3DLVERTEX( D3DVECTOR(0.f, 5.f, 10.f), 0x0000FF00, 0, 0, 0 ); /* Establecer un vértice */ v[2]=D3DLVERTEX( D3DVECTOR(0.f, 5.f, 10.f), 0x000000FF, 0, 0, 0 ); /* Llamada a función para dibujar el triángulo */ pDevice->DrawPrimitive( D3DPT_TRIANGLELIST, D3DFVF_LVERTEX, v, 3, 0 ); == Modos de presentación == Direct3D permite dos modos de presentación en pantalla: * Pantalla completa exclusiva: gracias a que Direct3D tiene conexión directa con el controlador de la pantalla, el dispositivo Direct3D hace uso exclusivo de la pantalla. Ninguna otra aplicación podrá hacer uso de la pantalla mientras se encuentre en este modo. * En ventana: el resultado se muestra dentro de una ventana de Windows. Direct3D tiene que colaborar con el GDI para finalizar dicha representación. Aunque este modo resulta más lento que el anterior, al no bloquear la pantalla y permitir el uso de otras aplicaciones, resulta muy cómodo en la depuración de errores. == Historia == 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 de ''modo retenido'' y la API de ''modo inmediato''. El modo retenido era una API de escenarios gráficos basada en el [[Component Object Model|modelo de componentes de objeto]] (COM) 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 ''modo retenido''. 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 búfer de ejecución. Microsoft confiaba en que dicho búfer fuera soportado directamente por los vendedores de ''hardware'' pretendiendo que se almacenaran en memoria y fueran analizados por ''hardware'', con el objetivo de realizar renderización 3D. Dichos búferes 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. '''Direct3D 5.0''' introdujo el conjunto de primitivas ''DrawPrimitive'' que eliminaba la necesidad de construir búferes de ejecución por parte de las aplicaciones. '''Direct3D 6.0''' introdujo numerosas características para la abstracción del ''hardware'' (como múltiples texturas y búferes de patrones), optimizó el uso de las tuberías de geometría para [[x87]], [[SSE]] y [[3DNow!]], y la gestión opcional de texturas para simplificar la programación. '''Direct3D 7.0''' introdujo el formato de texturas DDS<ref>{{Cita web |url=http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c/directx/graphics/reference/ddsfilereference/ddsfileformat.asp |título=Direct3D 7.0 crea el formato Microsoft DirectDraw Surface (.dds) }}</ref> y compatibilidad para la aceleración ''hardware'' de transformaciones y luces. También añadió la posibilidad de almacenar búferes de vértices en memoria ''hardware''. Los búferes ''hardware'' de vértices supusieron la primera mejora sustancial con respecto a OpenGL en la historia de DirectX. También se aumentó el soporte para múltiples texturas. Aunque Direct3D 7.0 era muy potente, era tan complicado de programar que necesitaba un nuevo modelo de programación para mostrar las capacidades de sombreado que proporcionaba el hardware. '''Direct3D 8.0''' introdujo programabilidad en forma de sombreadores de vértices y píxeles, permitiendo a los desarrolladores escribir código sin preocuparse del hardware. Programar sombreadores sencillos equivalían a tareas sencillas, y sombreadores más complejos se usaban para tareas más complejas. El driver de pantalla compilaba estos sombreadores en instrucciones comprensibles por el ''hardware''. Direct3D 8.0 también eliminó la API DirectDraw,<ref>{{Cita web |url = http://www.gamedev.net/reference/articles/article1247.asp |título = Direct3D absorbe a DirectDraw |urlarchivo = https://web.archive.org/web/20070604171620/http://www.gamedev.net/reference/articles/article1247.asp |fechaarchivo = 4 de junio de 2007 }}</ref> absorbiéndola. Se resolvieron muchos problemas de usabilidad. Además, se incluyeron características muy potentes como niebla, [[Mapeado topológico|mapeo topológico]] y [[mapeo de texturas]]. '''Direct3D 9.0''' añadió una nueva versión del [[High Level Shader Language|lenguaje de sombreado de alto nivel]] (HLSL),<ref>{{Cita web |url = http://www.microsoft.com/presspass/press/2003/Jan03/01-22DirectXHLSLPR.mspx |título = Revisión de HLSL en Direct3D 9.0 |urlarchivo = https://web.archive.org/web/20100827232558/http://www.microsoft.com/presspass/press/2003/Jan03/01-22DirectXHLSLPR.mspx |fechaarchivo = 27 de agosto de 2010 }}</ref> compatibilidad con [[HDR]], renderización de múltiples objetos e indexación del búfer de vértices. '''Direct3D 10''' consigue un aumento considerable en el rendimiento eliminando el llamado [[Sobrecoste (informática)|sobrecoste]] de objeto, que consiste en realizar llamadas entre la API y el driver usando la CPU. Dichas llamadas empezaban a producir un cuello de botella debido al incremento en la complejidad de las escenas y se han incluido medidas como los bloques de estado de los sombreadores para poder referenciar grupos de variables del sombreador a través de un único ID en vez de enviar una a una entre otras cosas. Direct3D 10 incorpora además soporte del sombreador model 4, lo que significa que se puede hacer uso de los sombreadores de geometría. Asimismo incorpora una nueva función de Stream Out; esta nueva función permite guardar en un búfer información de salida de los sombreadores de geometría permitiendo operaciones de varias pasadas en el sombreador de geometría, lo que podría traducirse de cara al usuario en simulaciones física completas en la GPU ya es posible realimentar el sombreador tubería desde el sombreador de vértices. Se incluyó virtualización de la memoria gráfica y el programador tiene un mayor control sobre en que clase de memoria quiere alojar sus recursos. A través de los sombreadores de geometría es posible generar geometría en la propia GPU por ejemplo para convertir una sucesión de puntos en polígonos orientados a cámara para un efecto de partículas, anteriormente se realizaba en el procesador y ahora también calcula la GPU. Otro punto importante es la supresión de la tubería fija de DirectX 10, lo cual supone un serio problema para los programadores novatos, y un aumento considerable de la complejidad de la API, poniendo como ejemplo la necesidad de crear un objeto especializado llamado disposición de entrada por cada combinación de formato de vértices y sombreador de vértices que se vaya a usar (cosa que en Direct3D 9.0 era automática), lo cual supone un pequeño aumento de rendimiento a costa de requerirse un uso más dificultoso de la API. El principal problema de DirectX 10 es que sólo funcionaba con el sistema operativo [[Windows Vista]], mientras que DirectX 9.0 trabajaba con toda la familia de Windows a partir de [[Windows 98]], debido a esto se rumorea que Microsoft planea o bien soportarlo en XP o bien sacar una versión especial de DirectX 9 que implemente algunas características. El SDK de DirectX 10 está disponible desde febrero de 2007.<ref>{{Cita web |url=http://msdn2.microsoft.com/en-us/xna/aa937781.aspx |título=SDK de DirectX 10 disponible desde febrero de 2007 }}</ref> == Véase también == * [[High Level Shader Language|HLSL]] - [[Lenguaje de programación]] de sombreadores * [[DirectX]] - Colección de API donde se integra Direct3D * [[OpenGL]] - Principal competidor de Direct3D * [[Gráficos 3D por computadora]] * [[Shader]] * [[Comparación entre Direct3D y OpenGL]] == Referencias == {{listaref}} == Enlaces externos == * [https://web.archive.org/web/20080828111037/http://www.microsoft.com/windows/directx/default.mspx Página oficial de DirectX] * [https://web.archive.org/web/20070329064636/http://www.dxten.com/wiki/Main_Page Wiki sobre DirectX10 (en inglés)] {{Control de autoridades}} [[Categoría:DirectX]] [[Categoría:Bibliotecas gráficas]] [[Categoría:Interfaces de programación de aplicaciones de Microsoft]]
Resumen:
Al guardar los cambios aceptas los
términos de uso
y liberas de forma irrevocable tu contribución conforme a los términos de las licencias
licencia CC BY-SA 4.0
y
GFDL
. Aceptas igualmente que un hipervínculo o URL es atribución suficiente conforme a la licencia Creative Commons.
Cancelar
Ayuda de edición
(se abre en una ventana nueva)
Buscar
Buscar
Edición de «
Direct3D
»
Añadir idiomas
Añadir tema