Delen via


Een holografisch DirectX-project maken

Opmerking

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 holografische UWP-appsjabloon van DirectX 11 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 enkele extra mogelijkheden die niet aanwezig zijn in een typische Direct3D UWP-app. De Windows Mixed Reality app-sjabloon kan:

  • Direct3D-apparaatresources verwerken die zijn gekoppeld aan holografische camera's.
  • Camerabuffers ophalen uit het systeem. In het geval van Direct3D12 maakt u holografische backbufferresources en beheert u de levensduur van resources.
  • De invoer van staren verwerken en een beweging herkennen.
  • Ga naar de modus voor stereoweergave op volledig scherm.

Hoe kan 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 mixed reality-app-sjablonen zijn beschikbaar op de Visual Studio-marketplace als webdownload of door ze als extensie te installeren via de Visual Studio-gebruikersinterface.

U kunt nu uw DirectX 11-Windows Mixed Reality-app maken. Opmerking, als u de voorbeeldinhoud wilt verwijderen, plaatst u een opmerking bij 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 Volgende.
  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 alleen HoloLens 2 voor ontwikkeling. Als u ook holoLens (1e generatie) of desktop-Windows Mixed Reality headsets gebruikt, kunt u Minimumversie instellen op Windows 10 versie 1809. Hiervoor zijn enkele 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 het doel en de minimumversies
    Instellen van Windows 10 versie 1903 als doel- en minimumversie

    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 de optie Nieuw aan en selecteer Project in het contextmenu. Het dialoogvenster Nieuw project wordt geopend.
  3. Vouw Aan de linkerkant Geïnstalleerd uit en vouw het taalknooppunt Visual C++ uit.
  4. Navigeer naar het Windows Universal > Holographic-knooppunt 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 alleen HoloLens 2 voor ontwikkeling. Als u ook holoLens (1e generatie) of desktop-Windows Mixed Reality headsets gebruikt, kunt u Minimumversie instellen op Windows 10 versie 1809. Hiervoor zijn enkele 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 het doel en de minimumversies
    Instellen van Windows 10 versie 1903 als doel- en minimumversie

    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 wordt geplaatst. De gebruiker kan op een knop op de controller tikken of drukken om de kubus op 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 Windows Holographic-app-sjabloon, moet u het bestand ms.fxcompile.targets kopiëren uit een Windows Mixed Reality C#-sjabloonproject en het importeren in uw.csproj-bestand om HLSL-bestanden te compileren die u aan uw project toevoegt. Een Direct3D 12-sjabloon is ook 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 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.

Vanaf 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 BasicHologram Win32-voorbeeld aan te passen.

In dit Win32-voorbeeld wordt gebruikgemaakt van C++/WinRT, een C++17-taalprojectie van de Windows Runtime API's die ondersteuning biedt 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 wordt 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-toegangspunt

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.

Vanaf 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 sleutelmethoden heeft:

Methode Uitleg
CreateDeviceDependentResources Laadt arceringen en maakt het kubusnet.
PositionHologram Places 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 shaders-submap bevat vier standaard shader-implementaties:

Arcering Uitleg
GeometryShader.hlsl Een passthrough die de geometrie ongewijzigd laat.
PixelShader.hlsl Doorloopt de kleurgegevens. De kleurgegevens worden geïnterpoleerd en toegewezen aan een pixel tijdens de rasterstap.
VertexShader.hlsl Eenvoudige shader voor het verwerken van hoekpunten op de GPU.
VPRTVertexShader.hlsl Eenvoudige shader voor het verwerken van hoekpunten 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 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 de 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 weer te geven.

Met de methode Render in AppMain.cpp wordt het HolographicFrame gebruikt en wordt het huidige frame weergegeven voor elke holografische camera, afhankelijk van de huidige app en ruimtelijke positiestatus.

Opmerkingen

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

Zie ook