Erstellen eines holographischen DirectX-Projekts

Hinweis

Dieser Artikel bezieht sich auf die älteren nativen WinRT-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-App (UWP). Wenn Sie desktop-Windows Mixed Reality Headsets verwenden, können Sie eine UWP-App oder eine Win32-App erstellen.

Die Vorlage für eine holografische UWP-App von DirectX 11 ähnelt der DirectX 11-UWP-App-Vorlage. 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 Folgendes ausführen:

  • Verarbeiten von Direct3D-Geräteressourcen, die holografischen Kameras zugeordnet sind.
  • Abrufen von Kamerarückpuffern aus dem System. Erstellen Sie im Fall von Direct3D12 holografische Rückpufferressourcen, und verwalten Sie die Ressourcenlebensdauer.
  • Behandeln Sie die Blickeingabe , und erkennen Sie eine Geste.
  • Wechseln Sie in den Vollbild-Stereorenderingmodus.

Wie fange ich an?

Installieren Sie zunächst die Tools, und befolgen Sie die Anweisungen zum Herunterladen von Visual Studio 2019 und den Windows Mixed Reality-App-Vorlagen. Die Mixed Reality-App-Vorlagen sind auf dem Visual Studio-Marketplace als Webdownload oder als Erweiterung über die Visual Studio-Benutzeroberfläche verfügbar.

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

Erstellen eines UWP-Projekts

Sobald die Tools installiert sind, können Sie 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 Die Option Neues Projekt erstellen aus.
  3. Wählen Sie in den Dropdownmenüs im Dialogfeld Neues Projekt erstellendie Option C++, Windows Mixed Reality und UWP aus.
  4. Wählen Sie Holographic DirectX 11 App (Universelles Windows) (C++/WinRT) aus. Screenshot der Projektvorlage holographic DirectX 11 C++/WinRT UWP-App in Visual Studio 2019
    Holographic DirectX 11 C++/WinRT UWP-App-Projektvorlage in Visual Studio 2019

    Wichtig

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

  5. Wählen Sie Weiter aus.
  6. Geben Sie die Textfelder Projektname und Speicherort ein, und wählen oder tippen Sie auf Erstellen. Das holografische App-Projekt wird erstellt.
  7. Stellen Sie bei der Entwicklung für nur HoloLens 2 sicher, dass die Zielversion und die Mindestversion auf Windows 10 Version 1903 festgelegt sind. Wenn Sie auch HoloLens (1. Generation) oder Desktop-Windows Mixed Reality Headsets verwenden, können Sie 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: Festlegen Windows 10, Version 1903 als Ziel- und Mindestversion
    Festlegen Windows 10, Version 1903 als Ziel- und Mindestversion

    Wichtig

    Wenn Windows 10 Version 1903 nicht als Option angezeigt wird, ist das neueste Windows 10 SDK nicht installiert. Damit diese Option angezeigt wird, 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ü Projekt aus. Das Dialogfeld Neues Projekt wird geöffnet.
  3. Erweitern Sie links Installiert , und erweitern Sie den Visual C++- Sprachknoten.
  4. Navigieren Sie zum Windows Universal > Holographic-Knoten , und wählen Sie Holographic DirectX 11 App (Universelles Windows) (C++/WinRT) aus. Screenshot der Projektvorlage
    Holographic DirectX 11 C++/WinRT UWP-App-Projektvorlage in Visual Studio 2017

    Wichtig

    Stellen Sie sicher, dass der Name der Projektvorlage "(C++/WinRT)" enthält. Andernfalls 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. Geben Sie die Textfelder Name und Speicherort ein, und wählen oder tippen Sie auf OK. Das holografische App-Projekt wird erstellt.
  6. Stellen Sie bei der Entwicklung für nur HoloLens 2 sicher, dass die Zielversion und die Mindestversion auf Windows 10 Version 1903 festgelegt sind. Wenn Sie auch HoloLens (1. Generation) oder Desktop-Windows Mixed Reality Headsets verwenden, können Sie 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: Festlegen Windows 10, Version 1903 als Ziel- und Mindestversion
    Festlegen Windows 10, Version 1903 als Ziel- und Mindestversion

    Wichtig

    Wenn Windows 10 Version 1903 nicht als Option angezeigt wird, ist das neueste Windows 10 SDK nicht installiert. Damit diese Option angezeigt wird, 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 jeden standardkonformen C++17-Compiler unterstützt. Das Projekt zeigt, wie Sie einen weltgebundenen Cube erstellen, der 2 Meter vom Benutzer entfernt platziert ist. Der Benutzer kann per 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 ist. Sie können dieses Projekt ändern, um eine beliebige Mixed Reality-App zu erstellen.

Sie können auch ein neues Projekt mit der holografischen Visual C#- Projektvorlage 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 die Datei "your.csproj" 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.

Unter Verwenden von Visual Studio zum Bereitstellen und Debuggen finden Sie Informationen zum Erstellen und Bereitstellen des Beispiels auf Ihrer HoloLens, einem PC mit angeschlossenem immersiven Gerät oder einem Emulator.

In den restlichen Anweisungen unten wird davon ausgegangen, dass Sie C++ zum Erstellen Ihrer App verwenden.

UWP-App-Einstiegspunkt

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

Über 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 verarbeitet die AppView-Klasse die Interaktion mit grundlegenden Windows-Eingabeereignissen, CoreWindow-Ereignissen und Messaging usw. Außerdem wird der holographicSpace erstellt, der von Ihrer App verwendet wird.

Erstellen eines Win32-Projekts

Der einfachste Weg zum Erstellen eines holografischen Win32-Projekts ist die Anpassung des BasicHologram Win32-Beispiels.

In diesem Win32-Beispiel wird C++/WinRT verwendet, eine C++17-Sprachprojektion der Windows-Runtime-APIs, die jeden standardkonformen C++17-Compiler unterstützt. Das Projekt zeigt, wie Sie einen weltgebundenen Cube erstellen, der 2 Meter vom Benutzer entfernt platziert ist. Der Benutzer kann eine Schaltfläche auf dem Controller drücken, um den Cube 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 Funktion wWinMain in AppMain.cpp. Die wWinMain-Funktion erstellt den HWND der App und startet die Nachrichtenschleife.

Über 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 verarbeitet die AppMain-Klasse die Interaktion mit grundlegenden Fensternachrichten usw. Außerdem wird der holographicSpace erstellt, der von Ihrer App verwendet wird.

Rendern holografischer Inhalte

Der Ordner Content des Projekts enthält Klassen zum Rendern von Hologrammen im holografischen Raum. Das Standardhologramm in der Vorlage ist ein sich drehender Würfel, der 2 Meter vom Benutzer entfernt platziert wird. 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 Cubegitter.
PositionHologram Platziert das Hologramm an der vom angegebenen SpatialPointerPose angegebenen Position.
Update Dreht den Cube 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 Passthrough, bei dem die Geometrie unverändert bleibt.
PixelShader.hlsl Durchläuft die Farbdaten. Die Farbdaten werden interpoliert und einem Pixel beim Rasterungsschritt zugewiesen.
VertexShader.hlsl Einfacher Shader zur Vertexverarbeitung auf der GPU.
VPRTVertexShader.hlsl Einfacher Shader für die Vertexverarbeitung auf der GPU, die für Windows Mixed Reality Stereorendering optimiert ist.

VertexShaderShared.hlsl enthält gemeinsamen Code, der zwischen VertexShader.hlsl und VPRTVertexShader.hlslfreigegeben wird.

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

Die Shader kompilieren beim Erstellen des Projekts und laden sie in die SpinningCubeRenderer::CreateDeviceDependentResources-Methode .

Interagieren mit Ihren Hologrammen

Benutzereingaben werden in der SpatialInputHandler-Klasse verarbeitet, die einen SpatialInteractionManager-instance abruft und das SourcePressed-Ereignis abonniert. Dies ermöglicht die Erkennung der Luftbewegung und anderer räumlicher Eingabeereignisse.

Aktualisieren holografischer Inhalte

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

Die Render-Methode in AppMain.cpp übernimmt den HolographicFrame und rendert den aktuellen Frame entsprechend der aktuellen App und dem räumlichen Positionierungszustand für jede holografische Kamera.

Hinweise

Die Windows Mixed Reality-App-Vorlage unterstützt jetzt die Kompilierung mit aktiviertem Spectre-Entschärfungsflag (/Qspectre). Installieren Sie unbedingt die spectre-entschärfte Version der Microsoft Visual C++(MSVC)-Laufzeitbibliotheken, bevor Sie eine Konfiguration mit aktivierter Spectre-Entschärfung kompilieren. Um die C++-Bibliotheken mit Spectre-Entschärfung zu installieren, starten Sie die Visual Studio-Installer, und wählen Sie Ändern aus. Navigieren Sie zu Einzelkomponenten , und suchen Sie nach "spectre". Wählen Sie die Felder aus, die den Zielplattformen und der MSVC-Version entsprechen, für die Sie Code mit Spectre-Entschärfung kompilieren müssen, und klicken Sie auf Ändern , um mit der Installation zu beginnen.

Weitere Informationen