En informática , D3DX (Direct3D Extension) es una biblioteca API de alto nivel obsoleta que está escrita para complementar la API de gráficos Direct3D de Microsoft . La biblioteca D3DX se introdujo en Direct3D 7 y, posteriormente, se mejoró en Direct3D 9. Proporciona clases para cálculos comunes en vectores, matrices y colores, cálculo de matrices de visualización y proyección, interpolaciones de splines y varias tareas más complicadas, como compilar o ensamblar sombreadores utilizados para programación de gráficos 3D, almacenamiento de animación esquelética comprimida y pilas de matrices. Hay varias funciones que proporcionan operaciones complejas sobre mallas 3D, como el cálculo del espacio tangente, la simplificación de la malla, la transferencia de radiancia precalculada, la optimización para la compatibilidad con la caché de vértices y el reordenamiento de tiras, y generadores de mallas de texto 3D. Las características 2D incluyen clases para dibujar líneas de espacio de pantalla, texto y sistemas de partículas basados en sprites . Las funciones espaciales incluyen varias rutinas de intersección, conversión de / a coordenadas baricéntricas y generadores de esferas y cuadros delimitadores.
La biblioteca D3DX contiene rutinas preescritas para hacer cosas comunes a la mayoría de las aplicaciones 2D / 3D, como juegos. Dado que la API de Direct3D es de nivel relativamente bajo, usar la biblioteca D3DX suele ser mucho más sencillo.
En 2012, Microsoft anunció que D3DX quedaría obsoleto en el SDK de Windows 8 , junto con otros marcos de desarrollo como XNA . Los efectos de sombreado, la gestión de texturas, las optimizaciones de geometría y los modelos de malla están disponibles como fuentes independientes publicadas a través de GitHub . [1] Las construcciones matemáticas de D3DX, como vectores y matrices , se consolidarían con XNAMath en DirectXMath [2] y la matemática de armónicos esféricos se proporciona como fuente separada. [1]
Interfaces
La biblioteca D3DX sigue el modelo de programación orientada a objetos COM . Se accede a la funcionalidad mediante interfaces similares a C ++ .
ID3DXEffect
La interfaz ID3DXEffect se utiliza para compilar y vincular sombreadores FX (.fx). Admite el mapeo automático de parámetros de sombreadores con nombre a registros constantes de hardware, grupos de parámetros, mapeo de texturas a muestreadores disponibles, especificando 'técnicas' y modificando estados de render.
ID3DXFont
La interfaz ID3DXFont se puede utilizar para dibujar texto 2D. Consulte también D3DXCreateText que crea mallas de texto en 3D.
ID3DXLine
La interfaz ID3DXLine se puede utilizar para dibujar líneas de espacio de pantalla suavizadas con patrón.
ID3DXMesh
La interfaz ID3DXMesh se utiliza para el almacenamiento de mallas y la optimización de la malla para la compatibilidad con la caché de vértices y el reordenamiento de tiras. Algunas funciones de D3DX operan en esta interfaz. Un ejemplo es D3DXComputeTangentFrame para crear un marco de espacio tangente para efectos como el mapeo normal y de paralaje. Un descendiente de esta clase es ID3DXPMesh que puede simplificar la geometría.
ID3DXPRTEngine
Se utiliza para la transferencia de resplandor precalculada , una técnica similar a la iluminación de armónicos esféricos que se utiliza para la iluminación global precalculada y la iluminación ambiental suave.
ID3DXSprite
La interfaz ID3DXSprite es una clase de C ++ que se utiliza para dibujar una imagen 2D en la pantalla conocida como sprite en gráficos por computadora . En DirectX 7, esto se hacía normalmente con la API de DirectDraw , que está obsoleta.
El programador normalmente solo necesita llamar al método Begin () del objeto ID3DXSprite para configurar el estado de renderizado y la transformación mundial para el dibujo 2D, llamar al método Draw () para agregar texturas a la lista que se va a dibujar y finalmente llamar al método End () para dibujar las imágenes en la pantalla y restaurar el estado de los gráficos originales.
Una crítica común del D3DXSprite fue que era lento, pero este problema se ha abordado a partir de Direct3D 9 .
Funciones
D3DXComputeTangentFrame
Calcula el marco de espacio tangente de una malla que se utiliza para efectos como mapeo normal / de relieve, mapeo de paralaje y modelos de iluminación anisotrópica. Maneja los vértices en las discontinuidades del espacio tangente haciendo duplicados, resolviendo así el problema de la bola peluda . No maneja el devanado UV invertido de las caras, por lo que los modelos con mapeo de textura reflejada pueden tener problemas de iluminación debido a esto.
Direct3D10
La biblioteca de utilidades D3DX10 para Direct3D 10 era similar a la D3DX para Direct3D 9 en funcionalidad e incluía la misma biblioteca D3DXMath y códecs de software de compresión de bloques (BC1-BC5). Las diferencias clave fueron que Effects para Direct3D 10 se convirtió en un componente del sistema operativo, el compilador HLSL se movió a una DLL D3DCompile distinta y el código de carga y guardado de la imagen de textura utilizó el componente de imágenes de Windows . Como consecuencia del cambio al uso de WIC, D3DX10 no admitía los formatos de archivo Truevision TGA , RGBE o los formatos de archivo Portable PixMap que eran compatibles con D3DX. D3DX10 tampoco incluyó el atlas de textura de isochart de UVAtlas o las API de transferencia de resplandor precalculadas .
Todas las versiones de D3DX10 están en desuso según Microsoft Docs. [2]
Direct3D11
La biblioteca de utilidades D3DX11 para Direct3D 11 era una versión reducida de D3DX10. Incluía código de carga y guardado de imágenes de textura usando WIC y los códecs de software Block Compression (BC1-BC7), pero poco más.
Todas las versiones de D3DX11 están en desuso según Microsoft Docs. [2]
La mayor parte de las funciones de D3DX9, D3DX10 y D3DX11 se han trasladado a proyectos de código abierto para Direct3D 11 o posterior: DirectXMath, [3] DirectX Tool Kit, [4] DirectXTex, [5] DirectXMesh, [6] y UVAtlas. [7] También hay versiones de código abierto de DXUT [8] y el tiempo de ejecución de Effects (FX11) [9] disponibles.
Direct3D12
No existe una biblioteca de utilidades D3DX12 basada en DLL. Sin embargo, hay un encabezado de utilidad D3DX12 (todo código C ++ en línea) para algunos ayudantes básicos para Direct3D 12 documentados en Microsoft Docs [10] y publicados en GitHub. [11] No incluye funciones como matemáticas, sprites, renderizado de fuentes, formas 3D, mallas o carga de texturas. Hay un kit de herramientas de DirectX para Direct3D 12 [12] que proporciona la funcionalidad que falta.
Referencias
- ^ a b "Vivir sin D3DX" . MSDN.
- ^ a b c Microsoft. "¿Dónde está DirectX SDK?" . Microsoft . Consultado el 28 de junio de 2020 .
- ^ "DirectXMath" . GitHub.
- ^ "Kit de herramientas DirectX para DX11" . GitHub.
- ^ "Biblioteca de procesamiento de texturas DirectXTex" . GitHub.
- ^ "Biblioteca de procesamiento de geometría DirectXMesh" . GitHub.
- ^ "Biblioteca de atlas de textura de UVAtlas isochart" . GitHub.
- ^ "DXUT para Direct3D 11" . GitHub.
- ^ "Efectos para Direct3D 11" . GitHub.
- ^ Microsoft. "Funciones y estructuras auxiliares para D3D12" . Microsoft . Consultado el 28 de junio de 2020 .
- ^ "D3DX12" . GitHub.
- ^ "Kit de herramientas DirectX para DX12" . GitHub.
enlaces externos
- Documentación de D3DX en Microsoft Docs
- Documentación de D3DX10 en Microsoft Docs
- Documentación de D3DX11 en Microsoft Docs
- Vivir sin D3DX (anteriormente Blogs de MSDN)