Поделиться через


Создание голографического проекта в DirectX

Примечание

Эта статья относится к устаревшим собственным API-интерфейсам WinRT. Для новых проектов собственных приложений рекомендуется использовать API OpenXR.

Голографическое приложение, создаваемое для HoloLens, будет универсальная платформа Windows (UWP). Если вы используете настольные Windows Mixed Reality гарнитуры, вы можете создать приложение UWP или приложение Win32.

Шаблон голографического приложения UWP для DirectX 11 во многом похож на шаблон приложения UWP для DirectX 11. Шаблон включает цикл программы, класс DeviceResources для управления устройством Direct3D и контекстом, а также упрощенный класс отрисовщика содержимого. Он также имеет IFrameworkView, как и любое другое приложение UWP.

Однако приложение смешанной реальности имеет некоторые дополнительные возможности, отсутствующие в типичном приложении UWP Direct3D. Шаблон приложения Windows Mixed Reality может:

  • Обработка ресурсов устройств Direct3D, связанных с голографическими камерами.
  • Извлеките из системы буферы обратной камеры. В случае с Direct3D12 создайте голографические ресурсы обратного буфера и управляйте временем существования ресурсов.
  • Обработка ввода взгляда и распознавание жеста.
  • Перейдите в полноэкранный режим отрисовки стерео.

С чего начать?

Сначала установите средства, следуя инструкциям по скачиванию Visual Studio 2019 и шаблонов приложений Windows Mixed Reality. Шаблоны приложений смешанной реальности доступны в Visual Studio Marketplace в виде веб-загрузки или путем их установки в качестве расширения через пользовательский интерфейс Visual Studio.

Теперь все готово к созданию приложения Windows Mixed Reality DirectX 11! Обратите внимание, что чтобы удалить образец содержимого, закомментируйте директиву препроцессора DRAW_SAMPLE_CONTENT в файле pch.h.

Создание проекта UWP

После установки средств можно создать голографический проект UWP DirectX.

Чтобы создать проект в Visual Studio 2019, выполните следующие действия.

  1. Запустите Visual Studio.
  2. В разделе Начало работы справа выберите Создать проект.
  3. В раскрывающихся меню диалогового окна Создание проекта выберите C++, Windows Mixed Reality и UWP.
  4. Выберите Голографическое приложение DirectX 11 (универсальные приложения для Windows) (C++/WinRT).. Снимок экрана: шаблон проекта приложения UWP holographic DirectX 11 C++/WinRT в Visual Studio 2019
    Шаблон проекта приложения UWP для Голографического DirectX 11 C++/WinRT в Visual Studio 2019

    Важно!

    Убедитесь, что имя шаблона проекта содержит "(C++/WinRT)". В противном случае у вас установлена более старая версия шаблонов голографических проектов. Чтобы получить последние шаблоны проектов, установите их как расширение в Visual Studio 2019.

  5. Выберите Далее.
  6. Заполните текстовые поля Имя проекта и Расположение , а затем выберите или нажмите Создать. Будет создан проект голографического приложения.
  7. Для разработки, ориентированной только на HoloLens 2, убедитесь, что для целевых версий и Минимальной версии заданы значения Windows 10 версии 1903. Если вы также используете гарнитуры HoloLens (1-го поколения) или настольные Windows Mixed Reality гарнитуры, вы можете задать для параметра Минимальная версиязначение Windows 10, версия 1809. Для этого при использовании новых функций HoloLens 2 в коде потребуется выполнить некоторые проверки с адаптивной версией. Снимок экрана: установка Windows 10 версии 1903 в качестве целевой и минимальной версий
    Установка Windows 10 версии 1903 в качестве целевой и минимальной версий

    Важно!

    Если вы не видите Windows 10 версии 1903 в качестве варианта, вы не установили последнюю версию пакета SDK для Windows 10. Чтобы этот параметр появился, установите версию 10.0.18362.0 или более позднюю версию пакета SDK для Windows 10.

Чтобы создать проект в Visual Studio 2017, выполните следующие действия:

  1. Запустите Visual Studio.
  2. В меню Файл наведите указатель мыши на пункт Создать и выберите Проект в контекстном меню. Появится диалоговое окно Создать проект.
  3. Разверните узел Установленные слева и узел Язык Visual C++ .
  4. Перейдите к узлу Универсальная > голографическая система Windows и выберите Голографическое приложение DirectX 11 (универсальные приложения Для Windows) (C++/WinRT). Снимок экрана: шаблон проекта приложения UWP holographic DirectX 11 C++/WinRT в Visual Studio 2017
    Шаблон проекта приложения UWP holographic DirectX 11 C++/WinRT в Visual Studio 2017

    Важно!

    Убедитесь, что имя шаблона проекта содержит "(C++/WinRT)". В противном случае у вас установлена более старая версия шаблонов голографических проектов. Чтобы получить последние шаблоны проектов, установите их как расширение в Visual Studio 2017.

  5. Заполните текстовые поля Имя и Расположение , а затем нажмите кнопку ОК. Будет создан проект голографического приложения.
  6. Для разработки, ориентированной только на HoloLens 2, убедитесь, что для целевых версий и Минимальной версии заданы значения Windows 10 версии 1903. Если вы также используете гарнитуры HoloLens (1-го поколения) или настольные Windows Mixed Reality гарнитуры, вы можете задать для параметра Минимальная версиязначение Windows 10, версия 1809. Для этого при использовании новых функций HoloLens 2 в коде потребуется выполнить некоторые проверки с адаптивной версией. Снимок экрана: установка Windows 10 версии 1903 в качестве целевой и минимальной версий
    Установка Windows 10 версии 1903 в качестве целевой и минимальной версий

    Важно!

    Если вы не видите Windows 10 версии 1903 в качестве варианта, вы не установили последнюю версию пакета SDK для Windows 10. Чтобы этот параметр появился, установите версию 10.0.18362.0 или более позднюю версию пакета SDK для Windows 10.

Шаблон создает проект с помощью C++/WinRT, проекции языка C++17 среда выполнения Windows API, которые поддерживают любой совместимый со стандартами компилятор C++17. В проекте показано, как создать заблокированный миром куб, расположенный в 2 метрах от пользователя. Пользователь может коснуться или нажать кнопку на контроллере, чтобы поместить куб в другое положение, указанное взглядом пользователя. Вы можете изменить этот проект, чтобы создать любое приложение смешанной реальности.

Вы также можете создать новый проект с помощью шаблона голографического проекта Visual C# , который основан на SharpDX. Если ваш голографический проект C# не был запущен с шаблона приложения Windows Holographic, необходимо скопировать файл ms.fxcompile.targets из проекта шаблона Windows Mixed Reality C# и импортировать его в файл your.csproj для компиляции HLSL-файлов, добавленных в проект. Шаблон Direct3D 12 также предоставляется в расширении Windows Mixed Reality шаблонов приложений в Visual Studio.

Сведения о сборке и развертывании примера на устройстве HoloLens, компьютере с подключенным иммерсивным устройством или эмуляторе см. в статье Использование Visual Studio для развертывания и отладки .

В остальных инструкциях ниже предполагается, что вы используете C++ для создания приложения.

Точка входа приложения UWP

Голографическое приложение UWP запускается в функции wWinMain в AppView.cpp. Функция wWinMain создает IFrameworkView приложения и запускает с ним CoreApplication .

Из AppView.cpp:

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

С этого момента класс AppView обрабатывает взаимодействие с базовыми событиями ввода Windows, событиями CoreWindow и обменом сообщениями и т. д. Он также создаст HolographicSpace, используемый вашим приложением.

Создание проекта Win32

Самый простой способ приступить к созданию голографического проекта Win32 — адаптировать пример Win32 BasicHologram.

В этом примере Win32 используется C++/WinRT, проекция языка C++17 среда выполнения Windows API, которая поддерживает любой совместимый со стандартами компилятор C++17. В проекте показано, как создать заблокированный миром куб, расположенный в 2 метрах от пользователя. Пользователь может нажать кнопку на контроллере, чтобы поместить куб в другое положение, указанное взглядом пользователя. Вы можете изменить этот проект, чтобы создать любое приложение смешанной реальности.

Точка входа приложения Win32

Ваше голографическое приложение Win32 запускается в функции wWinMain в AppMain.cpp. Функция wWinMain создает HWND приложения и запускает цикл сообщений.

Из 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;
}

С этого момента класс AppMain обрабатывает взаимодействие с основными сообщениями окна и т. д. Он также создаст HolographicSpace, используемый вашим приложением.

Отрисовка голографического содержимого

Папка Content проекта содержит классы для отрисовки голограмм в голографическом пространстве. Голограмма по умолчанию в шаблоне — это вращающийся куб, расположенный на 2 метра от пользователя. Рисование этого куба реализуется в SpinningCubeRenderer.cpp, который содержит следующие ключевые методы:

Метод Описание
CreateDeviceDependentResources Загружает шейдеры и создает сетку куба.
PositionHologram Помещает голограмму в расположение, указанное предоставленным SpatialPointerPose.
Update Поворачивает куб и задает матрицу модели.
Render Отрисовывает кадр с помощью вершинных и пиксельных шейдеров.

Вложенная папка шейдеров содержит четыре реализации шейдера по умолчанию:

Шейдер Описание
GeometryShader.hlsl Сквозная, которая оставляет геометрию без изменений.
PixelShader.hlsl Проходит через данные цвета. Данные цвета интерполируются и назначаются пикселю на этапе растеризации.
VertexShader.hlsl Простой шейдер для обработки вершин в GPU.
VPRTVertexShader.hlsl Простой шейдер для обработки вершин на GPU, оптимизированный для Windows Mixed Reality стерео отрисовки.

VertexShaderShared.hlsl содержит общий код, совместно используемый между VertexShader.hlsl и VPRTVertexShader.hlsl.

Примечание. Шаблон приложения Direct3D 12 также включает .ViewInstancingVertexShader.hlsl В этом варианте используются дополнительные функции D3D12 для более эффективной отрисовки стереоизонимов.

Шейдеры компилируются при сборке проекта и загружаются в метод SpinningCubeRenderer::CreateDeviceDependentResources .

Взаимодействие с голограммами

Входные данные пользователя обрабатываются в классе SpatialInputHandler , который получает экземпляр SpatialInteractionManager и подписывается на событие SourcePressed . Это позволяет обнаруживать жест касания воздуха и другие события пространственного ввода.

Обновление голографического содержимого

Приложение смешанной реальности обновляется в игровом цикле, который по умолчанию реализуется в методе Update в AppMain.cpp. Метод Update обновляет объекты сцены, такие как вращающийся куб, и возвращает объект HolographicFrame , который используется для получения актуальных матриц представления и проекции, а также для представления цепочки буферов.

Метод Render в AppMain.cpp принимает HolographicFrame и отрисовывает текущий кадр для каждой голографической камеры в соответствии с текущим состоянием приложения и пространственного положения.

Примечания

Шаблон приложения Windows Mixed Reality теперь поддерживает компиляцию с включенным флагом устранения рисков Spectre (/Qspectre). Перед компиляцией конфигурации с включенным устранением рисков Spectre обязательно установите версию библиотек среды выполнения Microsoft Visual C++ (MSVC). Чтобы установить библиотеки C++ с устранением рисков Spectre, запустите Visual Studio Installer и выберите Изменить. Перейдите в раздел Отдельные компоненты и найдите "spectre". Установите флажки, соответствующие целевым платформам и версии MSVC, для которые необходимо скомпилировать код с устранением рисков Spectre, и нажмите кнопку Изменить , чтобы начать установку.

См. также раздел