컴퓨팅에서 D3DX는 마이크로소프트의 Direct3D 그래픽스 API를 보완하기 위해 작성된 고수준 API 라이브러리이다. D3DX 라이브러리는 Direct3D 7에서 도입되었으며, 이후 Direct3D 9에서 개선되었다. 이 라이브러리는 벡터, 행렬, 색상에 대한 일반적인 계산, Look-at 및 투영 행렬 계산, 스플라인 보간법 등을 위한 클래스를 제공하며, 3D 그래픽 프로그래밍에 사용되는 셰이더 컴파일 또는 어셈블, 압축된 골격 애니메이션 저장, 행렬 스택과 같은 더 복잡한 작업을 수행한다. 또한 탄젠트 공간 계산, 메시 단순화, 사전 계산된 복사 전송(Precomputed Radiance Transfer), 버텍스 캐시 최적화 및 스트립 재정렬, 3D 텍스트 메시 생성기 등 3D 메시와 관련된 복잡한 연산을 제공하는 여러 함수가 존재한다. 2D 기능으로는 화면 공간 선, 텍스트, 그리고 스프라이트 기반 입자 시스템을 그리기 위한 클래스가 포함되어 있다. 공간 함수에는 다양한 교차 루틴, 무게중심 좌표로의 변환, 경계 상자 및 구 생성기가 포함된다.
D3DX 라이브러리에는 게임과 같은 대부분의 2D/3D 애플리케이션에서 공통적으로 사용되는 작업을 위한 미리 작성된 루틴이 포함되어 있다. Direct3D API는 상대적으로 저수준이기에, D3DX 라이브러리를 사용하면 훨씬 더 간편하게 구현할 수 있다.
2012년, 마이크로소프트는 윈도우 8 SDK에서 D3DX 9, D3DX 10, D3DX 11이 마이크로소프트 XNA와 같은 다른 개발 프레임워크들과 함께 구식화될 것이라고 발표했다. 셰이더 효과, 텍스처 관리, 지오메트리 최적화 및 메시 모델은 깃허브를 통해 게시되는 별도의 소스로 제공된다. D3DX의 수학적 구성 요소인 벡터와 행렬은 XNAMath와 통합되어 DirectXMath가 되었으며, 구면 조화 함수 수학은 별도의 소스로 제공된다.
D3DX 라이브러리는 COM 객체 지향 프로그래밍 모델을 따른다. 기능은 C++ 스타일의 인터페이스를 통해 접근한다.
ID3DXEffect 인터페이스는 FX 셰이더(.fx)를 컴파일하고 바인딩하는 데 사용된다. 이는 명명된 셰이더 파라미터의 하드웨어 상수 레지스터 자동 매핑, 파라미터 풀, 사용 가능한 샘플러에 대한 텍스처 매핑, '테크닉' 지정, 렌더 상태 수정 등을 지원한다. FX 이펙트 파일은 렌더링 상태, 텍스처 상태, 셰이더 및 파라미터를 하나 이상의 테크닉으로 묶은 Direct3D 상태에 대한 텍스트 설명이다. 각 테크닉은 하나 이상의 패스를 포함할 수 있어, 애플리케이션이 런타임에 대상 하드웨어에 가장 적합한 구현을 선택할 수 있게 한다.
ID3DXFont 인터페이스는 2D 텍스트를 그리는 데 사용할 수 있다. 텍스트의 3D 메시를 생성하는 D3DXCreateText도 같이 보기 바란다.
ID3DXLine 인터페이스는 패턴이 적용된 안티앨리어싱된 화면 공간 선을 그리는 데 사용할 수 있다.
ID3DXMesh 인터페이스는 메시 저장 및 버텍스 캐시 효율성과 스트립 재정렬을 위한 메시 최적화에 사용된다. D3DX의 일부 함수는 이 인터페이스에서 작동한다. 예를 들어 D3DXComputeTangentFrame은 노멀 매핑이나 패럴랙스 매핑과 같은 효과를 위한 탄젠트 공간 프레임을 생성한다. 이 클래스의 하위 클래스인 ID3DXPMesh는 지오메트리 단순화를 수행할 수 있다.
이 인터페이스는 사전 계산된 복사 전송에 사용된다. 이는 사전 계산된 전역 조명 및 부드러운 주변광 처리에 사용되는 구면 조화 함수 조명과 유사한 기술이다. 해당 메서드는 일반적으로 버텍스당 또는 텍셀당 전송 벡터를 사전 계산하기 위해 오프라인에서 사용되었으며, 마이크로소프트는 이후 PRT 시뮬레이터가 레거시 D3DX9에서만 사용 가능하다고 언급했다.
ID3DXSprite 인터페이스는 컴퓨터 그래픽스에서 스프라이트라고 불리는 2D 이미지를 화면에 그리는 데 사용되는 C++ 클래스이다. DirectX 7에서는 일반적으로 다이렉트드로 API를 사용했으나, 이는 현재 구식화되었다.
프로그래머는 일반적으로 ID3DXSprite 객체의 Begin() 메서드를 호출하여 2D 드로잉을 위한 렌더 상태 및 월드 변환을 설정하고, Draw() 메서드를 호출하여 그려질 텍스처 목록을 추가한 다음, 마지막으로 End() 메서드를 호출하여 이미지를 화면에 그리고 원래 그래픽 상태를 복원한다.
D3DXSprite에 대한 일반적인 비판은 속도가 느리다는 것이었으나, 이 문제는 Direct3D 9에서 해결되었다.
이 함수는 노멀/범프 매핑, 패럴랙스 매핑 및 이방성 조명 모델과 같은 효과에 사용되는 메시의 탄젠트 공간 프레임을 계산한다. 탄젠트 공간 불연속 지점에서의 버텍스를 복제하여 처리함으로써 헤어리 볼 문제를 해결한다. 면의 UV 와인딩 반전을 처리하지 못하므로, 미러링된 텍스처 매핑을 가진 모델은 이로 인해 조명 문제가 발생할 수 있다.
Direct3D 10을 위한 D3DX10 유틸리티 라이브러리는 기능 면에서 Direct3D 9용 D3DX와 유사하며, 동일한 D3DXMath 라이브러리와 블록 압축(BC1-BC5) 소프트웨어 코덱을 포함했다. 주요 차이점은 Direct3D 10용 이펙트가 OS 구성 요소가 되었고, HLSL 컴파일러가 별도의 D3DCompile DLL로 이동했으며, 텍스처 이미지 로드 및 저장 코드가 윈도우 이미징 컴포넌트를 활용했다는 점이다. WIC로의 전환에 따라, D3DX10은 D3DX에서 지원하던 트루비전 TGA, RGBE 이미지 포맷, 또는 Portable PixMap 파일 형식을 지원하지 않게 되었다. 또한 D3DX10에는 UVAtlas 아이소차트 텍스처 아틀라스 생성이나 사전 계산된 복사 전송 API가 포함되지 않았다.
마이크로소프트 문서에 따르면 모든 버전의 D3DX10은 구식화되었다.
Direct3D 11을 위한 D3DX11 유틸리티 라이브러리는 D3DX10의 축소판이었다. 이 라이브러리는 WIC를 사용하는 텍스처 이미지 로드 및 저장 코드와 블록 압축(BC1-BC7) 소프트웨어 코덱을 포함했으나, 그 외 기능은 거의 없었다.
마이크로소프트 문서에 따르면 모든 버전의 D3DX11은 구식화되었다.
D3DX9, D3DX10, D3DX11의 대부분 기능은 Direct3D 11 이상을 위한 오픈 소스 프로젝트인 DirectXMath, DirectX Tool Kit, DirectXTex, DirectXMesh, UVAtlas로 이전되었다. 또한 DXUT와 이펙트(FX11) 런타임의 오픈 소스 버전도 이용 가능하다. 이펙트 10과 달리 FX11은 DLL이 아닌 소스 형태로 배포되었으며, 마이크로소프트는 이를 기존 FX9/FX10 코드를 위한 포팅 도구라고 설명했다.
DLL 기반의 D3DX12 유틸리티 라이브러리는 존재하지 않는다. 하지만 마이크로소프트 문서에 기술된 Direct3D 12용 기본 도우미를 위한 D3DX12 유틸리티 헤더(모두 인라인 C++ 코드)가 존재하며 깃허브를 통해 게시되고 있다. 이 헤더에는 수학, 스프라이트, 폰트 렌더링, 3D 도형, 메시, 또는 텍스처 로딩과 같은 기능은 포함되어 있지 않다. 누락된 기능을 제공하는 Direct3D 12용 DirectX Tool Kit이 존재한다.