Création d’un projet DirectX holographique

Notes

Cet article concerne les API natives WinRT héritées. Pour les nouveaux projets d’application natifs, 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 renderer 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érez les ressources d’appareil Direct3D associées aux caméras holographiques.
  • Récupérez les mémoires tampons de l’appareil photo à partir du système. Dans le cas de Direct3D12, créez des ressources de mémoire tampon arrière 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 ?

Tout d’abord, installez les outils en suivant les instructions sur le téléchargement Visual Studio 2019 et les 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 Visual Studio.

Vous êtes maintenant prêt à créer votre application Windows Mixed Reality DirectX 11 ! 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 Holographique DirectX.

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 l’application Holographic DirectX 11 (universal Windows) (C++/WinRT). Screenshot of the Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2019
    Modèle de projet d’application UWP Holographic DirectX 11 C++/WinRT 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, vous disposez d’une version antérieure des modèles de projet holographiques installés. Pour obtenir les derniers modèles de projet, installez-les en tant qu’extension pour Visual Studio 2019.

  5. Sélectionnez Suivant.
  6. Renseignez le nom Project et les zones de texte 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 de bureau Windows Mixed Reality, vous pouvez définir la version minimale sur 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. Screenshot of setting Windows 10, version 1903 as the target and minimum versions
    Définition de Windows 10, version 1903 en tant que versions cibles et minimales

    Important

    Si vous ne voyez pas Windows 10, version 1903 comme option, vous n’avez pas installé la dernière Windows 10 SDK. Pour que cette option apparaisse, 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 et sélectionnez Project 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). Screenshot of the Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2017
    Modèle de projet d’application UWP Holographic DirectX 11 C++/WinRT 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, vous disposez d’une version antérieure des modèles de projet holographiques installés. Pour obtenir les derniers modèles de projet, installez-les en tant qu’extension pour 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 de bureau Windows Mixed Reality, vous pouvez définir la version minimale sur 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. Screenshot of setting Windows 10, version 1903 as the target and minimum versions
    Définition de Windows 10, version 1903 en tant que versions cibles et minimales

    Important

    Si vous ne voyez pas Windows 10, version 1903 comme option, vous n’avez pas installé la dernière Windows 10 SDK. Pour que cette option apparaisse, 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 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 l’air ou appuyer sur un bouton sur le contrôleur pour placer le cube dans 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# , basé sur SharpDX. Si votre projet C# holographique ne démarre pas à 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 de modèles d’application Windows Mixed Reality pour Visual Studio.

Passez en revue l’utilisation de Visual Studio pour déployer et déboguer des informations sur la création et le déploiement de l’exemple sur votre HoloLens, pc avec appareil immersif attaché ou un émulateur.

Les autres instructions ci-dessous supposent que vous utilisez C++ pour générer votre application.

Point d’entrée d’application UWP

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

À 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 là, la classe AppView gère l’interaction avec Windows événements d’entrée de base, les événements CoreWindow et la messagerie, et ainsi de suite. 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 sur le contrôleur pour placer le cube dans 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.

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 là, la classe AppMain gère l’interaction avec les messages de fenêtre de base, et ainsi de suite. Il crée également l’HolographicSpace utilisé par votre application.

Afficher le contenu holographique

Le dossier Contenu 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 a 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 Affiche un cadre à l’aide des nuanceurs de vertex et de pixels.

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

Nuanceur Explication
GeometryShader.hlsl Passage qui laisse la géométrie non modifiée.
PixelShader.hlsl Passe à travers 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 le traitement de vertex sur le GPU.
VPRTVertexShader.hlsl Nuanceur simple pour effectuer le traitement de vertex sur le GPU, optimisé pour Windows Mixed Reality rendu stéréo.

VertexShaderShared.hlsl contient le 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 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 une instance SpatialInteractionManager et s’abonne à l’événement SourcePressed . Cela permet de détecter le mouvement d’air-tap et d’autres événements d’entrée spatiale.

Mettre à jour le contenu holographique

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

La méthode Render prend AppMain.cppholographicFrame et affiche le cadre actuel sur chaque caméra holographique, selon l’application actuelle et 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 d’exécution Microsoft Visual C++ (MSVC) avant de compiler une configuration avec l’atténuation spectre activée. Pour installer les bibliothèques C++ atténuées par Spectre, lancez le Visual Studio Installer et sélectionnez Modifier. Accédez aux composants individuels et recherchez « spectre ». Sélectionnez les zones correspondant aux plateformes cibles et MSVC version pour laquelle vous devez compiler du code atténué par Spectre, puis cliquez sur Modifier pour commencer l’installation.

Voir aussi