Création d’un projet DirectX holographique

Notes

Cet article concerne les API winRT natives héritées. Pour les nouveaux projets d’application native, nous vous recommandons d’utiliser l’API OpenXR.

Une application holographique que vous créez pour un HoloLens sera une application plateforme Windows universelle (UWP). Si vous ciblez des casques de bureau Windows Mixed Reality, vous pouvez créer une application UWP ou une application Win32.

Le modèle d’application UWP holographique DirectX 11 ressemble beaucoup au modèle d’application UWP DirectX 11. Le modèle inclut une boucle de programme, une classe DeviceResources pour gérer l’appareil et le contexte Direct3D, ainsi qu’une classe de convertisseur de contenu simplifiée. Il a également un IFrameworkView, comme n’importe quelle autre application UWP.

Toutefois, l’application de réalité mixte a des fonctionnalités supplémentaires qui ne sont pas présentes dans une application UWP Direct3D classique. Le modèle d’application Windows Mixed Reality peut :

  • Gérer les ressources d’appareil Direct3D associées aux caméras holographiques.
  • Récupérez les mémoires tampons de la caméra à partir du système. Dans le cas de Direct3D12, créez des ressources de mémoire tampon d’arrière-mémoire holographique et gérez les durées de vie des ressources.
  • Gérez l’entrée du regard et reconnaissez un mouvement.
  • Passez en mode de rendu stéréo plein écran.

Comment faire pour démarrer ?

Commencez par installer les outils, en suivant les instructions sur le téléchargement de Visual Studio 2019 et des modèles d’application Windows Mixed Reality. Les modèles d’application de réalité mixte sont disponibles sur la Place de marché Visual Studio en tant que téléchargement web ou en les installant en tant qu’extension via l’interface utilisateur de Visual Studio.

Vous êtes maintenant prêt à créer votre application DirectX 11 Windows Mixed Reality ! Notez que pour supprimer l’exemple de contenu, commentez la directive de préprocesseur DRAW_SAMPLE_CONTENT dans pch.h.

Création d’un projet UWP

Une fois les outils installés, vous pouvez créer un projet UWP DirectX holographique.

Pour créer un projet dans Visual Studio 2019 :

  1. Démarrez Visual Studio.
  2. Dans la section Prise en main à droite, sélectionnez Créer un projet.
  3. Dans les menus déroulants de la boîte de dialogue Créer un projet, sélectionnez C++, Windows Mixed Reality et UWP.
  4. Sélectionnez Application Holographique DirectX 11 (Windows universel) (C++/WinRT). Capture d’écran du modèle de projet d’application UWP Holographic DirectX 11 C++/WinRT dans Visual Studio 2019
    Modèle de projet d’application Holographic DirectX 11 C++/WinRT UWP dans Visual Studio 2019

    Important

    Assurez-vous que le nom du modèle de projet inclut « (C++/WinRT) ». Si ce n’est pas le cas, une version antérieure des modèles de projet holographique est installée. Pour obtenir les derniers modèles de projet, installez-les en tant qu’extension de Visual Studio 2019.

  5. Sélectionnez Suivant.
  6. Renseignez les zones de texte Nom du projet et Emplacement , puis sélectionnez ou appuyez sur Créer. Le projet d’application holographique est créé.
  7. Pour le ciblage de développement uniquement HoloLens 2, vérifiez que la version cible et la version minimale sont définies sur Windows 10, version 1903. Si vous ciblez également des casques HoloLens (1ère génération) ou Windows Mixed Reality de bureau, vous pouvez définir Version minimalesur Windows 10, version 1809. Cela nécessite des vérifications adaptatives de version dans votre code lors de l’utilisation de nouvelles fonctionnalités de HoloLens 2. Capture d’écran de la définition de Windows 10, version 1903 comme version cible et minimale
    Définition de Windows 10, version 1903 comme version cible et minimale

    Important

    Si vous ne voyez pas Windows 10, version 1903 en tant qu’option, vous n’avez pas installé la dernière Windows 10 SDK. Pour que cette option s’affiche, installez la version 10.0.18362.0 ou ultérieure du SDK Windows 10.

Pour créer un projet dans Visual Studio 2017 :

  1. Démarrez Visual Studio.
  2. Dans le menu Fichier , pointez sur Nouveau , puis sélectionnez Projet dans le menu contextuel. La boîte de dialogue Nouveau projet s’affiche.
  3. Développez Installé sur la gauche et développez le nœud de langage Visual C++ .
  4. Accédez au nœud Holographique universel > Windows et sélectionnez Application Holographique DirectX 11 (Windows universel) (C++/WinRT). Capture d’écran du modèle de projet d’application UWP Holographic DirectX 11 C++/WinRT dans Visual Studio 2017
    Modèle de projet d’application Holographic DirectX 11 C++/WinRT UWP dans Visual Studio 2017

    Important

    Assurez-vous que le nom du modèle de projet inclut « (C++/WinRT) ». Si ce n’est pas le cas, une version antérieure des modèles de projet holographique est installée. Pour obtenir les derniers modèles de projet, installez-les en tant qu’extension de Visual Studio 2017.

  5. Renseignez les zones de texte Nom et Emplacement , puis sélectionnez ou appuyez sur OK. Le projet d’application holographique est créé.
  6. Pour le ciblage de développement uniquement HoloLens 2, vérifiez que la version cible et la version minimale sont définies sur Windows 10, version 1903. Si vous ciblez également des casques HoloLens (1ère génération) ou Windows Mixed Reality de bureau, vous pouvez définir Version minimalesur Windows 10, version 1809. Cela nécessite des vérifications adaptatives de version dans votre code lors de l’utilisation de nouvelles fonctionnalités de HoloLens 2. Capture d’écran de la définition de Windows 10, version 1903 comme version cible et minimale
    Définition de Windows 10, version 1903 comme version cible et minimale

    Important

    Si vous ne voyez pas Windows 10, version 1903 en tant qu’option, vous n’avez pas installé la dernière Windows 10 SDK. Pour que cette option s’affiche, installez la version 10.0.18362.0 ou ultérieure du SDK Windows 10.

Le modèle génère un projet à l’aide de C++/WinRT, une projection en langage C++17 des API Windows Runtime qui prend en charge tout compilateur C++17 conforme aux normes. Le projet montre comment créer un cube verrouillé dans le monde qui est placé à 2 mètres de l’utilisateur. L’utilisateur peut appuyer sur un bouton du contrôleur pour placer le cube à une position différente spécifiée par le regard de l’utilisateur. Vous pouvez modifier ce projet pour créer n’importe quelle application de réalité mixte.

Vous pouvez également créer un projet à l’aide du modèle de projet holographique Visual C# , qui est basé sur SharpDX. Si votre projet C# holographique n’a pas démarré à partir du modèle d’application Holographique Windows, vous devez copier le fichier ms.fxcompile.targets à partir d’un projet de modèle C# Windows Mixed Reality et l’importer dans votre fichier.csproj pour compiler les fichiers HLSL que vous ajoutez à votre projet. Un modèle Direct3D 12 est également fourni dans l’extension Windows Mixed Reality modèles d’application de Visual Studio.

Consultez Utilisation de Visual Studio pour déployer et déboguer pour plus d’informations sur la création et le déploiement de l’exemple sur votre HoloLens, votre PC avec un appareil immersif attaché ou un émulateur.

Le reste des instructions ci-dessous suppose que vous utilisez C++ pour générer votre application.

Point d’entrée de l’application UWP

Votre application UWP holographique démarre dans la fonction wWinMain dans AppView.cpp. La fonction wWinMain crée le IFrameworkView de l’application et démarre l’application CoreApplication avec celle-ci.

À partir d’AppView.cpp :

// The main function bootstraps into the IFrameworkView.
int __stdcall wWinMain(HINSTANCE, HINSTANCE, PWSTR, int)
{
    winrt::init_apartment();
    CoreApplication::Run(AppViewSource());
    return 0;
}

À partir de ce point, la classe AppView gère l’interaction avec les événements d’entrée de base Windows, les événements CoreWindow et la messagerie, etc. Il crée également l’HolographicSpace utilisé par votre application.

Création d’un projet Win32

Le moyen le plus simple de commencer à créer un projet holographique Win32 consiste à adapter l’exemple BasicHologram Win32.

Cet exemple Win32 utilise C++/WinRT, une projection de langage C++17 des API Windows Runtime qui prend en charge tout compilateur C++17 conforme aux normes. Le projet montre comment créer un cube verrouillé dans le monde qui est placé à 2 mètres de l’utilisateur. L’utilisateur peut appuyer sur un bouton du contrôleur pour placer le cube à une autre position spécifiée par le regard de l’utilisateur. Vous pouvez modifier ce projet pour créer n’importe quelle application de réalité mixte.

Point d’entrée de l’application Win32

Votre application Win32 holographique démarre dans la fonction wWinMain dans AppMain.cpp. La fonction wWinMain crée le HWND de l’application et démarre sa boucle de message.

À partir d’AppMain.cpp :

int APIENTRY wWinMain(
    _In_     HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_     LPWSTR    lpCmdLine,
    _In_     int       nCmdShow)
{
    UNREFERENCED_PARAMETER(hPrevInstance);
    UNREFERENCED_PARAMETER(lpCmdLine);

    winrt::init_apartment();

    App app;

    // Initialize global strings, and perform application initialization.
    app.Initialize(hInstance);

    // Create the HWND and the HolographicSpace.
    app.CreateWindowAndHolographicSpace(hInstance, nCmdShow);

    // Main message loop:
    app.Run(hInstance);

    // Perform application teardown.
    app.Uninitialize();

    return 0;
}

À partir de ce point, la classe AppMain gère l’interaction avec les messages de fenêtre de base, etc. Il crée également l’HolographicSpace utilisé par votre application.

Afficher le contenu holographique

Le dossier Content du projet contient des classes pour le rendu des hologrammes dans l’espace holographique. L’hologramme par défaut dans le modèle est un cube en rotation placé à 2 mètres de l’utilisateur. Le dessin de ce cube est implémenté dans SpinningCubeRenderer.cpp, qui possède les méthodes clés suivantes :

Méthode Explication
CreateDeviceDependentResources Charge les nuanceurs et crée le maillage de cube.
PositionHologram Place l’hologramme à l’emplacement spécifié par le SpatialPointerPose fourni.
Update Fait pivoter le cube et définit la matrice du modèle.
Render Restitue un cadre à l’aide des nuanceurs de vertex et de pixels.

Le sous-dossier Nuanceurs contient quatre implémentations de nuanceur par défaut :

Nuanceur Explication
GeometryShader.hlsl Pass-through qui laisse la géométrie non modifiée.
PixelShader.hlsl Traverse les données de couleur. Les données de couleur sont interpolées et affectées à un pixel à l’étape de rastérisation.
VertexShader.hlsl Nuanceur simple pour effectuer un traitement de vertex sur le GPU.
VPRTVertexShader.hlsl Nuanceur simple pour effectuer un traitement de vertex sur le GPU, optimisé pour Windows Mixed Reality rendu stéréo.

VertexShaderShared.hlsl contient du code commun partagé entre VertexShader.hlsl et VPRTVertexShader.hlsl.

Remarque : Le modèle d’application Direct3D 12 inclut ViewInstancingVertexShader.hlslégalement . Cette variante utilise des fonctionnalités facultatives D3D12 pour rendre les images stéréo plus efficacement.

Les nuanceurs se compilent lorsque le projet est généré et chargé dans la méthode SpinningCubeRenderer::CreateDeviceDependentResources .

Interagir avec vos hologrammes

L’entrée utilisateur est traitée dans la classe SpatialInputHandler, qui obtient un instance SpatialInteractionManager et s’abonne à l’événement SourcePressed. Cela permet de détecter le mouvement d’appui aérien et d’autres événements d’entrée spatiale.

Mettre à jour le contenu holographique

Votre application de réalité mixte se met à jour dans une boucle de jeu, qui est implémentée par défaut dans la méthode Update dans AppMain.cpp. La méthode Update met à jour les objets de scène, comme le cube en rotation, et retourne un objet HolographicFrame qui est utilisé pour obtenir des matrices de projection et d’affichage à jour et pour présenter la chaîne d’échange.

La méthode Render dans AppMain.cpp prend l’HolographicFrame et restitue l’image actuelle sur chaque caméra holographique, en fonction de l’application actuelle et de l’état de positionnement spatial.

Notes

Le modèle d’application Windows Mixed Reality prend désormais en charge la compilation avec l’indicateur d’atténuation Spectre activé (/Qspectre). Veillez à installer la version atténuée de Spectre des bibliothèques du runtime Microsoft Visual C++ (MSVC) avant de compiler une configuration avec l’atténuation de Spectre activée. Pour installer les bibliothèques C++ atténuées par Spectre, lancez la Visual Studio Installer et sélectionnez Modifier. Accédez à Composants individuels et recherchez « spectre ». Sélectionnez les zones correspondant aux plateformes cibles et à la version DE MSVC pour lesquelles vous devez compiler le code atténué par Spectre, puis cliquez sur Modifier pour commencer l’installation.

Voir aussi