Erstellen eines holographischen DirectX-Projekts

Hinweis

Dieser Artikel bezieht sich auf die älteren winRT nativen APIs. Für neue native App-Projekte empfehlen wir die Verwendung der OpenXR-API.

Eine holografische App, die Sie für eine HoloLens erstellen, ist eine Universelle Windows-Plattform (UWP)-App. Wenn Sie Desktop-Windows Mixed Reality Headsets ausrichten, können Sie eine UWP-App oder eine Win32-App erstellen.

Die Vorlage für holografische UWP-Apps von DirectX 11 ähnelt der Vorlage für UWP-Apps von DirectX 11. Die Vorlage enthält eine Programmschleife, eine DeviceResources-Klasse zum Verwalten des Direct3D-Geräts und -Kontexts sowie eine vereinfachte Inhaltsrendererklasse. Es verfügt auch über eine IFrameworkView, genau wie jede andere UWP-App.

Die Mixed Reality-App verfügt jedoch über einige zusätzliche Funktionen, die in einer typischen Direct3D-UWP-App nicht vorhanden sind. Die Windows Mixed Reality App-Vorlage kann:

  • Behandeln von Direct3D-Geräteressourcen, die holografischen Kameras zugeordnet sind.
  • Rufen Sie Kamerarückpuffer aus dem System ab. Erstellen Sie im Fall von Direct3D12 holografische Hintergrundpufferressourcen und verwalten Sie die Lebensdauer der Ressource.
  • Behandeln Sie die Blickeingabe , und erkennen Sie eine Geste.
  • Wechseln Sie zum Stereorenderingmodus im Vollbildmodus.

Wie fange ich an?

Installieren Sie zuerst die Tools, indem Sie die Anweisungen zum Herunterladen von Visual Studio 2019 und den Windows Mixed Reality App-Vorlagen befolgen. Die Mixed Reality-App-Vorlagen sind auf dem Visual Studio Marketplace als Webdownload oder durch Installieren als Erweiterung über die Visual Studio UI verfügbar.

Jetzt können Sie Ihre DirectX 11 Windows Mixed Reality App erstellen! Um den Beispielinhalt zu entfernen, kommentieren Sie die DRAW_SAMPLE_CONTENT Präprozessorrichtlinie in pch.h.

Erstellen eines UWP-Projekts

Sobald die Tools installiert sind, können Sie dann ein holografisches DirectX-UWP-Projekt erstellen.

So erstellen Sie ein neues Projekt in Visual Studio 2019:

  1. Starten Sie Visual Studio.
  2. Wählen Sie im Abschnitt "Erste Schritte" auf der rechten Seite "Neues Projekt erstellen" aus.
  3. Wählen Sie in den Dropdownmenüs im Dialogfeld "Neues Projekt erstellen"C++, Windows Mixed Reality und UWP aus.
  4. Wählen Sie holographic DirectX 11 App (Universelle Windows) (C++/WinRT) aus. Screenshot of the Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2019
    Vorlage für Holographic DirectX 11 C++/WinRT UWP-App-Projektvorlage in Visual Studio 2019

    Wichtig

    Achten Sie darauf, dass der Name der Projektvorlage "(C++/WinRT)" enthält. Wenn nicht, haben Sie eine ältere Version der holografischen Projektvorlagen installiert. Um die neuesten Projektvorlagen abzurufen, installieren Sie sie als Erweiterung für Visual Studio 2019.

  5. Wählen Sie Weiter aus.
  6. Füllen Sie die Textfelder Project Namen und Position aus, und wählen Oder tippen Sie auf "Erstellen". Das Hologramm-App-Projekt wird erstellt.
  7. Stellen Sie für die Entwicklung nur HoloLens 2 sicher, dass die Zielversion und die Mindestversionauf Windows 10, Version 1903, festgelegt sind. Wenn Sie auch auf HoloLens (1. Generation) oder Desktop-Windows Mixed Reality Headsets abzielen, können Sie die Mindestversion auf Windows 10, Version 1809 festlegen. Dies erfordert einige adaptive Versionsüberprüfungen im Code, wenn neue Features von HoloLens 2 verwendet werden. Screenshot of setting Windows 10, version 1903 as the target and minimum versions
    Festlegen von Windows 10, Version 1903 als Ziel- und Mindestversionen

    Wichtig

    Wenn Windows 10, Version 1903, nicht als Option angezeigt wird, sind die neuesten Windows 10 SDK nicht installiert. Um diese Option anzuzeigen, installieren Sie Version 10.0.18362.0 oder höher des Windows 10 SDK.

So erstellen Sie ein neues Projekt in Visual Studio 2017:

  1. Starten Sie Visual Studio.
  2. Zeigen Sie im Menü "Datei" auf "Neu", und wählen Sie im Kontextmenü Project aus. Das Dialogfeld Neues Projekt wird geöffnet.
  3. Erweitern Sie auf der linken Seite installiert , und erweitern Sie den Visual C++ -Sprachknoten.
  4. Navigieren Sie zum Windows Universellen > Holographic-Knoten, und wählen Sie holographic DirectX 11 App (Universelle Windows) (C++/WinRT) aus. Screenshot of the Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2017
    Vorlage für Holographic DirectX 11 C++/WinRT UWP-App-Projektvorlage in Visual Studio 2017

    Wichtig

    Achten Sie darauf, dass der Name der Projektvorlage "(C++/WinRT)" enthält. Wenn nicht, haben Sie eine ältere Version der holografischen Projektvorlagen installiert. Um die neuesten Projektvorlagen zu erhalten, installieren Sie sie als Erweiterung für Visual Studio 2017.

  5. Füllen Sie die Textfelder "Name " und " Position " aus, und wählen Oder tippen Sie auf "OK". Das Hologramm-App-Projekt wird erstellt.
  6. Stellen Sie für die Entwicklung nur HoloLens 2 sicher, dass die Zielversion und die Mindestversionauf Windows 10, Version 1903, festgelegt sind. Wenn Sie auch auf HoloLens (1. Generation) oder Desktop-Windows Mixed Reality Headsets abzielen, können Sie die Mindestversion auf Windows 10, Version 1809 festlegen. Dies erfordert einige adaptive Versionsüberprüfungen im Code, wenn neue Features von HoloLens 2 verwendet werden. Screenshot of setting Windows 10, version 1903 as the target and minimum versions
    Festlegen von Windows 10, Version 1903 als Ziel- und Mindestversionen

    Wichtig

    Wenn Windows 10, Version 1903, nicht als Option angezeigt wird, sind die neuesten Windows 10 SDK nicht installiert. Um diese Option anzuzeigen, installieren Sie Version 10.0.18362.0 oder höher des Windows 10 SDK.

Die Vorlage generiert ein Projekt mit C++/WinRT, einer C++17-Sprachprojektion der Windows-Runtime-APIs, die einen standardkonformen C++17-Compiler unterstützt. Das Projekt zeigt, wie Sie einen weltgesperrten Würfel erstellen, der vom Benutzer 2 Meter entfernt ist. Der Benutzer kann mit der Luft tippen oder eine Taste auf dem Controller drücken, um den Würfel an einer anderen Position zu platzieren, die durch den Blick des Benutzers angegeben wird. Sie können dieses Projekt ändern, um eine beliebige Mixed Reality-App zu erstellen.

Sie können auch ein neues Projekt mithilfe der Holografischen Projektvorlage visual C# erstellen, die auf SharpDX basiert. Wenn Ihr holografisches 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#-Vorlagenprojekt kopieren und in ihre CSPROJ-Datei importieren, um HLSL-Dateien zu kompilieren, die Sie ihrem Projekt hinzufügen. Eine Direct3D 12-Vorlage wird auch in der Windows Mixed Reality App-Vorlagenerweiterung für Visual Studio bereitgestellt.

Überprüfen Sie die Verwendung von Visual Studio, um Informationen zum Erstellen und Bereitstellen des Beispiels auf Ihrem HoloLens, PC mit angeschlossenem immersivem Gerät oder einem Emulator bereitzustellen und zu debuggen.

Die restlichen Anweisungen unten gehen davon aus, dass Sie C++ zum Erstellen Ihrer App verwenden.

UWP-App-Einstiegspunkt

Ihre holografische UWP-App wird in der wWinMain-Funktion in AppView.cpp gestartet. Die wWinMain-Funktion erstellt die IFrameworkView der App und startet die CoreApplication damit.

Von 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 grundlegenden Eingabeereignissen, CoreWindow-Ereignissen und Messaging usw. Außerdem wird das holographicSpace erstellt, das von Ihrer App verwendet wird.

Erstellen eines Win32-Projekts

Die einfachste Möglichkeit, mit dem Erstellen eines holografischen Win32-Projekts zu beginnen, besteht darin, das BasicHologram Win32-Beispiel anzupassen.

In diesem Win32-Beispiel wird C++/WinRT, eine C++17-Sprachprojektion der Windows-Runtime-APIs verwendet, die alle standardskonformen C++17-Compiler unterstützt. Das Projekt zeigt, wie Sie einen weltgesperrten Würfel erstellen, der vom Benutzer 2 Meter entfernt ist. Der Benutzer kann auf dem Controller eine Schaltfläche drücken, um den Würfel an einer anderen Position zu platzieren, die vom Blick des Benutzers angegeben wird. Sie können dieses Projekt ändern, um eine beliebige Mixed Reality-App zu erstellen.

Win32-App-Einstiegspunkt

Ihre holografische Win32-App beginnt in der wWinMain-Funktion in AppMain.cpp. Die wWinMain-Funktion erstellt den HWND der App und startet seine Nachrichtenschleife.

Von 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 Zeitpunkt behandelt die AppMain-Klasse die Interaktion mit grundlegenden Fensternachrichten usw. Außerdem wird das holographicSpace erstellt, das von Ihrer App verwendet wird.

Rendern von holografischen Inhalten

Der Inhaltsordner des Projekts enthält Klassen zum Rendern von Hologrammen im holografischen Raum. Das Standard hologramm in der Vorlage ist ein drehender Würfel, der 2 Meter vom Benutzer entfernt ist. Das Zeichnen dieses Cubes wird in SpinningCubeRenderer.cpp implementiert, das über die folgenden Schlüsselmethoden verfügt:

Methode Erklärung
CreateDeviceDependentResources Lädt Shader und erstellt das Würfelgitter.
PositionHologram Platziert das Hologramm an der position, die von der bereitgestellten SpatialPointerPose angegeben wird.
Update Dreht den Würfel, und legt die Modellmatrix fest.
Render Rendert einen Frame mithilfe der Vertex- und Pixel-Shader.

Der Shader-Unterordner enthält vier Standard-Shaderimplementierungen:

Shader Erklärung
GeometryShader.hlsl Ein Durchlauf, der die Geometrie unmodifiziert verlässt.
PixelShader.hlsl Übergibt die Farbdaten. Die Farbdaten werden interpoliert und einem Pixel im Rasterisierungsschritt zugewiesen.
VertexShader.hlsl Einfacher Shader zum Ausführen der Vertexverarbeitung auf der GPU.
VPRTVertexShader.hlsl Einfacher Shader zum Ausführen der Vertexverarbeitung auf der GPU, die für Windows Mixed Reality Stereo-Rendering optimiert ist.

VertexShaderShared.hlsl enthält gängigen Code, der zwischen VertexShader.hlsl und VPRTVertexShader.hlsl.

Hinweis: Die Direct3D 12-App-Vorlage enthält ViewInstancingVertexShader.hlslauch . Diese Variante verwendet optionale Features von D3D12, um Stereobilder effizienter zu rendern.

Die Shader kompilieren, wenn das Projekt erstellt wird und in der SpinningCubeRenderer::CreateDeviceDependentResources-Methode geladen wird.

Interagieren mit Ihren Hologrammen

Die Benutzereingabe wird in der SpatialInputHandler-Klasse verarbeitet, die eine SpatialInteractionManager-Instanz abruft und das SourcePressed-Ereignis abonniert. Dadurch wird die Lufteingabegeste und andere räumliche Eingabeereignisse erkannt.

Aktualisieren von holografischen Inhalten

Ihre Mixed Reality-App aktualisiert sich in einer Spielschleife, die standardmäßig in der Update-MethodeAppMain.cppimplementiert wird. Die Update-Methode aktualisiert Szenenobjekte wie den Spinnwürfel und gibt ein HolographicFrame-Objekt zurück, das verwendet wird, um aktuelle Ansichts- und Projektionsmatrizen abzurufen und die Swapchain darzustellen.

Die Rendermethode in AppMain.cpp nimmt den HolographicFrame und rendert den aktuellen Frame in jede Holographic-Kamera gemäß dem aktuellen App- und räumlichen Positionierungszustand.

Notizen

Die Windows Mixed Reality-App-Vorlage unterstützt jetzt die Kompilierung mit aktiviertem Spectre-Minderungszeichen (/Qspectre). Stellen Sie sicher, dass Sie die abgeschärfte Version der Microsoft Visual C++ -Laufzeitbibliotheken (MSVC) installieren, bevor Sie eine Konfiguration mit aktivierter Spectre-Entschärfung kompilieren. Wenn Sie die C++-Bibliotheken von Spectre installieren möchten, starten Sie die Visual Studio-Installer, und wählen Sie "Ändern" aus. Navigieren Sie zu einzelnen Komponenten , und suchen Sie nach "Spectre". Wählen Sie die Felder aus, die den Zielplattformen entsprechen, und MSVC Version, für die Sie Spectre-entschärften Code kompilieren müssen, und klicken Sie auf "Ändern", um die Installation zu starten.

Siehe auch