Erstellen eines holographischen DirectX-ProjektsCreating a holographic DirectX project

Hinweis

Dieser Artikel bezieht sich auf die älteren WinRT-APIs.This article relates to the legacy WinRT native APIs. Bei neuen nativen App-Projekten wird die Verwendung der openxr-API empfohlen.For new native app projects, we recommend using the OpenXR API.

Eine Holographic-APP, die Sie für ein hololens erstellen, ist eine universelle Windows-Plattform-app (UWP).A holographic app you create for a HoloLens will be a Universal Windows Platform (UWP) app. Wenn Sie auf Desktop-Windows Mixed Reality-Headsets abzielen, können Sie eine UWP-APP oder eine Win32-app erstellen.If targeting desktop Windows Mixed Reality headsets, you can create a UWP app or a Win32 app.

Die DirectX 11 Holographic UWP-App-Vorlage ähnelt der APP-Vorlage DirectX 11 UWP.The DirectX 11 holographic UWP app template is much like the DirectX 11 UWP app template. Die Vorlage enthält eine Programm Schleife, eine deviceresources -Klasse, um das Direct3D-Gerät und den Kontext und eine vereinfachte inhaltsrenderer-Klasse zu verwalten.The template includes a program loop, a DeviceResources class to manage the Direct3D device and context, and a simplified content renderer class. Es verfügt auch über eine iframeworkview, wie jede andere UWP-app.It also has an IFrameworkView, just like any other UWP app.

Die Mixed Reality-App bietet jedoch einige zusätzliche Funktionen, die in einer typischen Direct3D UWP-APP nicht vorhanden sind.The mixed reality app, however, has some additional capabilities that aren't present in a typical Direct3D UWP app. Die Windows Mixed Reality-App-Vorlage kann Folgendes ausführen:The Windows Mixed Reality app template can:

  • Handle Direct3D Geräte Ressourcen, die mit Holographic Kameras verknüpft sind.Handle Direct3D device resources associated with holographic cameras.
  • Rückruf Puffer aus dem System abrufen.Retrieve camera back buffers from the system. Erstellen Sie im Fall von Direct3D12 Holographic backpufferressourcen, und verwalten Sie die Ressourcen Lebensdauer.In the case of Direct3D12, create holographic back buffer resources and manage resource lifetimes.
  • Behandeln Sie die über Blicks Eingaben, und erkennen Sie eine Geste.Handle gaze input, and recognize a gesture.
  • Wechseln Sie in den Vollbild-Stereo Renderingmodus.Go into full-screen stereo rendering mode.

Wie fange ich an?How do I get started?

Installieren Sie zunächst die Tools, und befolgen Sie dabei die Anweisungen zum Herunterladen von Visual Studio 2019 und den Windows Mixed Reality-App-Vorlagen.First install the tools, following the instructions on downloading Visual Studio 2019 and the Windows Mixed Reality app templates. Die Mixed Reality-App-Vorlagen sind im Visual Studio Marketplace als Webdownloadverfügbar, oder Sie installieren Sie als Erweiterung über die Visual Studio-Benutzeroberfläche.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.

Nun können Sie Ihre DirectX 11 Windows Mixed Reality-app erstellen!Now you're ready to create your DirectX 11 Windows Mixed Reality app! Wenn Sie den Beispiel Inhalt entfernen möchten, kommentieren Sie die DRAW_SAMPLE_CONTENT Präprozessordirektive in " PCH. h" aus.Note, to remove the sample content, comment out the DRAW_SAMPLE_CONTENT preprocessor directive in pch.h.

Erstellen eines UWP-ProjektsCreating a UWP project

Nachdem die Tools installiert wurden,] (.. /install-the-Tools.MD) Sie können dann ein Holographic DirectX-UWP-Projekt erstellen.Once the tools are installed,](../install-the-tools.md) you can then create a holographic DirectX UWP project.

So erstellen Sie ein neues Projekt in Visual Studio 2019:To create a new project in Visual Studio 2019:

  1. Starten Sie Visual Studio.Start Visual Studio.
  2. Wählen Sie im Abschnitt Get Started auf der rechten Seite Create a New Project aus.In the Get Started section on the right, select Create a new project.
  3. Wählen Sie in den Dropdown Menüs im Dialogfeld Neues Projekt erstellen die Option C++, Windows Mixed Reality und UWP aus.In the drop-down menus in the Create a new project dialog, select C++, Windows Mixed Reality, and UWP.
  4. Wählen Sie Holographic DirectX 11-app (universelle Windows-APP) (C++/WinRT) aus.Select Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Screenshot der Holographic DirectX 11 C++/WinRT UWP-App-Projektvorlage in Visual Studio 2019Screenshot of the Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2019
    Holographic DirectX 11 C++/WinRT UWP-App-Projektvorlage in Visual Studio 2019Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2019

    Wichtig

    Stellen Sie sicher, dass der Name der Projektvorlage "(C++/WinRT)" enthält.Be sure that the project template's name includes "(C++/WinRT)". Andernfalls ist eine ältere Version der Holographic-Projektvorlagen installiert.If not, you have an older version of the holographic project templates installed. Um die neuesten Projektvorlagen zu erhalten, Installieren Sie Sie als Erweiterung für Visual Studio 2019.To get the latest project templates, install them as an extension to Visual Studio 2019.

  5. Wählen Sie Weiter aus.Select Next.
  6. Füllen Sie die Textfelder Projektname und Speicherort aus, und klicken oder tippen Sie auf Erstellen.Fill in the Project name and Location text boxes, and select or tap Create. Das Projekt für die Holographic-APP wird erstellt.The holographic app project is created.
  7. Stellen Sie sicher, dass die Zielversion und die Mindestversion für die Entwicklung auf hololens 2 auf Windows 10, Version 1903, festgelegt sind.For development targeting only HoloLens 2, ensure that the Target version and Minimum version are set to Windows 10, version 1903. Wenn Sie auch hololens (1st Gen) oder Desktop-Windows Mixed Reality-Headsets als Ziel verwenden, können Sie die Mindestversion auf Windows 10, Version 1809, festlegen.If you're also targeting HoloLens (1st gen) or desktop Windows Mixed Reality headsets, you can set Minimum version to Windows 10, version 1809. Dies erfordert einige Adaptive Überprüfungen der Version in Ihrem Code, wenn neue Features von hololens 2 verwendet werden.This will require some version adaptive checks in your code when using new features of HoloLens 2. Screenshot der Festlegung von Windows 10, Version 1903, als Ziel-und MindestversionScreenshot of setting Windows 10, version 1903 as the target and minimum versions
    Festlegen von Windows 10, Version 1903 als Ziel-und MindestversionSetting Windows 10, version 1903 as the target and minimum versions

    Wichtig

    Wenn Windows 10, Version 1903 , nicht als Option angezeigt wird, ist das neueste Windows 10 SDK nicht installiert.If you do not see Windows 10, version 1903 as an option, you do not have the latest Windows 10 SDK installed. Um diese Option anzuzeigen, installieren Sie die Version 10.0.18362.0 oder höher des Windows 10 SDK.To get this option to appear, install version 10.0.18362.0 or later of the Windows 10 SDK.

So erstellen Sie ein neues Projekt in Visual Studio 2017:To create a new project in Visual Studio 2017:

  1. Starten Sie Visual Studio.Start Visual Studio.
  2. Zeigen Sie im Menü Datei auf neu , und wählen Sie im Kontextmenü Projekt aus.From the File menu, point to New and select Project from the context menu. Das Dialogfeld Neues Projekt wird geöffnet.The New Project dialog opens.
  3. Erweitern Sie auf der linken Seite die Option installiert , und erweitern Sie den Knoten Visual C++ Sprache.Expand Installed on the left and expand the Visual C++ language node.
  4. Navigieren Sie zum Knoten universelle Windows-> Holographic , und wählen Sie Holographic DirectX 11-app (universelle Windows-APP) (C++/WinRT) aus.Navigate to the Windows Universal > Holographic node and select Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Screenshot der Holographic DirectX 11 C++/WinRT UWP-App-Projektvorlage in Visual Studio 2017Screenshot of the Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2017
    Holographic DirectX 11 C++/WinRT UWP-App-Projektvorlage in Visual Studio 2017Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2017

    Wichtig

    Stellen Sie sicher, dass der Name der Projektvorlage "(C++/WinRT)" enthält.Be sure that the project template's name includes "(C++/WinRT)". Andernfalls ist eine ältere Version der Holographic-Projektvorlagen installiert.If not, you have an older version of the holographic project templates installed. Um die neuesten Projektvorlagen zu erhalten, Installieren Sie Sie als Erweiterung für Visual Studio 2017.To get the latest project templates, install them as an extension to Visual Studio 2017.

  5. Füllen Sie die Textfelder Name und Speicherort aus, und klicken oder tippen Sie auf OK.Fill in the Name and Location text boxes, and select or tap OK. Das Projekt für die Holographic-APP wird erstellt.The holographic app project is created.
  6. Stellen Sie sicher, dass die Zielversion und die Mindestversion für die Entwicklung auf hololens 2 auf Windows 10, Version 1903, festgelegt sind.For development targeting only HoloLens 2, ensure that the Target version and Minimum version are set to Windows 10, version 1903. Wenn Sie auch hololens (1st Gen) oder Desktop-Windows Mixed Reality-Headsets als Ziel verwenden, können Sie die Mindestversion auf Windows 10, Version 1809, festlegen.If you're also targeting HoloLens (1st gen) or desktop Windows Mixed Reality headsets, you can set Minimum version to Windows 10, version 1809. Dies erfordert einige Adaptive Überprüfungen der Version in Ihrem Code, wenn neue Features von hololens 2 verwendet werden.This will require some version adaptive checks in your code when using new features of HoloLens 2. Screenshot der Festlegung von Windows 10, Version 1903, als Ziel-und MindestversionScreenshot of setting Windows 10, version 1903 as the target and minimum versions
    Festlegen von Windows 10, Version 1903 als Ziel-und MindestversionSetting Windows 10, version 1903 as the target and minimum versions

    Wichtig

    Wenn Windows 10, Version 1903 , nicht als Option angezeigt wird, ist das neueste Windows 10 SDK nicht installiert.If you do not see Windows 10, version 1903 as an option, you do not have the latest Windows 10 SDK installed. Um diese Option anzuzeigen, installieren Sie die Version 10.0.18362.0 oder höher des Windows 10 SDK.To get this option to appear, install version 10.0.18362.0 or later of the Windows 10 SDK.

Die Vorlage generiert ein Projekt mit C++/WinRT, einer C++ 17-sprach Projektion der Windows-Runtime-APIs, die jeden Standard kompatiblen C++ 17-Compiler unterstützt.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. Das Projekt zeigt, wie ein weltweit gesperrter Cube erstellt wird, der 2 Meter vom Benutzer platziert wird.The project shows how to create a world-locked cube that's placed 2 meters from the user. Der Benutzer kann auf dem Controller auf eine Schaltfläche tippen oder diese drücken, um den Cube an einer anderen Position zu platzieren, die durch den Benutzer Blickangegeben wird.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. Sie können dieses Projekt ändern, um eine beliebige gemischte Reality-APP zu erstellen.You can modify this project to create any mixed reality app.

Sie können auch ein neues Projekt erstellen, indem Sie die Projektvorlage Visual c# Holographic verwenden, die auf sharpdx basiert.You can also create a new project using the Visual C# holographic project template, which is based on SharpDX. Wenn Ihr Holographic-c#-Projekt nicht mit der Windows Holographic-App-Vorlage gestartet wurde, müssen Sie die Datei "MS. fxcompile. targets" aus einem Windows Mixed Reality c#-Vorlagen Projekt kopieren und in die CSPROJ-Datei importieren, um die HLSL-Dateien zu kompilieren, die Sie dem Projekt hinzufügen.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. Eine Direct3D 12-Vorlage wird auch in der Erweiterung Windows Mixed Reality-App-Vorlagen für Visual Studio bereitgestellt.A Direct3D 12 template is also provided in the Windows Mixed Reality app templates extension to Visual Studio.

Lesen Sie die Informationen unter Verwenden von Visual Studio zum Bereitstellen und Debuggen , um Informationen zum Erstellen und Bereitstellen des Beispiels für Ihre hololens, PCs mit immersives Gerät oder einen Emulator zu erhalten.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.

In den restlichen Anweisungen wird davon ausgegangen, dass Sie die APP mit C++ erstellen.The rest of the instructions below will assume that you're using C++ to build your app.

UWP-App-EinstiegspunktUWP app entry point

Ihre Holographic UWP-App beginnt in der wWinMain -Funktion in appview. cpp.Your holographic UWP app starts in the wWinMain function in AppView.cpp. Die wWinMain -Funktion erstellt die iframeworkview der APP und startet die coreapplication-Anwendung .The wWinMain function creates the app's IFrameworkView and starts the CoreApplication with it.

Aus 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;
}

Ab diesem Zeitpunkt behandelt die appview-Klasse die Interaktion mit Windows Basic-Eingabe Ereignissen, corewindow-Ereignissen und-Messaging usw.From that point on, the AppView class handles interaction with Windows basic input events, CoreWindow events and messaging, and so on. Außerdem wird der von Ihrer APP verwendete holographicspace-Wert erstellt.It will also create the HolographicSpace used by your app.

Erstellen eines Win32-ProjektsCreating a Win32 project

Die einfachste Möglichkeit, um mit dem Aufbau eines Win32 Holographic-Projekts zu beginnen, besteht darin, das Win32-Beispiel basichologramanzupassen.The easiest way to get started building a Win32 holographic project is to adapt the BasicHologram Win32 sample.

Dieses Win32-Beispiel verwendet C++/WinRT, eine C++ 17-sprach Projektion der Windows-Runtime-APIs, die jeden Standard kompatiblen C++ 17-Compiler unterstützt.This Win32 sample uses C++/WinRT, a C++17 language projection of the Windows Runtime APIs that supports any standards-compliant C++17 compiler. Das Projekt zeigt, wie ein weltweit gesperrter Cube erstellt wird, der 2 Meter vom Benutzer platziert wird.The project shows how to create a world-locked cube that's placed 2 meters from the user. Der Benutzer kann auf dem Controller auf eine Schaltfläche klicken, um den Cube an einer anderen Position zu platzieren, die durch den Benutzer Blickangegeben wird.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. Sie können dieses Projekt ändern, um eine beliebige gemischte Reality-APP zu erstellen.You can modify this project to create any mixed reality app.

Win32-App-EinstiegspunktWin32 app entry point

Ihre Holographic-Win32-App beginnt in der wWinMain -Funktion in appmain. cpp.Your holographic Win32 app starts in the wWinMain function in AppMain.cpp. Die wWinMain -Funktion erstellt das HWND der APP und startet die Nachrichten Schleife.The wWinMain function creates the app's HWND and starts its message loop.

Aus 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;
}

Ab diesem Punkt verarbeitet die appmain-Klasse die Interaktion mit grundlegenden Fenster Meldungen usw.From that point on, the AppMain class handles interaction with basic window messages, and so on. Außerdem wird der von Ihrer APP verwendete holographicspace-Wert erstellt.It will also create the HolographicSpace used by your app.

Holographic-Inhalt WiedergabeRender holographic content

Der Inhalts Ordner des Projekts enthält Klassen zum Rendern von holograms im Holographic-Raum.The project's Content folder contains classes for rendering holograms in the holographic space. Das standardmäßige – Hologramm in der Vorlage ist ein drehende Cube, der 2 Meter vom Benutzer entfernt wird.The default hologram in the template is a spinning cube that's placed 2 meters away from the user. Das zeichnen dieses Cubes ist in der Datei " spinningcuberenderer. cpp" implementiert, die über die folgenden Schlüsselmethoden verfügt:Drawing this cube is implemented in SpinningCubeRenderer.cpp, which has these key methods:

MethodeMethod ErklärungExplanation
CreateDeviceDependentResources Lädt Shader und erstellt das Cube-Mesh.Loads shaders and creates the cube mesh.
PositionHologram Platziert das Hologramm an der Position, die durch die bereitgestellte spatialpointerposeangegeben wird.Places the hologram at the location specified by the provided SpatialPointerPose.
Update Dreht den Cube und legt die Modell Matrix fest.Rotates the cube, and sets the model matrix.
Render Rendert einen Frame mit dem Scheitelpunkt und den Pixel-Shadern.Renders a frame using the vertex and pixel shaders.

Der Unterordner Shaders enthält vier standardshaderimplementierungen:The Shaders subfolder contains four default shader implementations:

ShaderShader ErklärungExplanation
GeometryShader.hlsl Ein Pass-Through, bei dem die Geometrie unverändert bleibt.A pass-through that leaves the geometry unmodified.
PixelShader.hlsl Durchläuft die Farbdaten.Passes through the color data. Die Farbdaten werden interpoliert und einem Pixel im rasterisierungsschritt zugewiesen.The color data is interpolated and assigned to a pixel at the rasterization step.
VertexShader.hlsl Einfacher Shader für die Verarbeitung von Scheitel Punkten auf der GPU.Simple shader to do vertex processing on the GPU.
VPRTVertexShader.hlsl Einfacher Shader für die Verarbeitung von Scheitel Punkten auf der GPU, die für Windows Mixed Reality-Stereo Rendering optimiert ist.Simple shader to do vertex processing on the GPU, that is optimized for Windows Mixed Reality stereo rendering.

VertexShaderShared.hlsl enthält gemeinsamen Code, der von und gemeinsam verwendet wird VertexShader.hlsl VPRTVertexShader.hlsl .VertexShaderShared.hlsl contains common code shared between VertexShader.hlsl and VPRTVertexShader.hlsl.

Hinweis: die APP-Vorlage Direct3D 12 enthält ebenfalls ViewInstancingVertexShader.hlsl .Note: The Direct3D 12 app template also includes ViewInstancingVertexShader.hlsl. Diese Variante verwendet D3D12 optionale Features, um Stereobilder effizienter zu gestalten.This variant uses D3D12 optional features to render stereo images more efficiently.

Die Shader kompilieren, wenn das Projekt erstellt wird, und werden in die Methode " spinningcuberenderer:: createdevicedependentresources " geladen.The shaders compile when the project is built, and loaded in the SpinningCubeRenderer::CreateDeviceDependentResources method.

Interagieren mit ihren hologramsInteract with your holograms

Benutzereingaben werden in der spatialinputhandler -Klasse verarbeitet, die eine spatialinteraktionmanager -Instanz abruft und das sourcepressed -Ereignis abonniert.User input is processed in the SpatialInputHandler class, which gets a SpatialInteractionManager instance and subscribes to the SourcePressed event. Dies ermöglicht das Erkennen der Luft tippen Bewegung und anderer räumlicher Eingabeereignisse.This enables detecting the air-tap gesture and other spatial input events.

Holographic-Inhalt aktualisierenUpdate holographic content

Ihre Mixed Reality-APP wird in einer Spiel Schleife aktualisiert, die standardmäßig in der Update -Methode in implementiert wird AppMain.cpp .Your mixed reality app updates in a game loop, which by default is implemented in the Update method in AppMain.cpp. Die Update -Methode aktualisiert Szenen Objekte, wie z. b. den drehenden Cube, und gibt ein holographicframe -Objekt zurück, das verwendet wird, um aktuelle Ansichts-und Projektions Matrizen zu erhalten und die Austausch Kette darzustellen.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.

Die Rendermethode in AppMain.cpp nimmt den holographicframe an und rendert den aktuellen Frame entsprechend der aktuellen APP und dem räumlichen Positions Zustand für jede Holographic-Kamera.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.

NotizenNotes

Die Windows Mixed Reality-App-Vorlage unterstützt jetzt die Kompilierung mit aktiviertem Spectre-Entschärfungs Flag (/Qspectre).The Windows Mixed Reality app template now supports compilation with the Spectre mitigation flag enabled (/Qspectre). Stellen Sie sicher, dass Sie die vom Spectre abgeminderte Version der MSVC-Laufzeitbibliotheken (Microsoft Visual C++) installieren, bevor Sie eine Konfiguration mit aktivierter Spectre-Entschärfung kompilieren.Make sure to install the Spectre-mitigated version of the Microsoft Visual C++ (MSVC) runtime libraries before compiling a configuration with Spectre mitigation enabled. Starten Sie die Visual Studio-Installer, und wählen Sie ändern aus, um die C++-Bibliotheken von Spectre zu installieren.To install the Spectre-mitigated C++ libraries, launch the Visual Studio Installer and select Modify. Navigieren Sie zu einzelne Komponenten , und suchen Sie nach "Spectre".Navigate to Individual components and search for "spectre". Wählen Sie die Felder aus, die den Zielplattformen und der MSVC-Version entsprechen, für die Sie den durch Spectre abgeminderten Code kompilieren müssen, und klicken Sie auf ändern , um die Installation zu starten.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.

Siehe auchSee also