Een holografisch DirectX-project maken

Notitie

Dit artikel heeft betrekking op de verouderde systeemeigen WinRT-API's. Voor nieuwe systeemeigen app-projecten raden we u aan de OpenXR-API te gebruiken.

Een holografische app die u voor een HoloLens maakt, is een uwp-app (Universeel Windows-platform). Als u zich richt op desktop-Windows Mixed Reality headsets, kunt u een UWP-app of een Win32-app maken.

De directX 11 holografische UWP-app-sjabloon lijkt veel op de DirectX 11 UWP-app-sjabloon. De sjabloon bevat een programmalus, een DeviceResources-klasse voor het beheren van het Direct3D-apparaat en de context, en een vereenvoudigde inhoudsweergaveklasse. Het heeft ook een IFrameworkView, net als elke andere UWP-app.

De mixed reality-app heeft echter een aantal extra mogelijkheden die niet aanwezig zijn in een typische Direct3D UWP-app. Met de Windows Mixed Reality app-sjabloon kunt u het volgende doen:

  • Direct3D-apparaatresources verwerken die zijn gekoppeld aan holografische camera's.
  • Camera-backbuffers ophalen uit het systeem. In het geval van Direct3D12 maakt u holografische backbufferresources en beheert u de levensduur van resources.
  • Omgaan met staarinvoer en een gebaar herkennen.
  • Ga naar de modus voor stereoweergave op volledig scherm.

Hoe ga ik aan de slag?

Installeer eerst de hulpprogramma's en volg de instructies voor het downloaden van Visual Studio 2019 en de Windows Mixed Reality app-sjablonen. De app-sjablonen voor mixed reality zijn beschikbaar op de Visual Studio Marketplace als webdownload of door ze als extensie te installeren via de Visual Studio-gebruikersinterface.

Nu bent u klaar om uw DirectX 11 Windows Mixed Reality-app te maken. Opmerking, als u de voorbeeldinhoud wilt verwijderen, markeert u de DRAW_SAMPLE_CONTENT preprocessor-instructie in pch.h.

Een UWP-project maken

Zodra de hulpprogramma's zijn geïnstalleerd, kunt u een holografisch DirectX UWP-project maken.

Een nieuw project maken in Visual Studio 2019:

  1. Start Visual Studio.
  2. Selecteer in de sectie Aan de slag aan de rechterkant Een nieuw project maken.
  3. Selecteer in de vervolgkeuzelijsten in het dialoogvenster Een nieuw project maken de optie C++, Windows Mixed Reality en UWP.
  4. Selecteer Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Schermopname van de projectsjabloon Holographic DirectX 11 C++/WinRT UWP-app in Visual Studio 2019
    Projectsjabloon holographic DirectX 11 C++/WinRT UWP-app in Visual Studio 2019

    Belangrijk

    Zorg ervoor dat de naam van de projectsjabloon '(C++/WinRT)' bevat. Zo niet, dan hebt u een oudere versie van de holografische projectsjablonen geïnstalleerd. Als u de nieuwste projectsjablonen wilt downloaden, installeert u deze als extensie voor Visual Studio 2019.

  5. Selecteer Next.
  6. Vul de tekstvakken Projectnaam en Locatie in en selecteer of tik op Maken. Het holografische app-project wordt gemaakt.
  7. Zorg ervoor dat de doelversie en minimumversie zijn ingesteld op Windows 10 versie 1903 voor ontwikkeling die alleen is gericht op HoloLens 2. Als u zich ook richt op HoloLens (1e generatie) of desktop-Windows Mixed Reality headsets, kunt u Minimumversie instellen op Windows 10 versie 1809. Hiervoor zijn enkele versie-adaptieve controles in uw code vereist bij het gebruik van nieuwe functies van HoloLens 2. Schermopname van het instellen van Windows 10 versie 1903 als doel en minimale versies
    Instellen van Windows 10 versie 1903 als doel en minimumversies

    Belangrijk

    Als u Windows 10 versie 1903 niet als optie ziet, hebt u niet de meest recente Windows 10 SDK geïnstalleerd. Als u deze optie wilt weergeven, installeert u versie 10.0.18362.0 of hoger van de Windows 10 SDK.

Een nieuw project maken in Visual Studio 2017:

  1. Start Visual Studio.
  2. Wijs in het menu Bestand naar Nieuw en selecteer Project in het contextmenu. Het dialoogvenster Nieuw project wordt geopend.
  3. Vouw Aan de linkerkant Geïnstalleerd uit en vouw het knooppunt Visual C++ -taal uit.
  4. Navigeer naar het knooppunt Windows Universal > Holographic en selecteer Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Schermopname van de projectsjabloon Holographic DirectX 11 C++/WinRT UWP-app in Visual Studio 2017
    Projectsjabloon holographic DirectX 11 C++/WinRT UWP-app in Visual Studio 2017

    Belangrijk

    Zorg ervoor dat de naam van de projectsjabloon '(C++/WinRT)' bevat. Zo niet, dan hebt u een oudere versie van de holografische projectsjablonen geïnstalleerd. Als u de nieuwste projectsjablonen wilt downloaden, installeert u deze als extensie voor Visual Studio 2017.

  5. Vul de tekstvakken Naam en Locatie in en selecteer of tik op OK. Het holografische app-project wordt gemaakt.
  6. Zorg ervoor dat de doelversie en minimumversie zijn ingesteld op Windows 10 versie 1903 voor ontwikkeling die alleen is gericht op HoloLens 2. Als u zich ook richt op HoloLens (1e generatie) of desktop-Windows Mixed Reality headsets, kunt u Minimumversie instellen op Windows 10 versie 1809. Hiervoor zijn enkele versie-adaptieve controles in uw code vereist bij het gebruik van nieuwe functies van HoloLens 2. Schermopname van het instellen van Windows 10 versie 1903 als doel en minimale versies
    Instellen van Windows 10 versie 1903 als doel en minimumversies

    Belangrijk

    Als u Windows 10 versie 1903 niet als optie ziet, hebt u niet de meest recente Windows 10 SDK geïnstalleerd. Als u deze optie wilt weergeven, installeert u versie 10.0.18362.0 of hoger van de Windows 10 SDK.

De sjabloon genereert een project met behulp van C++/WinRT, een C++17-taalprojectie van de Windows Runtime-API's die ondersteuning bieden voor elke C++17-compiler die compatibel is met standaarden. Het project laat zien hoe u een wereld-vergrendelde kubus maakt die op 2 meter van de gebruiker is geplaatst. De gebruiker kan luchttikken of op een knop op de controller drukken om de kubus in een andere positie te plaatsen die is opgegeven door de blik van de gebruiker. U kunt dit project wijzigen om een mixed reality-app te maken.

U kunt ook een nieuw project maken met behulp van de holografische projectsjabloon Visual C# , die is gebaseerd op SharpDX. Als uw holografische C#-project niet is gestart met de App-sjabloon Windows Holographic, moet u het bestand ms.fxcompile.targets kopiëren uit een Windows Mixed Reality C#-sjabloonproject en importeren in uw.csproj-bestand om HLSL-bestanden te compileren die u aan uw project toevoegt. Er is ook een Direct3D 12-sjabloon beschikbaar in de extensie Windows Mixed Reality app-sjablonen voor Visual Studio.

Raadpleeg Visual Studio gebruiken om te implementeren en fouten op te sporen voor informatie over het bouwen en implementeren van het voorbeeld op uw HoloLens, pc met gekoppeld insluitende apparaat of een emulator.

In de rest van de onderstaande instructies wordt ervan uitgegaan dat u C++ gebruikt om uw app te bouwen.

UWP-app-ingangspunt

Uw holografische UWP-app wordt gestart in de functie wWinMain in AppView.cpp. De functie wWinMain maakt de IFrameworkView van de app en start de CoreApplication ermee.

Vanuit AppView.cpp:

// The main function bootstraps into the IFrameworkView.
int __stdcall wWinMain(HINSTANCE, HINSTANCE, PWSTR, int)
{
    winrt::init_apartment();
    CoreApplication::Run(AppViewSource());
    return 0;
}

Vanaf dat moment verwerkt de AppView-klasse interactie met basisinvoergebeurtenissen van Windows, CoreWindow-gebeurtenissen en -berichten, enzovoort. Er wordt ook de HolographicSpace gemaakt die door uw app wordt gebruikt.

Een Win32-project maken

De eenvoudigste manier om aan de slag te gaan met het bouwen van een Win32-holografisch project is door het Win32-voorbeeld BasicHologram aan te passen.

In dit Win32-voorbeeld wordt gebruikgemaakt van C++/WinRT, een C++17-taalprojectie van de Windows Runtime API's die ondersteuning bieden voor elke C++17-compiler die voldoet aan standaarden. Het project laat zien hoe u een wereld-vergrendelde kubus maakt die op 2 meter van de gebruiker is geplaatst. De gebruiker kan op een knop op de controller drukken om de kubus in een andere positie te plaatsen die wordt opgegeven door de blik van de gebruiker. U kunt dit project wijzigen om een mixed reality-app te maken.

Win32-app-ingangspunt

Uw holografische Win32-app wordt gestart in de functie wWinMain in AppMain.cpp. De functie wWinMain maakt de HWND van de app en start de berichtenlus.

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

Vanaf dat moment verwerkt de AppMain-klasse interactie met basisvensterberichten, enzovoort. Er wordt ook de HolographicSpace gemaakt die door uw app wordt gebruikt.

Holografische inhoud weergeven

De map Inhoud van het project bevat klassen voor het weergeven van hologrammen in de holografische ruimte. Het standaard hologram in de sjabloon is een draaiende kubus die op 2 meter afstand van de gebruiker is geplaatst. Het tekenen van deze kubus wordt geïmplementeerd in SpinningCubeRenderer.cpp, dat de volgende belangrijke methoden heeft:

Methode Uitleg
CreateDeviceDependentResources Hiermee laadt u shaders en maakt u het kubusnet.
PositionHologram Hiermee plaatst u het hologram op de locatie die is opgegeven door de opgegeven SpatialPointerPose.
Update Hiermee draait u de kubus en stelt u de modelmatrix in.
Render Hiermee wordt een frame weergegeven met behulp van de hoekpunt- en pixel-shaders.

De submap Shaders bevat vier standaard shader-implementaties:

Arcering Uitleg
GeometryShader.hlsl Een passthrough die de geometrie ongewijzigd laat.
PixelShader.hlsl Geeft de kleurgegevens door. De kleurgegevens worden geïnterpoleerd en toegewezen aan een pixel tijdens de rasterstap.
VertexShader.hlsl Eenvoudige arcering voor het verwerken van hoekpunten op de GPU.
VPRTVertexShader.hlsl Eenvoudige arcering voor het verwerken van hoekpunten op de GPU, die is geoptimaliseerd voor Windows Mixed Reality stereorendering.

VertexShaderShared.hlsl bevat algemene code die wordt gedeeld tussen VertexShader.hlsl en VPRTVertexShader.hlsl.

Opmerking: de Direct3D 12-app-sjabloon bevat ViewInstancingVertexShader.hlslook . Deze variant maakt gebruik van optionele D3D12-functies om stereobeelden efficiënter weer te geven.

De shaders worden gecompileerd wanneer het project wordt gebouwd en geladen in de methode SpinningCubeRenderer::CreateDependentResources .

Interactie met uw hologrammen

Gebruikersinvoer wordt verwerkt in de klasse SpatialInputHandler , die een SpatialInteractionManager-exemplaar ophaalt en zich abonneert op de gebeurtenis SourcePressed . Dit maakt het detecteren van het luchttikbeweging en andere ruimtelijke invoergebeurtenissen mogelijk.

Holografische inhoud bijwerken

Uw mixed reality-app wordt bijgewerkt in een gamelus, die standaard wordt geïmplementeerd in de updatemethode in AppMain.cpp. De methode Update werkt scèneobjecten bij, zoals de draaiende kubus, en retourneert een HolographicFrame-object dat wordt gebruikt om actuele weergave- en projectiematrices te krijgen en om de wisselketen te presenteren.

De methode Render in AppMain.cpp gebruikt het HolographicFrame en geeft het huidige frame weer naar elke holografische camera, op basis van de huidige app en ruimtelijke positioneringsstatus.

Notities

De Windows Mixed Reality app-sjabloon ondersteunt nu compilatie met de beperkingsvlag Spectre ingeschakeld (/Qspectre). Zorg ervoor dat u de spectre-verzachte versie van de MsVC-runtimebibliotheken (Microsoft Visual C++) installeert voordat u een configuratie compileert met spectre-beperking ingeschakeld. Als u de spectre-verzachte C++-bibliotheken wilt installeren, start u het Installatieprogramma van Visual Studio en selecteert u Wijzigen. Navigeer naar Afzonderlijke onderdelen en zoek naar 'spectre'. Schakel de selectievakjes in die overeenkomen met de doelplatforms en DE MSVC-versie waarvoor u spectre-verzachte code moet compileren en klik op Wijzigen om de installatie te starten.

Zie ook