Vytvoření holografického projektu DirectX

Poznámka

Tento článek se týká starších nativních rozhraní API WinRT. Pro nové projekty nativních aplikací doporučujeme použít rozhraní OpenXR API.

Holografická aplikace, kterou vytvoříte pro HoloLens, bude aplikace Univerzální platforma Windows (UPW). Pokud cílíte na stolní Windows Mixed Reality náhlavní soupravy, můžete vytvořit aplikaci pro UPW nebo aplikaci Win32.

Šablona holografické aplikace DirectX 11 pro UPW se podobá šabloně aplikace Pro UPW v DirectX 11. Šablona obsahuje smyčku programu, třídu DeviceResources pro správu zařízení a kontextu Direct3D a zjednodušenou třídu vykreslovače obsahu. Má také IFrameworkView, stejně jako jakákoli jiná aplikace pro UPW.

Aplikace hybridní reality má ale některé další funkce, které nejsou v typické aplikaci Direct3D pro UPW k dispozici. Šablona aplikace Windows Mixed Reality může:

  • Zpracování prostředků zařízení Direct3D přidružených k holografickým kamerám
  • Načtěte vyrovnávací paměť kamery ze systému. V případě Direct3D12 vytvořte prostředky holografické zpětné vyrovnávací paměti a spravujte jejich životnost.
  • Zpracujte vstup pohledu a rozpoznáte gesto.
  • Přejděte do režimu stereo vykreslování na celou obrazovku.

Jak mám začít?

Nejprve nainstalujte nástroje podle pokynů ke stažení sady Visual Studio 2019 a šablon aplikací Windows Mixed Reality. Šablony aplikací pro hybridní realitu jsou k dispozici na webu Visual Studio Marketplace jako soubory ke stažení z webu nebo jejich instalací jako rozšíření prostřednictvím uživatelského rozhraní sady Visual Studio.

Teď můžete vytvořit aplikaci DirectX 11 Windows Mixed Reality. Poznámka: Pokud chcete odebrat ukázkový obsah, zakomentujte direktivu DRAW_SAMPLE_CONTENT preprocesoru v pch.h.

Vytvoření projektu UPW

Po instalaci nástrojů pak můžete vytvořit holografický projekt DirectX UPW.

Vytvoření nového projektu v sadě Visual Studio 2019:

  1. Spusťte Visual Studio.
  2. V části Začínáme na pravé straně vyberte Vytvořit nový projekt.
  3. V rozevíracích nabídkách v dialogovém okně Vytvořit nový projekt vyberte C++, Windows Mixed Reality a UPW.
  4. Vyberte Holographic DirectX 11 App (Universal Windows) (C++/WinRT) (Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Snímek obrazovky se šablonou projektu aplikace Holographic DirectX 11 pro C++/WinRT pro UPW v sadě Visual Studio 2019
    Šablona projektu aplikace Holographic DirectX 11 C++/WinRT UWP v sadě Visual Studio 2019

    Důležité

    Ujistěte se, že název šablony projektu obsahuje "(C++/WinRT)". Pokud ne, máte nainstalovanou starší verzi šablon holografických projektů. Pokud chcete získat nejnovější šablony projektů, nainstalujte je jako rozšíření sady Visual Studio 2019.

  5. Vyberte Další.
  6. Vyplňte textová pole Název projektu a Umístění a vyberte nebo klepněte na Vytvořit. Vytvoří se projekt holografické aplikace.
  7. Pokud chcete cílit na vývoj jenom HoloLens 2, ujistěte se, že cílová verze a minimální verze jsou nastavené na Windows 10 verze 1903. Pokud cílíte také na HoloLens (1. generace) nebo desktopové Windows Mixed Reality náhlavní soupravy, můžete nastavit Minimální verzina Windows 10 verze 1809. To bude vyžadovat adaptivní kontroly verzí v kódu při použití nových funkcí HoloLens 2. Snímek obrazovky s nastavením Windows 10 verze 1903 jako cílové a minimální verze
    Nastavení Windows 10 verze 1903 jako cílové a minimální verze

    Důležité

    Pokud možnost Windows 10 verze 1903 nevidíte, nemáte nainstalovanou nejnovější sadu Windows 10 SDK. Aby se tato možnost zobrazila, nainstalujte Windows 10 SDK verze 10.0.18362.0 nebo novější.

Vytvoření nového projektu v sadě Visual Studio 2017:

  1. Spusťte Visual Studio.
  2. V nabídce Soubor přejděte na Nový a v místní nabídce vyberte Projekt . Otevře se dialogové okno Nový projekt .
  3. Rozbalte Nainstalované na levé straně a rozbalte uzel jazyka Visual C++ .
  4. Přejděte do uzlu Univerzální > holografický systém Windows a vyberte Aplikace Holographic DirectX 11 (Universal Windows) (C++/WinRT). Snímek obrazovky se šablonou projektu aplikace Holographic DirectX 11 pro C++/WinRT PRO UPW v sadě Visual Studio 2017
    Šablona projektu aplikace Holographic DirectX 11 C++/WinRT UWP v sadě Visual Studio 2017

    Důležité

    Ujistěte se, že název šablony projektu obsahuje "(C++/WinRT)". Pokud ne, máte nainstalovanou starší verzi šablon holografických projektů. Pokud chcete získat nejnovější šablony projektů, nainstalujte je jako rozšíření sady Visual Studio 2017.

  5. Vyplňte textová pole Název a Umístění a vyberte nebo klepněte na OK. Vytvoří se projekt holografické aplikace.
  6. Pokud chcete cílit na vývoj jenom HoloLens 2, ujistěte se, že cílová verze a minimální verze jsou nastavené na Windows 10 verze 1903. Pokud cílíte také na HoloLens (1. generace) nebo desktopové Windows Mixed Reality náhlavní soupravy, můžete nastavit Minimální verzina Windows 10 verze 1809. To bude vyžadovat adaptivní kontroly verzí v kódu při použití nových funkcí HoloLens 2. Snímek obrazovky s nastavením Windows 10 verze 1903 jako cílové a minimální verze
    Nastavení Windows 10 verze 1903 jako cílové a minimální verze

    Důležité

    Pokud možnost Windows 10 verze 1903 nevidíte, nemáte nainstalovanou nejnovější sadu Windows 10 SDK. Aby se tato možnost zobrazila, nainstalujte Windows 10 SDK verze 10.0.18362.0 nebo novější.

Šablona vygeneruje projekt pomocí C++/WinRT, projekce jazyka C++17 rozhraní API prostředí Windows Runtime, která podporuje jakýkoli kompilátor C++17 kompatibilní se standardy. Projekt ukazuje, jak vytvořit světem uzamčenou datovou krychli, která je umístěná 2 metry od uživatele. Uživatel může klepnutím nebo stisknutím tlačítka na ovladač umístit datovou krychli na jinou pozici určenou pohledem uživatele. Tento projekt můžete upravit a vytvořit libovolnou aplikaci hybridní reality.

Nový projekt můžete také vytvořit pomocí šablony holografického projektu Visual C# , která je založená na SharpDX. Pokud projekt holografického jazyka C# nespustili ze šablony aplikace Windows Holographic, budete muset zkopírovat soubor ms.fxcompile.targets z projektu šablony Windows Mixed Reality C# a naimportovat ho do souboru your.csproj, abyste zkompilovali soubory HLSL, které přidáte do projektu. Šablona Direct3D 12 je také k dispozici v rozšíření šablon Windows Mixed Reality aplikací pro Visual Studio.

Informace o tom, jak sestavit a nasadit ukázku do HoloLensu, počítače s připojeným imerzivním zařízením nebo emulátorem, najdete v tématu Použití sady Visual Studio k nasazení a ladění .

Ve zbývajících pokynech níže se předpokládá, že k sestavení aplikace používáte jazyk C++.

Vstupní bod aplikace pro UPW

Vaše holografická aplikace pro UPW se spustí ve funkci wWinMain v AppView.cpp. Funkce wWinMain vytvoří objekt IFrameworkView aplikace a spustí s ním CoreApplication .

Z AppView.cpp:

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

Od tohoto okamžiku třída AppView zpracovává interakci s událostmi základního vstupu Windows, událostmi CoreWindow a zasíláním zpráv atd. Vytvoří také HolographicSpace, který vaše aplikace používá.

Vytvoření projektu Win32

Nejjednodušší způsob, jak začít vytvářet holografický projekt Win32, je přizpůsobit ukázku BasicHologram Win32.

Tato ukázka Win32 používá C++/WinRT, projekce jazyka C++17 rozhraní PROSTŘEDÍ WINDOWS RUNTIME API, která podporuje jakýkoli kompilátor C++17 kompatibilní se standardy. Projekt ukazuje, jak vytvořit světem uzamčenou datovou krychli, která je umístěná 2 metry od uživatele. Uživatel může stisknout tlačítko na ovladači a umístit datovou krychli do jiné pozice, která je určena pohledem uživatele. Tento projekt můžete upravit a vytvořit libovolnou aplikaci hybridní reality.

Vstupní bod aplikace Win32

Vaše holografická aplikace Win32 se spustí ve funkci wWinMain v AppMain.cpp. Funkce wWinMain vytvoří HWND aplikace a spustí její smyčku zpráv.

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

Od tohoto okamžiku třída AppMain zpracovává interakci se základními zprávami okna atd. Vytvoří také HolographicSpace, který vaše aplikace používá.

Vykreslení holografického obsahu

Složka Obsahu projektu obsahuje třídy pro vykreslování hologramů v holografickém prostoru. Výchozí hologram v šabloně je rotující datová krychle, která je umístěná 2 metry od uživatele. Vykreslení této datové krychle je implementováno v souboru SpinningCubeRenderer.cpp, který má tyto klíčové metody:

Metoda Vysvětlení
CreateDeviceDependentResources Načte shadery a vytvoří síť datové krychle.
PositionHologram Umístí hologram na místo určené zadaným parametrem SpatialPointerPose.
Update Otočí datovou krychli a nastaví matici modelu.
Render Vykreslí rámeček pomocí vrcholů a pixelových shaderů.

Podsložka Shaders obsahuje čtyři výchozí implementace shaderu:

Shader Vysvětlení
GeometryShader.hlsl Průchozí, který ponechá geometrii nezměněnou.
PixelShader.hlsl Předává data barev. Data barev jsou interpolována a přiřazena pixelu v kroku rastrování.
VertexShader.hlsl Jednoduchý shader pro zpracování vrcholů na GPU.
VPRTVertexShader.hlsl Jednoduchý shader pro zpracování vrcholů na GPU, který je optimalizovaný pro Windows Mixed Reality stereo vykreslování.

VertexShaderShared.hlsl obsahuje společný kód sdílený mezi VertexShader.hlsl a VPRTVertexShader.hlsl.

Poznámka: Šablona aplikace Direct3D 12 obsahuje ViewInstancingVertexShader.hlsltaké . Tato varianta využívá volitelné funkce D3D12 k efektivnějšímu vykreslování stereo obrázků.

Shadery se kompilují při sestavení projektu a načtou se do metody SpinningCubeRenderer::CreateDeviceDependentResources .

Interakce s hologramy

Uživatelský vstup je zpracován v SpatialInputHandler třída, která získá SpatialInteractionManager instance a přihlásí se k odběru SourcePressed událostí. To umožňuje detekovat gesto klepnutí ve vzduchu a další události prostorového vstupu.

Aktualizace holografického obsahu

Aplikace hybridní reality se aktualizuje ve smyčce hry, která je ve výchozím nastavení implementovaná metodou Update v AppMain.cppnástroji . Metoda Update aktualizuje objekty scény, jako je rotující datová krychle, a vrátí objekt HolographicFrame , který se používá k získání aktuálních matic zobrazení a projekce a k zobrazení řetězce prohození.

Metoda Render v AppMain.cpp nástroji vezme HolographicFrame a vykresluje aktuální snímek do každé holografické kamery podle aktuální aplikace a stavu prostorového umístění.

Poznámky

Šablona aplikace Windows Mixed Reality teď podporuje kompilaci s povoleným příznakem omezení rizik Spectre (/Qspectre). Před kompilací konfigurace s povoleným zmírněním rizik spectre nezapomeňte nainstalovat verzi knihoven modulu runtime Microsoft Visual C++ (MSVC) se zmírněním zabezpečení Spectre. Pokud chcete nainstalovat knihovny C++ se zmírněním rizik spectre, spusťte Instalační program pro Visual Studio a vyberte Změnit. Přejděte do části Jednotlivé komponenty a vyhledejte "spectre". Zaškrtněte políčka odpovídající cílovým platformám a verzi MSVC, pro které potřebujete zkompilovat kód zmírněný spectrem, a kliknutím na Změnit spusťte instalaci.

Viz také