Création d’un projet DirectX holographiqueCreating a holographic DirectX project

Notes

Cet article s’applique aux API natives WinRT héritées.This article relates to the legacy WinRT native APIs. Pour les nouveaux projets d’application native, nous vous recommandons d’utiliser l' API OpenXR.For new native app projects, we recommend using the OpenXR API.

Une application holographique que vous créez pour un HoloLens sera une application plateforme Windows universelle (UWP).A holographic app you create for a HoloLens will be a Universal Windows Platform (UWP) app. Si vous ciblez des casques Windows mixtes de la réalité du bureau, vous pouvez créer une application UWP ou une application Win32.If targeting desktop Windows Mixed Reality headsets, you can create a UWP app or a Win32 app.

Le modèle application UWP holographique DirectX 11 ressemble davantage au modèle application UWP DirectX 11.The DirectX 11 holographic UWP app template is much like the DirectX 11 UWP app template. Le modèle comprend une boucle de programme, une classe DeviceResources pour gérer le périphérique et le contexte Direct3D et une classe de convertisseur de contenu simplifiée.The template includes a program loop, a DeviceResources class to manage the Direct3D device and context, and a simplified content renderer class. Il possède également un IFrameworkView, comme n’importe quelle autre application UWP.It also has an IFrameworkView, just like any other UWP app.

Toutefois, l’application de réalité mixte possède des fonctionnalités supplémentaires qui ne sont pas présentes dans une application standard Direct3D UWP.The mixed reality app, however, has some additional capabilities that aren't present in a typical Direct3D UWP app. Le modèle d’application Windows Mixed Reality peut :The Windows Mixed Reality app template can:

  • Gérer les ressources d’appareil Direct3D associées aux appareils photo holographiques.Handle Direct3D device resources associated with holographic cameras.
  • Récupérez les mémoires tampons d’arrière-plan de l’appareil photo.Retrieve camera back buffers from the system. Dans le cas de directement Direct3D 12, créez des ressources de mémoire tampon d’arrière-plan holographique et gérez les durées de vie des ressources.In the case of Direct3D12, create holographic back buffer resources and manage resource lifetimes.
  • Gérer les entrées de regard et reconnaître un geste.Handle gaze input, and recognize a gesture.
  • Passez en mode de rendu stéréo plein écran.Go into full-screen stereo rendering mode.

Comment faire pour démarrer ?How do I get started?

Installez d’abord les outilsen suivant les instructions de téléchargement de Visual Studio 2019 et des modèles d’application Windows Mixed Reality.First install the tools, following the instructions on downloading Visual Studio 2019 and the Windows Mixed Reality app templates. 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 par le biais de l’interface utilisateur de Visual Studio.The mixed reality app templates are available on the Visual Studio marketplace as a web download, or by installing them as an extension through the Visual Studio UI.

Vous êtes maintenant prêt à créer votre application DirectX 11 Windows Mixed Reality !Now you're ready to create your DirectX 11 Windows Mixed Reality app! Remarque : pour supprimer l’exemple de contenu, commentez la directive de préprocesseur DRAW_SAMPLE_CONTENT dans pch. h.Note, to remove the sample content, comment out the DRAW_SAMPLE_CONTENT preprocessor directive in pch.h.

Création d’un projet UWPCreating a UWP project

Une fois les outils installés,] (.. /install-the-tools.md) vous pouvez ensuite créer un projet UWP DirectX UWP.Once the tools are installed,](../install-the-tools.md) you can then create a holographic DirectX UWP project.

Pour créer un nouveau projet dans Visual Studio 2019 :To create a new project in Visual Studio 2019:

  1. Démarrez Visual Studio.Start Visual Studio.
  2. Dans la section prise en main sur la droite, sélectionnez créer un nouveau projet.In the Get Started section on the right, select Create a new project.
  3. Dans les menus déroulants de la boîte de dialogue créer un nouveau projet , sélectionnez C++, Windows Mixed Reality et UWP.In the drop-down menus in the Create a new project dialog, select C++, Windows Mixed Reality, and UWP.
  4. Sélectionnez application holographique DirectX 11 (Windows universel) (C++/WinRT).Select Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Capture d’écran du modèle de projet d’application UWP DirectX 11 C++/WinRT dans Visual Studio 2019Screenshot of the Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2019
    Modèle de projet d’application UWP DirectX 11 C++/WinRT pour holographique dans Visual Studio 2019Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2019

    Important

    Assurez-vous que le nom du modèle de projet comprend « (C++/WinRT) ».Be sure that the project template's name includes "(C++/WinRT)". Si ce n’est pas le cas, une version antérieure des modèles de projet holographique est installée.If not, you have an older version of the holographic project templates installed. Pour accéder aux derniers modèles de projet, Installez-les en tant qu’extension de Visual Studio 2019.To get the latest project templates, install them as an extension to Visual Studio 2019.

  5. Sélectionnez Suivant.Select Next.
  6. Renseignez les zones de texte nom du projet et emplacement , puis sélectionnez créer.Fill in the Project name and Location text boxes, and select or tap Create. Le projet d’application holographique est créé.The holographic app project is created.
  7. Pour le développement ciblant uniquement HoloLens 2, assurez-vous que la version cible et la version minimale sont définies sur Windows 10, version 1903.For development targeting only HoloLens 2, ensure that the Target version and Minimum version are set to Windows 10, version 1903. Si vous ciblez également des casques HoloLens (1er génération) ou de bureau Windows Mixed Reality, vous pouvez définir la version minimale sur Windows 10, version 1809.If you're also targeting HoloLens (1st gen) or desktop Windows Mixed Reality headsets, you can set Minimum version to 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.This will require some version adaptive checks in your code when using new features of HoloLens 2. Capture d’écran de la configuration de Windows 10, version 1903 en tant que versions cible et minimaleScreenshot of setting Windows 10, version 1903 as the target and minimum versions
    Définition de Windows 10, version 1903 comme version cible et minimaleSetting Windows 10, version 1903 as the target and minimum versions

    Important

    Si vous ne voyez pas Windows 10, version 1903 , vous n’avez pas le dernier Kit de développement logiciel (SDK) Windows 10 installé.If you do not see Windows 10, version 1903 as an option, you do not have the latest Windows 10 SDK installed. Pour que cette option s’affiche, Installez la version 10.0.18362.0 ou ultérieure du kit de développement logiciel (SDK) Windows 10.To get this option to appear, install version 10.0.18362.0 or later of the Windows 10 SDK.

Pour créer un nouveau projet dans Visual Studio 2017 :To create a new project in Visual Studio 2017:

  1. Démarrez Visual Studio.Start Visual Studio.
  2. Dans le menu fichier , pointez sur nouveau , puis sélectionnez projet dans le menu contextuel.From the File menu, point to New and select Project from the context menu. La boîte de dialogue Nouveau projet s’affiche.The New Project dialog opens.
  3. Développez installé sur la gauche, puis développez le nœud Visual C++ Language.Expand Installed on the left and expand the Visual C++ language node.
  4. Accédez au nœud Windows Universal > holographique et sélectionnez application holographique DirectX 11 (Universal Windows) (C++/WinRT).Navigate to the Windows Universal > Holographic node and select Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Capture d’écran du modèle de projet d’application UWP DirectX 11 C++/WinRT dans Visual Studio 2017Screenshot of the Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2017
    Modèle de projet d’application UWP DirectX 11 C++/WinRT pour holographique dans Visual Studio 2017Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2017

    Important

    Assurez-vous que le nom du modèle de projet comprend « (C++/WinRT) ».Be sure that the project template's name includes "(C++/WinRT)". Si ce n’est pas le cas, une version antérieure des modèles de projet holographique est installée.If not, you have an older version of the holographic project templates installed. Pour accéder aux derniers modèles de projet, Installez-les en tant qu’extension de Visual Studio 2017.To get the latest project templates, install them as an extension to Visual Studio 2017.

  5. Renseignez les zones de texte nom et emplacement , puis sélectionnez ou appuyez sur OK.Fill in the Name and Location text boxes, and select or tap OK. Le projet d’application holographique est créé.The holographic app project is created.
  6. Pour le développement ciblant uniquement HoloLens 2, assurez-vous que la version cible et la version minimale sont définies sur Windows 10, version 1903.For development targeting only HoloLens 2, ensure that the Target version and Minimum version are set to Windows 10, version 1903. Si vous ciblez également des casques HoloLens (1er génération) ou de bureau Windows Mixed Reality, vous pouvez définir la version minimale sur Windows 10, version 1809.If you're also targeting HoloLens (1st gen) or desktop Windows Mixed Reality headsets, you can set Minimum version to 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.This will require some version adaptive checks in your code when using new features of HoloLens 2. Capture d’écran de la configuration de Windows 10, version 1903 en tant que versions cible et minimaleScreenshot of setting Windows 10, version 1903 as the target and minimum versions
    Définition de Windows 10, version 1903 comme version cible et minimaleSetting Windows 10, version 1903 as the target and minimum versions

    Important

    Si vous ne voyez pas Windows 10, version 1903 , vous n’avez pas le dernier Kit de développement logiciel (SDK) Windows 10 installé.If you do not see Windows 10, version 1903 as an option, you do not have the latest Windows 10 SDK installed. Pour que cette option s’affiche, Installez la version 10.0.18362.0 ou ultérieure du kit de développement logiciel (SDK) Windows 10.To get this option to appear, install version 10.0.18362.0 or later of the Windows 10 SDK.

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 tous les compilateurs c++ 17 conformes aux normes.The template generates a project using C++/WinRT, a C++17 language projection of the Windows Runtime APIs that supports any standards-compliant C++17 compiler. Le projet montre comment créer un cube universel qui est placé à 2 mètres de l’utilisateur.The project shows how to create a world-locked cube that's placed 2 meters from the user. L' utilisateur peut appuyer ou appuyer sur un bouton du contrôleur pour placer le cube dans une autre position spécifiée par le point de regardde l’utilisateur.The user can air-tap or press a button on the controller to place the cube in a different position specified by the user's gaze. Vous pouvez modifier ce projet pour créer une application de réalité mixte.You can modify this project to create any mixed reality app.

Vous pouvez également créer un nouveau projet à l’aide du modèle de projet holographique Visual C# , qui est basé sur SharpDX.You can also create a new project using the Visual C# holographic project template, which is based on 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.If your holographic C# project didn't start from the Windows Holographic app template, you'll need to copy the ms.fxcompile.targets file from a Windows Mixed Reality C# template project and import it in your.csproj file to compile HLSL files that you add to your project. Un modèle Direct3D 12 est également fourni dans l’extension des modèles d’application Windows Mixed Reality à Visual Studio.A Direct3D 12 template is also provided in the Windows Mixed Reality app templates extension to Visual Studio.

Consultez utilisation de Visual Studio pour déployer et déboguer pour plus d’informations sur la façon de créer et de déployer l’exemple dans votre HoloLens, votre PC avec un appareil immersif attaché ou un émulateur.Review Using Visual Studio to deploy and debug for information on how to build and deploy the sample to your HoloLens, PC with immersive device attached, or an emulator.

Le reste des instructions ci-dessous suppose que vous utilisez C++ pour créer votre application.The rest of the instructions below will assume that you're using C++ to build your app.

Point d’entrée de l’application UWPUWP app entry point

Votre application UWP holographique démarre dans la fonction wWinMain dans AppView. cpp.Your holographic UWP app starts in the wWinMain function in AppView.cpp. La fonction wWinMain crée le IFrameworkView de l’application et démarre le CoreApplication avec celle-ci.The wWinMain function creates the app's IFrameworkView and starts the CoreApplication with it.

À partir de AppView. cpp:From 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 les événements d’entrée Windows Basic, les événements CoreWindow et la messagerie, etc.From that point on, the AppView class handles interaction with Windows basic input events, CoreWindow events and messaging, and so on. Il créera également le HolographicSpace utilisé par votre application.It will also create the HolographicSpace used by your app.

Création d’un projet Win32Creating a Win32 project

Le moyen le plus simple de commencer à créer un projet holographique Win32 consiste à adapter l' exemple Win32 BasicHologram.The easiest way to get started building a Win32 holographic project is to adapt the BasicHologram Win32 sample.

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.This Win32 sample uses C++/WinRT, a C++17 language projection of the Windows Runtime APIs that supports any standards-compliant C++17 compiler. Le projet montre comment créer un cube universel qui est placé à 2 mètres de l’utilisateur.The project shows how to create a world-locked cube that's placed 2 meters from the user. L’utilisateur peut appuyer sur un bouton du contrôleur pour placer le cube à une position différente spécifiée par le regardde l’utilisateur.The user can press a button on the controller to place the cube in a different position that's specified by the user's gaze. Vous pouvez modifier ce projet pour créer une application de réalité mixte.You can modify this project to create any mixed reality app.

Point d’entrée de l’application Win32Win32 app entry point

Votre application holographique Win32 démarre dans la fonction wWinMain dans AppMain. cpp.Your holographic Win32 app starts in the wWinMain function in AppMain.cpp. La fonction wWinMain crée le HWND de l’application et démarre sa boucle de messages.The wWinMain function creates the app's HWND and starts its message loop.

À partir de AppMain. cpp:From 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.From that point on, the AppMain class handles interaction with basic window messages, and so on. Il créera également le HolographicSpace utilisé par votre application.It will also create the HolographicSpace used by your app.

Afficher le contenu holographiqueRender holographic content

Le dossier de contenu du projet contient des classes pour le rendu des hologrammes dans l' espace holographique.The project's Content folder contains classes for rendering holograms in the holographic space. L’hologramme par défaut dans le modèle est un cube à rotation qui est placé à 2 mètres de l’utilisateur.The default hologram in the template is a spinning cube that's placed 2 meters away from the user. Le dessin de ce cube est implémenté dans SpinningCubeRenderer. cpp, qui possède les principales méthodes suivantes :Drawing this cube is implemented in SpinningCubeRenderer.cpp, which has these key methods:

MéthodeMethod ExplicationExplanation
CreateDeviceDependentResources Charge les nuanceurs et crée la maille du cube.Loads shaders and creates the cube mesh.
PositionHologram Place l’hologramme à l’emplacement spécifié par le SpatialPointerPosefourni.Places the hologram at the location specified by the provided SpatialPointerPose.
Update Fait pivoter le cube et définit la matrice du modèle.Rotates the cube, and sets the model matrix.
Render Génère le rendu d’un frame à l’aide des nuanceurs vertex et de pixels.Renders a frame using the vertex and pixel shaders.

Le sous-dossier nuanciers contient quatre implémentations de nuanceur par défaut :The Shaders subfolder contains four default shader implementations:

NuanceurShader ExplicationExplanation
GeometryShader.hlsl Un transfert qui laisse la géométrie non modifiée.A pass-through that leaves the geometry unmodified.
PixelShader.hlsl Transmet les données de couleur.Passes through the color data. Les données de couleur sont interpolées et affectées à un pixel à l’étape de pixellisation.The color data is interpolated and assigned to a pixel at the rasterization step.
VertexShader.hlsl Nuanceur simple pour le traitement des vertex sur le GPU.Simple shader to do vertex processing on the GPU.
VPRTVertexShader.hlsl Nuanceur simple pour le traitement des vertex sur le GPU, qui est optimisé pour le rendu stéréo Windows Mixed Reality.Simple shader to do vertex processing on the GPU, that is optimized for Windows Mixed Reality stereo rendering.

VertexShaderShared.hlsl contient le code commun partagé entre VertexShader.hlsl et VPRTVertexShader.hlsl .VertexShaderShared.hlsl contains common code shared between VertexShader.hlsl and VPRTVertexShader.hlsl.

Remarque : le modèle d’application Direct3D 12 comprend également ViewInstancingVertexShader.hlsl .Note: The Direct3D 12 app template also includes ViewInstancingVertexShader.hlsl. Cette variante utilise des fonctionnalités facultatives D3D12 pour rendre les images stéréo plus efficaces.This variant uses D3D12 optional features to render stereo images more efficiently.

Les nuanceurs se compilent lorsque le projet est généré, puis chargés dans la méthode SpinningCubeRenderer :: CreateDeviceDependentResources .The shaders compile when the project is built, and loaded in the SpinningCubeRenderer::CreateDeviceDependentResources method.

Interagissez avec vos hologrammesInteract with your holograms

L’entrée utilisateur est traitée dans la classe SpatialInputHandler , qui obtient une instance SpatialInteractionManager et s’abonne à l’événement SourcePressed .User input is processed in the SpatialInputHandler class, which gets a SpatialInteractionManager instance and subscribes to the SourcePressed event. Cela permet de détecter le mouvement d’appui sur l’air et d’autres événements d’entrée spatiale.This enables detecting the air-tap gesture and other spatial input events.

Mettre à jour le contenu holographiqueUpdate holographic content

Votre application de réalité mixte est mise à jour dans une boucle de jeu, qui est implémentée par défaut dans la méthode de mise à jour dans AppMain.cpp .Your mixed reality app updates in a game loop, which by default is implemented in the Update method in 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 de permutation.The Update method updates scene objects, like the spinning cube, and returns a HolographicFrame object that is used to get up-to-date view and projection matrices and to present the swap chain.

La méthode Render dans AppMain.cpp prend le HolographicFrame et restitue le frame actuel sur chaque caméra holographique, en fonction de l’état actuel de l’application et du positionnement spatial.The Render method in AppMain.cpp takes the HolographicFrame and renders the current frame to each holographic camera, according to the current app and spatial positioning state.

NotesNotes

Le modèle d’application Windows Mixed Reality prend désormais en charge la compilation avec l’indicateur d’atténuation spectre activé (/Qspectre).The Windows Mixed Reality app template now supports compilation with the Spectre mitigation flag enabled (/Qspectre). Veillez à installer la version spectre-atténuée des bibliothèques Runtime de Microsoft Visual C++ (MSVC) avant de compiler une configuration avec l’atténuation spectre activée.Make sure to install the Spectre-mitigated version of the Microsoft Visual C++ (MSVC) runtime libraries before compiling a configuration with Spectre mitigation enabled. Pour installer les bibliothèques C++ atténuées par spectre, lancez le Visual Studio Installer et sélectionnez modifier.To install the Spectre-mitigated C++ libraries, launch the Visual Studio Installer and select Modify. Accédez à composants individuels et recherchez « spectre ».Navigate to Individual components and search for "spectre". Sélectionnez les zones correspondant aux plateformes cibles et à la version MSVC dont vous avez besoin pour compiler le code atténué spectre pour, puis cliquez sur modifier pour commencer l’installation.Select the boxes corresponding to the target platforms and MSVC version that you need to compile Spectre-mitigated code for, and click Modify to begin the install.

Voir aussiSee also