Affichage 3D avec Qt 3D
Niveau : avancé
Objectifs : intégrer des éléments 3D dans une application Qt Quick
Prérequis : Premiers pas avec Qt Quick, Présentation de JavaScript
L'idée d'introduire des éléments 3D simples à utiliser n'est pas neuve dans l'écosystème
Qt, mais il a fallu attendre Qt 5.6 pour sa réalisation : Qt 3D. Il s'agit d'un moteur 3D
complet et facile d'emploi : inutile d'apprendre à se servir d'OpenGL ou de DirectX
pour intégrer une scène 3D dans une application. Globalement, Qt 3D est capable
d'afficher une scène, composée d'une série de formes, la partie visible à l'utilisateur
étant définie par une caméra.
Note > Cette organisation est similaire à celle de Graphics View ; par exemple, on
peut définir plusieurs caméras pour une même scène et ainsi montrer simultanément
à l'utilisateur plusieurs vues.
Cependant, Qt 3D peut faire bien plus que tout ça : du rendu 2D, le stockage de la
géométrie d'objets, le rendu avec des matériaux et des shaders… sans oublier une
pléthore d'effets (occlusion ambiante, rendu à haute plage dynamique, rendu différé,
utilisation de plusieurs textures pour un même polygone, instanciation, UBO, pour le
moment). Le moteur est aussi prévu pour l'extensibilité : l'implémentation de toute
nouvelle technique de rendu doit être aisée ; à cette fin, la scène à afficher est
représentée à l'aide d'un graphe de trame (similaire au graphe de scène utilisé par
Qt Quick). Tout est prévu dans Qt 3D pour réaliser des applications 3D, qu'elles soient
simples ou complexes (comme un jeu vidéo complet).
De manière générale, Qt 3D se veut extensible : même si ces fonctionnalités ne sont
pas prévues de base, il est possible d'implémenter un moteur physique, une détection de
collision, de l'intelligence artificielle (par exemple, pour un jeu, un calcul de chemin),
de l'audio 3D, la détermination de l'objet sélectionné par l'utilisateur à la souris, etc.
Pour y arriver, toute la conception du moteur s'est orientée autour des concepts d'entité
et de composant.
Pour rester à la pointe niveau performance, c'est-à-dire exploiter au mieux les cœurs
disponibles sur la machine, Qt 3D décompose les calculs à effectuer en tâches, qui
448
Niveau : avancé
Objectifs : intégrer des éléments 3D dans une application Qt Quick
Prérequis : Premiers pas avec Qt Quick, Présentation de JavaScript
L'idée d'introduire des éléments 3D simples à utiliser n'est pas neuve dans l'écosystème
Qt, mais il a fallu attendre Qt 5.6 pour sa réalisation : Qt 3D. Il s'agit d'un moteur 3D
complet et facile d'emploi : inutile d'apprendre à se servir d'OpenGL ou de DirectX
pour intégrer une scène 3D dans une application. Globalement, Qt 3D est capable
d'afficher une scène, composée d'une série de formes, la partie visible à l'utilisateur
étant définie par une caméra.
Note > Cette organisation est similaire à celle de Graphics View ; par exemple, on
peut définir plusieurs caméras pour une même scène et ainsi montrer simultanément
à l'utilisateur plusieurs vues.
Cependant, Qt 3D peut faire bien plus que tout ça : du rendu 2D, le stockage de la
géométrie d'objets, le rendu avec des matériaux et des shaders… sans oublier une
pléthore d'effets (occlusion ambiante, rendu à haute plage dynamique, rendu différé,
utilisation de plusieurs textures pour un même polygone, instanciation, UBO, pour le
moment). Le moteur est aussi prévu pour l'extensibilité : l'implémentation de toute
nouvelle technique de rendu doit être aisée ; à cette fin, la scène à afficher est
représentée à l'aide d'un graphe de trame (similaire au graphe de scène utilisé par
Qt Quick). Tout est prévu dans Qt 3D pour réaliser des applications 3D, qu'elles soient
simples ou complexes (comme un jeu vidéo complet).
De manière générale, Qt 3D se veut extensible : même si ces fonctionnalités ne sont
pas prévues de base, il est possible d'implémenter un moteur physique, une détection de
collision, de l'intelligence artificielle (par exemple, pour un jeu, un calcul de chemin),
de l'audio 3D, la détermination de l'objet sélectionné par l'utilisateur à la souris, etc.
Pour y arriver, toute la conception du moteur s'est orientée autour des concepts d'entité
et de composant.
Pour rester à la pointe niveau performance, c'est-à-dire exploiter au mieux les cœurs
disponibles sur la machine, Qt 3D décompose les calculs à effectuer en tâches, qui
448
