Skapa ett holographic DirectX-projekt

Anteckning

Den här artikeln handlar om äldre inbyggda WinRT-API:er. För nya interna appprojekt rekommenderar vi att du använder OpenXR-API:et.

En holografisk app som du skapar HoloLens en UWP-app (Universal Windows Platform). Om du riktar Windows Mixed Reality headset kan du skapa en UWP-app eller en Win32-app.

DirectX 11 Holographic UWP-appmallen liknar DirectX 11 UWP-appmallen. Mallen innehåller en programloop, en DeviceResources-klass för att hantera Direct3D-enheten och -kontexten samt en förenklad innehållsåtergivningsklass. Den har också en IFrameworkView,precis som andra UWP-appar.

Mixed Reality-appen har dock vissa ytterligare funktioner som inte finns i en typisk Direct3D UWP-app. Den Windows Mixed Reality appmallen kan:

  • Hantera Direct3D-enhetsresurser som är associerade med holografiska kameror.
  • Hämta tillbaka kamerabuffertar från systemet. När det gäller Direct3D12 skapar du holografiska buffertresurser och hanterar resurslivslängder.
  • Hantera blickindata och identifiera en gest.
  • Gå till helskärmsläge för stereoåtergivning.

Hur kommer jag igång?

Installera först verktygen genomatt följa anvisningarna för att Visual Studio 2019 och Windows Mixed Reality appmallar. Appmallarna för mixad verklighet är tillgängliga på Visual Studio Marketplace som en webbnedladdning, eller genom att installera dem som ett tillägg via Visual Studio användargränssnitt.

Nu är du redo att skapa din DirectX 11 Windows Mixed Reality app! Observera att om du vill ta bort exempelinnehållet kommenterar du DRAW_SAMPLE_CONTENT föreprocessor-direktivet i pch.h.

Skapa ett UWP-projekt

När verktygen har installerats,](.. /install-the-tools.md) kan du skapa ett holografiskt DirectX UWP-projekt.

Så här skapar du ett nytt projekt Visual Studio 2019:

  1. Starta Visual Studio.
  2. I avsnittet Kom igång till höger väljer du Skapa ett nytt projekt.
  3. I listrutorna i dialogrutan Skapa ett nytt projekt väljer du C++, Windows Mixed Reality och UWP.
  4. Välj Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Skärmbild av projektmallen för Holographic DirectX 11 C++/WinRT UWP-appen i Visual Studio 2019
    Projektmall för Holographic DirectX 11 C++/WinRT UWP-app Visual Studio 2019

    Viktigt

    Se till att projektmallens namn innehåller "(C++/WinRT)". Om inte har du en äldre version av de holografiska projektmallarna installerade. Om du vill hämta de senaste projektmallarna installerar du dem som ett tillägg Visual Studio 2019.

  5. Välj Nästa.
  6. Fyll i textrutorna Project namn och Plats och markera eller tryck på Skapa. Det holografiska appprojektet skapas.
  7. För utveckling som endast HoloLens 2 ser du till att Målversion och Lägsta version är inställda på Windows 10 version 1903. Om du även riktar in dig HoloLens (första generationen) eller stationära Windows Mixed Reality headset kan du ange Lägsta version till Windows 10 version 1809. Detta kräver vissa versionsanpassade kontroller i koden när du använder nya funktioner i HoloLens 2. Skärmbild av inställning Windows 10 version 1903 som mål- och minimiversioner
    Ange Windows 10 version 1903 som mål- och minimiversioner

    Viktigt

    Om du inte ser Windows 10 version 1903 som ett alternativ har du inte den senaste versionen Windows 10 SDK installerad. Om du vill att det här alternativet ska visas installerar du version 10.0.18362.0 ellersenare av Windows 10 SDK.

Så här skapar du ett nytt projekt Visual Studio 2017:

  1. Starta Visual Studio.
  2. Från Menyn Arkiv pekar du på Ny och väljer Project på snabbmenyn. Dialogrutan Project öppnas.
  3. Expandera Installerat till vänster och expandera noden Visual C++-språk.
  4. Gå till noden Windows Universal > Holographic och välj Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Skärmbild av projektmallen för Holographic DirectX 11 C++/WinRT UWP-appen i Visual Studio 2017
    Projektmall för Holographic DirectX 11 C++/WinRT UWP-app Visual Studio 2017

    Viktigt

    Se till att projektmallens namn innehåller "(C++/WinRT)". Om inte har du en äldre version av de holografiska projektmallarna installerade. Om du vill hämta de senaste projektmallarna installerar du dem som ett tillägg Visual Studio 2017.

  5. Fyll i textrutorna Namn och Plats och välj eller tryck på OK. Det holografiska appprojektet skapas.
  6. För utveckling som endast HoloLens 2 ser du till att Målversion och Lägsta version är inställda på Windows 10 version 1903. Om du även riktar in dig HoloLens (första generationen) eller stationära Windows Mixed Reality headset kan du ange Lägsta version till Windows 10 version 1809. Detta kräver vissa versionsanpassade kontroller i koden när du använder nya funktioner i HoloLens 2. Skärmbild av inställning Windows 10 version 1903 som mål- och minimiversioner
    Ange Windows 10 version 1903 som mål- och minimiversioner

    Viktigt

    Om du inte ser Windows 10 version 1903 som ett alternativ har du inte den senaste versionen Windows 10 SDK installerad. Om du vill att det här alternativet ska visas installerar du version 10.0.18362.0 ellersenare av Windows 10 SDK.

Mallen genererar ett projekt med C++/WinRT, en C++17-språkprojektion av Windows Runtime-API:er som stöder alla standard-kompatibla C++17-kompilatorer. Projektet visar hur du skapar en världslåst kub som placeras 2 meter från användaren. Användaren kan trycka i luften eller trycka på en knapp på kontrollanten för att placera kuben på en annan plats som anges av användarens blick. Du kan ändra det här projektet för att skapa valfri mixed reality-app.

Du kan också skapa ett nytt projekt med hjälp av den holografiska projektmallen i Visual C# som baseras på SharpDX. Om ditt holografiska C#-projekt inte startade från Windows Holographic-appmallen måste du kopiera filen ms.fxcompile.targets från ett Windows Mixed Reality C#-mallprojekt och importera den i filen.csproj för att kompilera HLSL-filer som du lägger till i projektet. En Direct3D 12-mall finns också i Windows Mixed Reality för appmallar i Visual Studio.

Läs Använda Visual Studio för att distribuera och felsöka för information om hur du skapar och distribuerar exemplet till din HoloLens, dator med ansluten avancerad enhet eller en emulator.

Resten av anvisningarna nedan förutsätter att du använder C++ för att skapa din app.

Startpunkt för UWP-app

Din holografiska UWP-app startar i funktionen wWinMain i AppView.cpp. Funktionen wWinMain skapar appens IFrameworkView och startar CoreApplication med den.

Från AppView.cpp:

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

Från och med nu hanterar AppView-klassen interaktion med Windows indatahändelser, CoreWindow-händelser och meddelanden och så vidare. Den skapar även det HolographicSpace som används av din app.

Skapa ett Win32-projekt

Det enklaste sättet att komma igång med att skapa ett Holographic Win32-projekt är att anpassa BasicHologram Win32-exemplet.

Det här Win32-exemplet använder C++/WinRT, en C+++17-språkprojektion av Windows Runtime-API:er som stöder alla standard-kompatibla C++17-kompilatorer. Projektet visar hur du skapar en världslåst kub som placeras 2 meter från användaren. Användaren kan trycka på en knapp på kontrollanten för att placera kuben på en annan plats som anges av användarens blick. Du kan ändra det här projektet för att skapa valfri mixed reality-app.

Startpunkt för Win32-app

Din holografiska Win32-app startar i funktionen wWinMain i AppMain.cpp. Funktionen wWinMain skapar appens HWND och startar meddelandeloopen.

Från 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;
}

Från och med nu hanterar Klassen AppMain interaktionen med grundläggande fönstermeddelanden och så vidare. Den skapar även det HolographicSpace som används av din app.

Rendera holografiskt innehåll

Projektets innehållsmapp innehåller klasser för rendering av hologram i det holografiska utrymmet. Standard hologrammet i mallen är en snurrande kub som placeras 2 meter från användaren. Ritning av den här kuben implementeras i SpinningCubeRenderer.cpp, som har följande nyckelmetoder:

Metod Förklaring
CreateDeviceDependentResources Läser in skuggare och skapar kubnätet.
PositionHologram Placerar hologrammet på den plats som anges av angiven SpatialPointerPose.
Update Roterar kuben och anger modellmatrisen.
Render Renderar en ram med hörn- och pixelnyanser.

Undermappen Shaders innehåller fyra standardimplementeringar av skuggare:

Shader Förklaring
GeometryShader.hlsl En genomsänd som lämnar geometrin oförändrad.
PixelShader.hlsl Passerar genom färgdata. Färgdata interpoleras och tilldelas till en pixel i åtgärdssteget.
VertexShader.hlsl Enkel skuggare för att bearbeta hörn på GPU:n.
VPRTVertexShader.hlsl Enkel skuggare för hörnbearbetning på GPU:n, som är optimerad för Windows Mixed Reality stereoåtergivning.

VertexShaderShared.hlsl innehåller gemensam kod som delas mellan VertexShader.hlsl och VPRTVertexShader.hlsl .

Obs! Direct3D 12-appmallen innehåller också ViewInstancingVertexShader.hlsl . Den här varianten använder valfria D3D12-funktioner för att rendera stereobilder mer effektivt.

Skuggare kompileras när projektet skapas och läses in i metoden SpinningCubeRenderer::CreateDeviceDependentResources.

Interagera med dina hologram

Användarindata bearbetas i klassen SpatialInputHandler, som hämtar en SpatialInteractionManager-instans och prenumererar på händelsen SourcePressed. Detta gör det möjligt att identifiera gesten för lufttryck och andra rumsliga indatahändelser.

Uppdatera holografiskt innehåll

Din mixed reality-app uppdateras i en spelloop, som som standard implementeras i metoden Update i AppMain.cpp . Uppdateringsmetoden uppdaterar scenobjekt, till exempel den snurrande kuben, och returnerar ett HolographicFrame-objekt som används för att hämta uppdaterade matriser för vy och projektion samt för att presentera växlingskedjan.

Render-metoden i tar HolographicFrame och renderar den aktuella ramen till varje holografisk kamera, enligt den aktuella appen och AppMain.cpp det rumsliga placeringstillståndet.

Kommentarer

Nu Windows Mixed Reality appmallen stöd för kompilering med flaggan För minskning aktiverad (/Qspectre). Se till att installera den Version av MSVC-körningsbiblioteken (Microsoft Visual C++) som åtgärdas innan du kompilerar en konfiguration med Åtgärd för begränsning av problem. Om du vill installera De C++-bibliotek som minimerats startar du Visual Studio Installationsprogram och väljer Ändra. Gå till Enskilda komponenter och sök efter "tor". Markera rutorna som motsvarar de målplattformar och DEN MSVC-version som du behöver kompilera Kod som minimerats för Och klicka på Ändra för att påbörja installationen.

Se även