# Direct3D

Direct3D est une bibliothèque logicielle de la série Microsoft DirectX. Direct3D est utilisé uniquement dans les multiples systèmes d'exploitation Windows de Microsoft (Windows 95 et au-delà), ainsi que dans la Xbox. Direct3D sert à créer des graphismes en trois dimensions pour les applications où la performance est importante, comme les jeux vidéo. Direct3D permet également à des applications de fonctionner en plein écran, plutôt qu'intégrées dans une fenêtre, bien qu'elles puissent toujours tourner dans une fenêtre si elles sont programmées pour cette utilisation. Direct3D utilise l'accélération matérielle si elle est disponible à travers une carte graphique.
Direct3D est une API 3D. C'est-à-dire qu'elle contient un grand nombre d'instructions pour l'affichage 3D, et très peu pour l'affichage 2D. Microsoft effectue des mises à jour continuelles de Direct3D pour permettre l'exploitation des dernières technologies disponibles sur les cartes graphiques 3D. Direct3D fournit une émulation logicielle complète pour les calculs concernant les sommets (vertex en anglais), mais aucune émulation logicielle pour les calculs concernant les pixels pour les fonctionnalités non disponibles au niveau matériel. Par exemple, si un logiciel programmé avec Direct3D nécessite des pixel shaders et que la carte graphique de l'ordinateur de l'utilisateur ne fournit pas cette fonctionnalité, Direct3D ne l'émulera pas. En conséquence, le programme s'arrêtera probablement avec un message d'erreur.
Les concurrents de Direct3D sont les bibliothèques respectant le standard OpenGL. Il y a de nombreuses fonctionnalités et problèmes sur lesquels les partisans de l'une ou l'autre API sont en désaccord.

## Historique des versions
### Version 3

Direct3D a été introduit avec la version 3.0 de DirectX. À l'origine il s'agissait principalement d'un moteur de rendu du type scene graph plutôt haut niveau avec une accélération logicielle performante, accompagnée d'une base très bas niveau basée sur les execute buffers. Aucune des deux n'a vraiment trouvé son public auprès des développeurs qui soit préféraient écrire leur propre gestion de scène adaptée à leur jeu ou héritée de leur moteur logiciel de 3D, soit trouvaient les execute buffers plutôt abscons.

### Version 5

La version 4.0 de DirectX n'a pas été publiée, laissant place directement à la version 5.
Direct3D 5.0 a apporté un "maquillage" des execute buffers qui a été très décrié, sous forme de commandes de tracé de primitives (drawprimitive) qui semblaient plus rationnelles pour le programmeur lambda.

### Version 6

Direct3D 6.0 était une amélioration de Direct3D 5 avec des nouveaux concepts comme le multitexturing (qui avait d'abord fait son apparition dans OpenGL et utilisé par des jeux comme Quake II) ou encore l'environnement bump mapping. Les formats de texture compressés inventés par S3 (S3TC (en)) ont été intégrés dans Direct3D et adoptés par tous les fondeurs de CPU 3D.

### Version 7

Dans la version 7.0 de Direct3D, un format de texture spécifique (DirectDraw Surface) a été introduit. La version est également la première version de Direct3D à supporter les fonctions matérielles de transform and lighting des nouvelles cartes graphiques GeForce 256 (la notion de accelerated transform and lighting existait depuis longtemps dans les stations de travail graphiques qui utilisaient par exemple la version professionnelle de OpenGL). D'autres notions ont fait leur apparition comme le cubemapping (permettant de simuler les réflexions d'éléments sphériques).

### Version 8

Si Direct3D a longtemps été considéré comme difficile à utiliser, la version 8.0 de DirectX a résolu beaucoup de problèmes d'utilisation que redoutaient les programmeurs et elle est rapidement devenue une API de choix pour le développement de jeux sous Windows (OpenGL conservant son monopole sur les autres plateformes). Direct3D 8 contenait beaucoup de fonctionnalités très puissantes pour l'affichage 3D, comme les vertex shaders, les pixel shaders. Cette version a également inclus dans la bibliothèque de programmation de base pour la console Xbox, qui incluait la GeForce 3, la première puce graphique à implémenter matériellement les pixels et vertex shaders.

### Version 9

A la sortie de la version 9.0 de DirectX, Direct3D a été intégré dans un composant logiciel appelé Direct Graphics. Direct Graphics était supposé être une combinaison de DirectDraw et de Direct3D, mais n'était en réalité que Direct3D avec quelques fonctionnalités de DirectDraw en plus. La plupart des utilisateurs se réfèrent toujours à Direct Graphics en l'appelant Direct3D. Ce nom a été abandonné quelque temps après son introduction par Microsoft.
La version 9.0 de Direct3D a ajouté une nouvelle version du High-Level Shading Language, avec le soutien du High dynamic range lighting grâce à une précision des shaders accrue et des formats de texture en virgule flottante. Il a introduit également la possibilité d'utiliser plusieurs surfaces de rendu simultanées (MRT), et l'indexation des sommets (index buffers).

### Version 10

La version 10 représente une importante fracture avec les anciens modèles, en abandonnant la compatibilité avec les anciennes versions, reposant principalement sur la simplicité de programmation et apportant un lot important de nouvelles fonctionnalités comme les geometry shaders et un meilleur instancing. Cette version de Direct3D n'est disponible et compatible qu'avec Windows Vista.

### Version 11

La version 11 a été annoncée pour 2009. La Release Candidate de Windows 7 intègre un soutien de D3D 11. D3D 11 apporte un soutien de la tessellation, du rendu par processus léger, et des compute shader concurrençant le CUDA de Nvidia, l'ATI Stream et l'OpenCL.

### Version 12

La version 12 a été annoncée par Microsoft en 2014.

## Outils en relation

DirectX est fourni avec D3DX, une bibliothèque d'outils conçue pour effectuer les calculs mathématiques courants et plusieurs tâches plus compliquées, telles que la compilation ou l'assemblage de textures utilisés pour la programmation 3D graphique. Il inclut également plusieurs classes qui simplifient l'utilisation de modèles 3D et, par exemple, les systèmes de particules. D3DX est fourni comme une bibliothèque de lien dynamique (DLL) ou comme une bibliothèque statique (c'est-à-dire incluse dans l'exécutable).
DXUT (également appelé en anglais sample framework) est une couche établie par-dessus l'API Direct3D. Cette couche est conçue pour aider le programmeur à passer moins de temps avec des tâches répétitives, telles que créer une fenêtre, créer un device, traiter les messages de Windows et manipuler les événements du device.