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 Universeel Windows-platform (UWP)-app. 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 is vergelijkbaar met de DirectX 11 UWP-appsjabloon. 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 het volgende doen:

  • Direct3D-apparaatbronnen verwerken die zijn gekoppeld aan holografische camera's.
  • Camera terug buffers ophalen uit het systeem. In het geval van Direct3D12 maakt u holografische backbufferresources en beheert u de levensduur van resources.
  • Greep de invoer van de blik en herken een beweging.
  • 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 sjablonen voor mixed reality-apps zijn beschikbaar op de Visual Studio Marketplace als webdownload of door ze te installeren als een extensie via de Visual Studio-gebruikersinterface.

U kunt nu uw DirectX 11 Windows Mixed Reality-app maken. Opmerking: als u de voorbeeldinhoud wilt verwijderen, markeert u de DRAW_SAMPLE_CONTENT preprocessorrichtlijn 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. Startmenu Visual Studio.
  2. Selecteer in de sectie Aan de slag aan de rechterkant de optie Een nieuw project maken.
  3. Selecteer in de vervolgkeuzelijsten in het dialoogvenster Een nieuw project makenC++, Windows Mixed Reality en UWP.
  4. Selecteer Holographic DirectX 11-app (Universal Windows) (C++/WinRT). Screenshot of the Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2019
    Holographic DirectX 11 C++/WinRT UWP-app-projectsjabloon 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 Project naam en locatie in en selecteer of tik op Maken. Het holografische app-project wordt gemaakt.
  7. Zorg ervoor dat de doelversie en de minimumversie zijn ingesteld op Windows 10 versie 1903 voor ontwikkeling die alleen 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 adaptieve controles van versies in uw code vereist wanneer u nieuwe functies van HoloLens 2 gebruikt. Screenshot of setting Windows 10, version 1903 as the target and minimum versions
    Windows 10 versie 1903 instellen als doelversie en minimale versies

    Belangrijk

    Als u Windows 10 versie 1903 niet ziet als optie, 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. Startmenu Visual Studio.
  2. Wijs in het menu Bestand de optie Nieuw aan en selecteer Project in het contextmenu. Het dialoogvenster Nieuwe Project wordt geopend.
  3. Vouw Geïnstalleerd aan de linkerkant uit en vouw het taalknooppunt Visual C++ uit.
  4. Navigeer naar het knooppunt Windows Universal > Holographic en selecteer Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Screenshot of the Holographic DirectX 11 C++/WinRT UWP app project template 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 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 de doelversie en de minimumversie zijn ingesteld op Windows 10 versie 1903 voor ontwikkeling die alleen 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 adaptieve controles van versies in uw code vereist wanneer u nieuwe functies van HoloLens 2 gebruikt. Screenshot of setting Windows 10, version 1903 as the target and minimum versions
    Windows 10 versie 1903 instellen als doelversie en minimale versies

    Belangrijk

    Als u Windows 10 versie 1903 niet ziet als optie, 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 een C++17-compiler die compatibel is met standaarden. Het project laat zien hoe u een wereldwijd vergrendelde kubus maakt die op 2 meter van de gebruiker wordt geplaatst. De gebruiker kan luchttikken of op een knop op de controller 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 elke mixed reality-app te maken.

U kunt ook een nieuw project maken met behulp van de visual C# -holografische projectsjabloon, die is gebaseerd op SharpDX. Als uw holografische C#-project niet is gestart vanuit de sjabloon Windows Holographic-app, moet u het bestand ms.fxcompile.targets kopiëren uit een Windows Mixed Reality C#-sjabloonproject en dit 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 Using using Visual Studio to deploy and debug for information on how to build and deploy the sample to your HoloLens, pc with immersive device attached, or an emulator.

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

UWP-app-toegangspunt

Uw holografische UWP-app wordt gestart in de wWinMain-functie in AppView.cpp. De wWinMain-functie 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 Windows basisinvoerevenementen, CoreWindow-gebeurtenissen en -berichten, enzovoort. 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 holografisch project is het aanpassen van het BasicHologram Win32-voorbeeld.

In dit Win32-voorbeeld wordt gebruikgemaakt van C++/WinRT, een C++17-taalprojectie van de Windows Runtime API's die ondersteuning bieden voor een C++17-compiler die compatibel is met standaarden. Het project laat zien hoe u een wereldwijd 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 op een andere positie te plaatsen die is opgegeven door de blik van de gebruiker. U kunt dit project wijzigen om elke mixed reality-app te maken.

Win32-app-toegangspunt

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

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 eenvoudige vensterberichten, enzovoort. Ook wordt 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 2 meter van de gebruiker wordt geplaatst. Het tekenen van deze kubus wordt geïmplementeerd in SpinningCubeRenderer.cpp, die de volgende belangrijke methoden heeft:

Methode Uitleg
CreateDeviceDependentResources Laadt shaders en creëert de kubusmaas.
PositionHologram Hiermee plaatst u het hologram op de locatie die is opgegeven door de opgegeven SpatialPointerPose.
Update Draait de kubus en stelt de modelmatrix in.
Render Geeft een frame weer met behulp van het 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 Doorloopt de kleurgegevens. De kleurgegevens worden geïnterpoleerd en toegewezen aan een pixel in de rasteriseringsstap.
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 stereo rendering.

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 D3D12 optionele functies om stereoafbeeldingen efficiënter weer te geven.

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

Interactie met uw hologrammen

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

Holografische inhoud bijwerken

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

De Render-methode neemt AppMain.cpp het HolographicFrame en geeft het huidige frame weer voor elke holografische camera, afhankelijk van de huidige app en ruimtelijke plaatsingsstatus.

Notities

De Windows Mixed Reality app-sjabloon biedt nu ondersteuning voor compilatie met de vlag Spectre mitigation enabled (/Qspectre). Zorg ervoor dat u de op spectre beperkt versie van de MSVC-runtimebibliotheken (Microsoft Visual C++) installeert voordat u een configuratie compileert waarvoor Spectre-risicobeperking is ingeschakeld. Als u de met Spectre beperkte C++-bibliotheken wilt installeren, start u het Visual Studio-installatieprogramma 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 code met spectre-verzacht moet compileren en klik op Wijzigen om de installatie te starten.

Zie ook