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:
- Spusťte Visual Studio.
- V části Začínáme na pravé straně vyberte Vytvořit nový projekt.
- V rozevíracích nabídkách v dialogovém okně Vytvořit nový projekt vyberte C++, Windows Mixed Reality a UPW.
- Vyberte Holographic DirectX 11 App (Universal Windows) (C++/WinRT) (Holographic DirectX 11 App (Universal Windows) (C++/WinRT).
Šablona projektu aplikace Holographic DirectX 11 C++/WinRT UWP v sadě Visual Studio 2019Dů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.
- Vyberte Další.
- Vyplňte textová pole Název projektu a Umístění a vyberte nebo klepněte na Vytvořit. Vytvoří se projekt holografické aplikace.
- 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.
Nastavení Windows 10 verze 1903 jako cílové a minimální verzeDů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:
- Spusťte Visual Studio.
- V nabídce Soubor přejděte na Nový a v místní nabídce vyberte Projekt . Otevře se dialogové okno Nový projekt .
- Rozbalte Nainstalované na levé straně a rozbalte uzel jazyka Visual C++ .
- Přejděte do uzlu Univerzální > holografický systém Windows a vyberte Aplikace Holographic DirectX 11 (Universal Windows) (C++/WinRT).
Šablona projektu aplikace Holographic DirectX 11 C++/WinRT UWP v sadě Visual Studio 2017Dů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.
- Vyplňte textová pole Název a Umístění a vyberte nebo klepněte na OK. Vytvoří se projekt holografické aplikace.
- 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.
Nastavení Windows 10 verze 1903 jako cílové a minimální verzeDů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.hlsl
také . 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.cpp
ná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.