Tworzenie projektu Holographic DirectX

Uwaga

Ten artykuł dotyczy starszych natywnych interfejsów API winRT. W przypadku nowych projektów aplikacji natywnych zalecamy użycie interfejsu API OpenXR.

Aplikacja holograficzne utworzona dla urządzenia HoloLens będzie aplikacją platforma uniwersalna systemu Windows (UWP). Jeśli jest przeznaczona dla komputerów stacjonarnych Windows Mixed Reality zestawów słuchawkowych, możesz utworzyć aplikację platformy UWP lub aplikację Win32.

Szablon aplikacji platformy UNIWERSALNEJ platformy uniwersalnej systemu Windows DirectX 11 jest podobny do szablonu aplikacji platformy UWP directX 11. Szablon zawiera pętlę programu, klasę DeviceResources do zarządzania urządzeniem i kontekstem Direct3D oraz uproszczoną klasę renderowania zawartości. Ma również element IFrameworkView, podobnie jak każda inna aplikacja platformy UWP.

Aplikacja rzeczywistości mieszanej ma jednak pewne dodatkowe możliwości, które nie są obecne w typowej aplikacji platformy UWP direct3D. Szablon aplikacji Windows Mixed Reality może wykonywać następujące czynności:

  • Obsługa zasobów urządzeń Direct3D skojarzonych z kamerami holograficznymi.
  • Pobierz bufory aparatu z powrotem z systemu. W przypadku usługi Direct3D12 utwórz zasoby buforu zaplecza holograficznego i zarządzaj okresami istnienia zasobów.
  • Obsługa danych wejściowych spojrzenia i rozpoznawanie gestu.
  • Przejdź do trybu renderowania stereo na pełnym ekranie.

Jak rozpocząć?

Najpierw zainstaluj narzędzia, postępując zgodnie z instrukcjami dotyczącymi pobierania programu Visual Studio 2019 i szablonów aplikacji Windows Mixed Reality. Szablony aplikacji rzeczywistości mieszanej są dostępne w witrynie Visual Studio Marketplace jako pobieranie w internecie lub przez zainstalowanie ich jako rozszerzenia za pośrednictwem interfejsu użytkownika programu Visual Studio.

Teraz możesz utworzyć aplikację directX 11 Windows Mixed Reality! Uwaga: aby usunąć przykładową zawartość, oznacz jako komentarz dyrektywę preprocesora DRAW_SAMPLE_CONTENT w pch.h.

Tworzenie projektu platformy UWP

Po zainstalowaniu narzędzi można utworzyć holographic DirectX UWP projektu.

Aby utworzyć nowy projekt w programie Visual Studio 2019:

  1. Uruchom program Visual Studio.
  2. W sekcji Wprowadzenie po prawej stronie wybierz pozycję Utwórz nowy projekt.
  3. W menu rozwijanym w oknie dialogowym Tworzenie nowego projektu wybierz pozycję C++, Windows Mixed Reality i uwP.
  4. Wybierz pozycję Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Zrzut ekranu przedstawiający szablon projektu aplikacji platformy UWP w języku Holographic DirectX 11 C++/WinRT w programie Visual Studio 2019
    Holographic DirectX 11 C++/WinRT UWP szablon projektu aplikacji w programie Visual Studio 2019

    Ważne

    Upewnij się, że nazwa szablonu projektu zawiera ciąg "(C++/WinRT)". Jeśli nie, masz zainstalowaną starszą wersję szablonów projektu holograficznego. Aby uzyskać najnowsze szablony projektów, zainstaluj je jako rozszerzenie do programu Visual Studio 2019.

  5. Wybierz opcję Dalej.
  6. Wypełnij pola tekstowe Nazwa projektu i Lokalizacja , a następnie wybierz lub naciśnij pozycję Utwórz. Zostanie utworzony projekt aplikacji holograficznej.
  7. W przypadku programowania przeznaczonego tylko HoloLens 2 upewnij się, że dla wersji docelowej i wersji minimalnej ustawiono wartość Windows 10 w wersji 1903. Jeśli dotyczysz również urządzeń HoloLens (1. generacji) lub zestawów słuchawkowych Windows Mixed Reality klasycznych, możesz ustawić opcję Minimalna wersja na Windows 10, wersja 1809. W przypadku korzystania z nowych funkcji HoloLens 2 wymaga to kontroli adaptacyjnej wersji w kodzie. Zrzut ekranu przedstawiający ustawianie Windows 10 wersji 1903 jako wersji docelowej i minimalnej
    Ustawianie Windows 10 wersji 1903 jako wersji docelowej i minimalnej

    Ważne

    Jeśli nie widzisz Windows 10, wersja 1903 jako opcja, nie masz zainstalowanego najnowszego zestawu SDK Windows 10. Aby wyświetlić tę opcję, zainstaluj wersję 10.0.18362.0 lub nowszą Windows 10 SDK.

Aby utworzyć nowy projekt w programie Visual Studio 2017:

  1. Uruchom program Visual Studio.
  2. W menu Plik wskaż pozycję Nowy i wybierz pozycję Projekt z menu kontekstowego. Zostanie otwarte okno dialogowe Nowy projekt .
  3. Rozwiń węzeł Zainstalowane po lewej stronie i rozwiń węzeł języka Visual C++ .
  4. Przejdź do węzła Uniwersalnego > holograficznego systemu Windows i wybierz pozycję Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Zrzut ekranu przedstawiający szablon projektu aplikacji platformy UWP w języku Holographic DirectX 11 C++/WinRT w programie Visual Studio 2017
    Holographic DirectX 11 C++/WinRT UWP szablon projektu aplikacji w programie Visual Studio 2017

    Ważne

    Upewnij się, że nazwa szablonu projektu zawiera ciąg "(C++/WinRT)". Jeśli nie, masz zainstalowaną starszą wersję szablonów projektu holograficznego. Aby uzyskać najnowsze szablony projektów, zainstaluj je jako rozszerzenie do programu Visual Studio 2017.

  5. Wypełnij pola tekstowe Nazwa i Lokalizacja , a następnie wybierz lub naciśnij przycisk OK. Zostanie utworzony projekt aplikacji holograficznej.
  6. W przypadku programowania przeznaczonego tylko HoloLens 2 upewnij się, że dla wersji docelowej i wersji minimalnej ustawiono wartość Windows 10 w wersji 1903. Jeśli dotyczysz również urządzeń HoloLens (1. generacji) lub zestawów słuchawkowych Windows Mixed Reality klasycznych, możesz ustawić opcję Minimalna wersja na Windows 10, wersja 1809. W przypadku korzystania z nowych funkcji HoloLens 2 wymaga to kontroli adaptacyjnej wersji w kodzie. Zrzut ekranu przedstawiający ustawianie Windows 10 wersji 1903 jako wersji docelowej i minimalnej
    Ustawianie Windows 10 wersji 1903 jako wersji docelowej i minimalnej

    Ważne

    Jeśli nie widzisz Windows 10, wersja 1903 jako opcja, nie masz zainstalowanego najnowszego zestawu SDK Windows 10. Aby wyświetlić tę opcję, zainstaluj wersję 10.0.18362.0 lub nowszą Windows 10 SDK.

Szablon generuje projekt przy użyciu języka C++/WinRT, projekcji języka C++17 interfejsów API środowisko wykonawcze systemu Windows obsługujących dowolne kompilator C++17 zgodne ze standardami. W projekcie pokazano, jak utworzyć na świecie zablokowany moduł, który został umieszczony na 2 metrach od użytkownika. Użytkownik może nacisnąć lub nacisnąć przycisk na kontrolerze, aby umieścić moduł w innej pozycji określonej przez spojrzenie użytkownika. Ten projekt można zmodyfikować, aby utworzyć dowolną aplikację rzeczywistości mieszanej.

Możesz również utworzyć nowy projekt przy użyciu szablonu projektu holograficznego visual C# , który jest oparty na technologii SharpDX. Jeśli projekt holographic C# nie rozpoczął się od szablonu aplikacji Systemu Windows Holographic, musisz skopiować plik ms.fxcompile.targets z projektu szablonu Windows Mixed Reality C# i zaimportować go w pliku csproj, aby skompilować pliki HLSL dodane do projektu. Szablon Direct3D 12 jest również dostępny w rozszerzeniu szablonów aplikacji Windows Mixed Reality do programu Visual Studio.

Zapoznaj się z artykułem Używanie programu Visual Studio do wdrażania i debugowania, aby uzyskać informacje na temat tworzenia i wdrażania przykładu na urządzeniu HoloLens, komputerze z dołączonym immersywnym urządzeniem lub emulatorem.

W pozostałych poniższych instrukcjach założono, że używasz języka C++ do kompilowania aplikacji.

Punkt wejścia aplikacji platformy UNIWERSALNEJ systemu Windows

Aplikacja holograficzne platformy UWP jest uruchamiana w funkcji wWinMain w aplikacji AppView.cpp. Funkcja wWinMain tworzy element IFrameworkView aplikacji i uruchamia aplikację CoreApplication .

Z aplikacji 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 tego momentu klasa AppView obsługuje interakcję z podstawowymi zdarzeniami wejściowymi systemu Windows, zdarzeniami CoreWindow i komunikatami itd. Spowoduje to również utworzenie przestrzeni holographicspace używanej przez aplikację.

Tworzenie projektu Win32

Najprostszym sposobem rozpoczęcia tworzenia projektu holograficznego Win32 jest dostosowanie przykładu BasicHologram Win32.

Ten przykład Win32 używa języka C++/WinRT, projekcji języka C++17 interfejsów API środowisko wykonawcze systemu Windows, które obsługują dowolny kompilator C++17 zgodny ze standardami. W projekcie pokazano, jak utworzyć na świecie zablokowany moduł, który został umieszczony na 2 metrach od użytkownika. Użytkownik może nacisnąć przycisk na kontrolerze, aby umieścić moduł w innej pozycji określonej przez spojrzenie użytkownika. Ten projekt można zmodyfikować, aby utworzyć dowolną aplikację rzeczywistości mieszanej.

Punkt wejścia aplikacji Win32

Aplikacja Holographic Win32 jest uruchamiana w funkcji wWinMain w aplikacji AppMain.cpp. Funkcja wWinMain tworzy HWND aplikacji i uruchamia pętlę komunikatów.

Z pliku 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 tego momentu klasa AppMain obsługuje interakcję z podstawowymi komunikatami okna itd. Spowoduje to również utworzenie przestrzeni holographicspace używanej przez aplikację.

Renderowanie zawartości holograficznej

Folder Content projektu zawiera klasy renderowania hologramów w przestrzeni holograficznej. Domyślny hologram w szablonie to wirujący moduł umieszczony 2 metrów od użytkownika. Rysowanie tego modułu jest implementowane w pliku SpinningCubeRenderer.cpp, który ma następujące kluczowe metody:

Metoda Wyjaśnienie
CreateDeviceDependentResources Ładuje cieniowania i tworzy siatkę modułu.
PositionHologram Umieszcza hologram w lokalizacji określonej przez podany element SpatialPointerPose.
Update Obraca moduł i ustawia macierz modelu.
Render Renderuje ramkę przy użyciu cieniowania wierzchołków i pikseli.

Podfolder Shaders zawiera cztery domyślne implementacje cieniowania:

Modułu cieniującego Wyjaśnienie
GeometryShader.hlsl Przekazywanie, które pozostawia geometrię niezmodyfikowaną.
PixelShader.hlsl Przechodzi przez dane kolorów. Dane kolorów są interpolowane i przypisywane do piksela w kroku rasteryzacji.
VertexShader.hlsl Proste cieniowania do przetwarzania wierzchołków na procesorze GPU.
VPRTVertexShader.hlsl Proste cieniowanie do przetwarzania wierzchołków na procesorze GPU, który jest zoptymalizowany pod kątem Windows Mixed Reality renderowania stereo.

VertexShaderShared.hlsl zawiera wspólny kod współużytkowany między elementami VertexShader.hlsl i VPRTVertexShader.hlsl.

Uwaga: szablon aplikacji Direct3D 12 zawiera ViewInstancingVertexShader.hlslrównież element . Ten wariant używa opcjonalnych funkcji D3D12 do wydajniejszego renderowania obrazów stereo.

Cieniowanie kompiluje się podczas kompilowania projektu i jest ładowany do metody SpinningCubeRenderer::CreateDeviceDependentResources .

Interakcja z hologramami

Dane wejściowe użytkownika są przetwarzane w klasie SpatialInputHandler , która pobiera wystąpienie SpatialInteractionManager i subskrybuje zdarzenie SourcePressed . Umożliwia to wykrywanie gestu naciśnięcia powietrza i innych zdarzeń danych wejściowych przestrzennych.

Aktualizowanie zawartości holograficznej

Aplikacja rzeczywistości mieszanej jest aktualizowana w pętli gry, która domyślnie jest implementowana w metodzie Update w pliku AppMain.cpp. Metoda Update aktualizuje obiekty sceny, takie jak moduł wirujący, i zwraca obiekt HolographicFrame , który służy do pobierania aktualnych macierzy widoków i projekcji oraz przedstawiania łańcucha wymiany.

Metoda Render w AppMain.cpp metodzie przyjmuje element HolographicFrame i renderuje bieżącą ramkę do każdej kamery holograficznej zgodnie z bieżącą aplikacją i stanem pozycjonowania przestrzennego.

Uwagi

Szablon aplikacji Windows Mixed Reality obsługuje teraz kompilację z włączoną flagą ograniczania ryzyka Spectre (/Qspectre). Przed skompilowaniem konfiguracji z włączonym ograniczeniem ryzyka spectre należy zainstalować wersję bibliotek środowiska uruchomieniowego Microsoft Visual C++ (MSVC). Aby zainstalować biblioteki języka C++ z ograniczeniem ryzyka spectre, uruchom Instalator programu Visual Studio i wybierz pozycję Modyfikuj. Przejdź do obszaru Poszczególne składniki i wyszukaj frazę "spectre". Zaznacz pola odpowiadające platformom docelowym i wersji MSVC, dla których należy skompilować kod z ograniczeniem ryzyka spectre, a następnie kliknij przycisk Modyfikuj , aby rozpocząć instalację.

Zobacz też