Een holografische DirectX-project maken

Notitie

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

Een holografische app die u voor een HoloLens maakt, is een UWP-app (Universal Windows Platform). Als u zich richt Windows Mixed Reality headsets, kunt u een UWP-app of een Win32-app maken.

De DirectX 11 holographic 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 inhoudsrenderklasse. Het bevat 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. De Windows Mixed Reality-app-sjabloon kan:

  • Direct3D-apparaatbronnen verwerken die zijn gekoppeld aan holografische camera's.
  • Camerabackbuffers ophalen uit het systeem. In het geval van Direct3D12 maakt u holographic back-bufferresources en beheert u de levensduur van resources.
  • De staringinvoer verwerken en een gebaar herkennen.
  • Ga naar de stereoweergavemodus op volledig scherm.

Hoe ga ik aan de slag?

Installeer eerst de hulpprogramma'svolgens de instructies voor het downloaden Visual Studio 2019 en de Windows Mixed Reality app-sjablonen. De mixed reality-app-sjablonen zijn beschikbaar op de Visual Studio Marketplace als een web-downloadof door ze als extensie te installeren via de Visual Studio UI.

U bent nu klaar om uw DirectX 11-Windows Mixed Reality maken. Opmerking: als u de voorbeeldinhoud wilt verwijderen, moet u de DRAW_SAMPLE_CONTENT preprocessor in pch.h uitcommentareren.

Een UWP-project maken

Zodra de hulpprogramma's zijn geïnstalleerd,](.. /install-the-tools.md) kunt u vervolgens een holografische DirectX UWP-project maken.

Een nieuw project maken in Visual Studio 2019:

  1. Begin Visual Studio.
  2. Selecteer in Aan de slag sectie aan de rechterkant de optie Een nieuw project maken.
  3. Selecteer in de vervolgkeuzemenu's in het dialoogvenster Een nieuw project maken de opties C++, Windows Mixed Reality en UWP.
  4. Selecteer Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Schermopname van de holographic DirectX 11 C++/WinRT UWP-app-appsjabloon in Visual Studio 2019
    Holographic DirectX 11 C++/WinRT UWP-app-app-sjabloon 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 een extensie voor Visual Studio 2019.

  5. Selecteer Next.
  6. Vul de tekstvakken Project naam en Locatie in en selecteer of tik op Maken. Het holografische app-project wordt gemaakt.
  7. Zorg ervoor dat HoloLens 2 doelversie en Minimumversie zijn ingesteld op Windows 10 versie 1903. Als u zich ook richt op HoloLens (eerste generatie) of desktop-Windows Mixed Reality headsets, kunt u Minimumversie instellen op Windows 10 versie 1809. Hiervoor zijn enkele adaptieve versiecontroles in uw code vereist bij het gebruik van nieuwe functies van HoloLens 2. Schermopname van Windows 10, versie 1903 als doel en minimumversies
    Instelling Windows 10 versie 1903 als doel en minimumversies

    Belangrijk

    Als u versie Windows 10 versie 1903 niet als optie ziet, hebt u niet de meest recente Windows 10 SDK geïnstalleerd. Als u wilt dat deze optie wordt weergegeven, installeert u versie 10.0.18362.0 of hogervan de Windows 10 SDK.

Een nieuw project maken in Visual Studio 2017:

  1. Begin Visual Studio.
  2. Wijs in het menu Bestand de optie Nieuw aan en selecteer Project in het contextmenu. Het dialoogvenster Project wordt geopend.
  3. Vouw Geïnstalleerd aan de linkerkant uit en vouw het taal-knooppunt Visual C++ uit.
  4. Navigeer naar Windows Universal > Holographic-knooppunt en selecteer Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Schermopname van de holographic DirectX 11 C++/WinRT UWP-app-appsjabloon in Visual Studio 2017
    Holographic DirectX 11 C++/WinRT UWP-app-app-sjabloon 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 een 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 HoloLens 2 doelversie en Minimumversie zijn ingesteld op Windows 10 versie 1903. Als u zich ook richt op HoloLens (eerste generatie) of desktop-Windows Mixed Reality headsets, kunt u Minimumversie instellen op Windows 10 versie 1809. Hiervoor zijn enkele adaptieve versiecontroles in uw code vereist bij het gebruik van nieuwe functies van HoloLens 2. Schermopname van Windows 10, versie 1903 als doel en minimumversies
    Instelling Windows 10 versie 1903 als doel en minimumversies

    Belangrijk

    Als u versie Windows 10 versie 1903 niet als optie ziet, hebt u niet de meest recente Windows 10 SDK geïnstalleerd. Als u wilt dat deze optie wordt weergegeven, installeert u versie 10.0.18362.0 of hogervan 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 biedt voor elke C++17-compiler die voldoet aan de normen. Het project laat zien hoe u een wereld-vergrendelde kubus maakt die 2 meter van de gebruiker is geplaatst. De gebruiker kan in de lucht tikken of op een knop op de controller drukken om de kubus op een andere positie te plaatsen die is opgegeven door de staring van de gebruiker. U kunt dit project wijzigen om een app mixed reality maken.

U kunt ook een nieuw project maken met behulp van de Visual C#-holographic-projectsjabloon, die is gebaseerd op SharpDX. Als uw holografische C#-project niet is begonnen vanuit de Windows Holographic-app-sjabloon, moet u het bestand ms.fxcompile.targets kopiëren uit een Windows Mixed Reality C#-sjabloonproject en importeren in het bestand your.csproj 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.

Lees Using Visual Studio to deploy and debug (Het gebruik van Visual Studio voor het implementeren en opsporen van fouten) voor informatie over het bouwen en implementeren van het voorbeeld op uw HoloLens- of pc met in immersive device attached of een emulator.

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

Toegangspunt voor UWP-app

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

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 Windows basisinvoergebeurtenissen, CoreWindow-gebeurtenissen en -berichten, en meer. Ook wordt 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 Holographic-project is door het BasicOgram Win32-voorbeeld aan te passen.

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

Ingangspunt voor Win32-app

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

Vanuit 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 klasse AppMain de interactie met eenvoudige vensterberichten, en meer. Ook wordt de HolographicSpace gemaakt die door uw app wordt gebruikt.

Holografische inhoud renderen

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 2 meter van de gebruiker is verwijderd. Het tekenen van deze kubus is geïmplementeerd in SpinningCubeRenderer.cpp, dat de volgende belangrijke methoden heeft:

Methode Uitleg
CreateDeviceDependentResources Hiermee worden shaders geladen en wordt de kubus-mesh gemaakt.
PositionHologram Plaatst 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 Geeft een frame weer met behulp van de hoekpunt- en pixel-shaders.

De submap Shaders bevat vier standaard-shader-implementaties:

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

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

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

De shaders worden ge compileerd wanneer het project wordt gebouwd en geladen in de methode SpinningCubeRenderer::CreateDeviceDependentResources.

Interactie met uw hologrammen

Gebruikersinvoer wordt verwerkt in de klasse SpatialInputHandler, die een SpatialInteractionManager-exemplaar krijgt en zich abonneert op de gebeurtenis SourcePressed. Hiermee kunt u de beweging in de lucht en andere ruimtelijke invoergebeurtenissen detecteren.

Holografische inhoud bijwerken

Uw mixed reality app-updates in een gamelus, die standaard wordt geïmplementeerd in de updatemethode in AppMain.cpp . De updatemethode werkt scèneobjecten bij, zoals de draaiende kubus, en retourneert een HolographicFrame-object dat wordt gebruikt om up-to-date weergave- en projectie-matrices te krijgen en om de wisselingsketen weer te geven.

De render-methode in AppMain.cpp neemt het HolographicFrame en geeft het huidige frame weer voor elke holografische camera, op basis van de huidige app en de status van de ruimtelijke plaatsing.

Notities

De Windows Mixed Reality-app-sjabloon ondersteunt nu compilatie met de beperkingsvlag Specificatie ingeschakeld (/Qspectre). Zorg ervoor dat u de met Specificatie beperkt versie van de Microsoft Visual C++ (MSVC)-runtimebibliotheken installeert voordat u een configuratie compileert met Specificatiebeperking ingeschakeld. Als u de met Spectre beperkt C++-bibliotheken wilt installeren, start u het Visual Studio installatieprogramma en selecteert u Wijzigen. Navigeer naar Afzonderlijke onderdelen en zoek naar 'specificatie'. Selecteer de selectievakjes die overeenkomen met de doelplatforms en DE MSVC-versie die u nodig hebt voor het compileren van door Spectre beperkt code en klik op Wijzigen om de installatie te starten.

Zie ook