Creación de un proyecto de DirectX holográfico

Nota

Este artículo está relacionado con las API nativas heredadas de WinRT. En el caso de los nuevos proyectos de aplicaciones nativas, se recomienda usar la API de OpenXR.

Una aplicación holográfica que cree para holoLens será una aplicación Plataforma universal de Windows (UWP). Si el destino Windows Mixed Reality cascos de escritorio, puedes crear una aplicación para UWP o una aplicación Win32.

La plantilla de aplicación para UWP holográfica de DirectX 11 es muy similar a la plantilla de aplicación para UWP de DirectX 11. La plantilla incluye un bucle de programa, una clase DeviceResources para administrar el contexto y el dispositivo Direct3D, y una clase de representador de contenido simplificada. También tiene un IFrameworkView, al igual que cualquier otra aplicación para UWP.

Sin embargo, la aplicación de realidad mixta tiene algunas funcionalidades adicionales que no están presentes en una aplicación típica para UWP de Direct3D. La plantilla de aplicación Windows Mixed Reality puede:

  • Controla los recursos del dispositivo Direct3D asociados a cámaras holográficas.
  • Recupere los búferes de reserva de la cámara del sistema. En el caso de Direct3D12, cree recursos de búfer holográficos y administre la duración de los recursos.
  • Controle la entrada de mirada y reconozca un gesto.
  • Vaya al modo de representación estéreo de pantalla completa.

¿Cómo empiezo?

En primer lugar, instale las herramientas siguiendo las instrucciones para descargar Visual Studio 2019 y las plantillas de aplicación Windows Mixed Reality. Las plantillas de aplicación de realidad mixta están disponibles en Visual Studio Marketplace como descarga web o mediante su instalación como extensión a través de la interfaz de usuario de Visual Studio.

Ahora ya está listo para crear la aplicación de Windows Mixed Reality directX 11. Tenga en cuenta que, para quitar el contenido de ejemplo, comente la directiva de preprocesador DRAW_SAMPLE_CONTENT en pch.h.

Creación de un proyecto de UWP

Una vez instaladas las herramientas, puedes crear un proyecto de DirectX UWP holográfico.

Para crear un proyecto en Visual Studio 2019:

  1. Inicie Visual Studio.
  2. En la sección Introducción de la derecha, seleccione Crear un nuevo proyecto.
  3. En los menús desplegables del cuadro de diálogo Crear un nuevo proyecto, seleccione C++, Windows Mixed Reality y UWP.
  4. Seleccione Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Captura de pantalla de la plantilla de proyecto de aplicación para UWP de Holographic DirectX 11 C++/WinRT en Visual Studio 2019
    Plantilla de proyecto de aplicación para UWP de DirectX 11 C++/WinRT en Visual Studio 2019

    Importante

    Asegúrese de que el nombre de la plantilla de proyecto incluya "(C++/WinRT)". Si no es así, tiene instalada una versión anterior de las plantillas de proyecto holográficas. Para obtener las plantillas de proyecto más recientes, instálelas como una extensión en Visual Studio 2019.

  5. Seleccione Siguiente.
  6. Rellene los cuadros de texto Nombre del proyecto y Ubicación y seleccione o pulse Crear. Se crea el proyecto de aplicación holográfica.
  7. En el caso de los destinos de desarrollo solo HoloLens 2, asegúrese de que la versión de destino y la versión mínima estén establecidas en Windows 10, versión 1903. Si también tienes como destino HoloLens (1.ª generación) o cascos de escritorio Windows Mixed Reality, puedes establecer Versión mínimaen Windows 10, versión 1809. Esto requerirá algunas comprobaciones adaptables de versión en el código al usar nuevas características de HoloLens 2. Captura de pantalla de la configuración de Windows 10, versión 1903 como destino y versiones mínimas
    Establecer Windows 10, versión 1903 como destino y versiones mínimas

    Importante

    Si no ve Windows 10, versión 1903 como opción, no tiene instalado el SDK de Windows 10 más reciente. Para que aparezca esta opción, instale la versión 10.0.18362.0 o posterior del SDK de Windows 10.

Para crear un proyecto en Visual Studio 2017:

  1. Inicie Visual Studio.
  2. En el menú Archivo , seleccione Nuevo y seleccione Proyecto en el menú contextual. Se abre el cuadro de diálogo Nuevo proyecto.
  3. Expanda Instalado a la izquierda y expanda el nodo del lenguaje Visual C++ .
  4. Vaya al nodo Windows Universal > Holographic y seleccione Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Captura de pantalla de la plantilla de proyecto de aplicación para UWP de Holographic DirectX 11 C++/WinRT en Visual Studio 2017
    Plantilla de proyecto de aplicación para UWP holographic DirectX 11 C++/WinRT en Visual Studio 2017

    Importante

    Asegúrese de que el nombre de la plantilla de proyecto incluya "(C++/WinRT)". Si no es así, tiene instalada una versión anterior de las plantillas de proyecto holográficas. Para obtener las plantillas de proyecto más recientes, instálelas como una extensión en Visual Studio 2017.

  5. Rellene los cuadros de texto Nombre y Ubicación y seleccione o pulse Aceptar. Se crea el proyecto de aplicación holográfica.
  6. En el caso de los destinos de desarrollo solo HoloLens 2, asegúrese de que la versión de destino y la versión mínima estén establecidas en Windows 10, versión 1903. Si también tienes como destino HoloLens (1.ª generación) o cascos de escritorio Windows Mixed Reality, puedes establecer Versión mínimaen Windows 10, versión 1809. Esto requerirá algunas comprobaciones adaptables de versión en el código al usar nuevas características de HoloLens 2. Captura de pantalla de la configuración de Windows 10, versión 1903 como destino y versiones mínimas
    Establecer Windows 10, versión 1903 como destino y versiones mínimas

    Importante

    Si no ve Windows 10, versión 1903 como opción, no tiene instalado el SDK de Windows 10 más reciente. Para que aparezca esta opción, instale la versión 10.0.18362.0 o posterior del SDK de Windows 10.

La plantilla genera un proyecto mediante C++/WinRT, una proyección del lenguaje C++17 de las API de Windows Runtime que admite cualquier compilador de C++17 compatible con estándares. El proyecto muestra cómo crear un cubo bloqueado por el mundo que se coloca a 2 metros del usuario. El usuario puede pulsar o presionar un botón en el controlador para colocar el cubo en una posición diferente especificada por la mirada del usuario. Puede modificar este proyecto para crear cualquier aplicación de realidad mixta.

También puede crear un nuevo proyecto mediante la plantilla de proyecto holográfica de Visual C# , que se basa en SharpDX. Si el proyecto de C# holográfico no se inició desde la plantilla de aplicación de Windows Holographic, deberá copiar el archivo ms.fxcompile.targets desde un proyecto de plantilla de C# de Windows Mixed Reality e importarlo en el archivo .csproj para compilar archivos HLSL que agregue al proyecto. También se proporciona una plantilla de Direct3D 12 en la extensión de plantillas de aplicación de Windows Mixed Reality a Visual Studio.

Revise Uso de Visual Studio para implementar y depurar para obtener información sobre cómo compilar e implementar el ejemplo en HoloLens, pc con dispositivo envolvente conectado o un emulador.

En el resto de las instrucciones siguientes se supone que usaS C++ para compilar la aplicación.

Punto de entrada de la aplicación para UWP

La aplicación para UWP holográfica se inicia en la función wWinMain en AppView.cpp. La función wWinMain crea el IFrameworkView de la aplicación e inicia CoreApplication con ella.

Desde AppView.cpp:

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

Desde ese momento, la clase AppView controla la interacción con eventos de entrada básicos de Windows, eventos CoreWindow y mensajería, etc. También creará el espacio holográfico que usa la aplicación.

Creación de un proyecto de Win32

La manera más fácil de empezar a crear un proyecto holográfico de Win32 es adaptar el ejemplo BasicHologram Win32.

Este ejemplo de Win32 usa C++/WinRT, una proyección del lenguaje C++17 de las API de Windows Runtime que admite cualquier compilador de C++17 compatible con estándares. El proyecto muestra cómo crear un cubo bloqueado por el mundo que se coloca a 2 metros del usuario. El usuario puede presionar un botón en el controlador para colocar el cubo en una posición diferente especificada por la mirada del usuario. Puede modificar este proyecto para crear cualquier aplicación de realidad mixta.

Punto de entrada de la aplicación Win32

La aplicación Win32 holográfica se inicia en la función wWinMain en AppMain.cpp. La función wWinMain crea el HWND de la aplicación e inicia su bucle de mensajes.

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

A partir de ese momento, la clase AppMain controla la interacción con mensajes de ventana básicos, etc. También creará el espacio holográfico que usa la aplicación.

Representación del contenido holográfico

La carpeta Content del proyecto contiene clases para representar hologramas en el espacio holográfico. El holograma predeterminado de la plantilla es un cubo giratorio situado a 2 metros del usuario. Dibujar este cubo se implementa en SpinningCubeRenderer.cpp, que tiene estos métodos clave:

Método Explicación
CreateDeviceDependentResources Carga sombreadores y crea la malla del cubo.
PositionHologram Coloca el holograma en la ubicación especificada por el SpatialPointerPose proporcionado.
Update Gira el cubo y establece la matriz del modelo.
Render Representa un marco mediante los sombreadores de vértices y píxeles.

La subcarpeta Sombreadores contiene cuatro implementaciones de sombreador predeterminadas:

Sombreador Explicación
GeometryShader.hlsl Un paso a través que deja la geometría sin modificar.
PixelShader.hlsl Pasa por los datos de color. Los datos de color se interpolan y se asignan a un píxel en el paso de rasterización.
VertexShader.hlsl Sombreador simple para realizar el procesamiento de vértices en la GPU.
VPRTVertexShader.hlsl Sombreador simple para realizar el procesamiento de vértices en la GPU, que está optimizado para Windows Mixed Reality representación estéreo.

VertexShaderShared.hlsl contiene código común compartido entre VertexShader.hlsl y VPRTVertexShader.hlsl.

Nota: La plantilla de aplicación Direct3D 12 también incluye ViewInstancingVertexShader.hlsl. Esta variante usa características opcionales D3D12 para representar imágenes estéreo de forma más eficaz.

Los sombreadores se compilan cuando se compila el proyecto y se cargan en el método SpinningCubeRenderer::CreateDeviceDependentResources .

Interacción con los hologramas

La entrada del usuario se procesa en la clase SpatialInputHandler , que obtiene una instancia de SpatialInteractionManager y se suscribe al evento SourcePressed . Esto permite detectar el gesto de pulsar en el aire y otros eventos de entrada espacial.

Actualizar contenido holográfico

La aplicación de realidad mixta se actualiza en un bucle de juego, que de forma predeterminada se implementa en el método Update en AppMain.cpp. El método Update actualiza los objetos de escena, como el cubo giratorio, y devuelve un objeto HolographicFrame que se usa para obtener matrices de proyección y vista actualizadas y para presentar la cadena de intercambio.

El método Render en AppMain.cpp toma holographicFrame y representa el fotograma actual en cada cámara holográfica, según la aplicación actual y el estado de posicionamiento espacial.

Notas

La plantilla de aplicación Windows Mixed Reality ahora admite la compilación con la marca de mitigación de Spectre habilitada (/Qspectre). Asegúrese de instalar la versión mitigada por Spectre de las bibliotecas en tiempo de ejecución de Microsoft Visual C++ (MSVC) antes de compilar una configuración con la mitigación de Spectre habilitada. Para instalar las bibliotecas de C++ mitigadas por Spectre, inicie el Instalador de Visual Studio y seleccione Modificar. Vaya a Componentes individuales y busque "spectre". Seleccione los cuadros correspondientes a las plataformas de destino y la versión de MSVC para las que necesita compilar código mitigado por Spectre y haga clic en Modificar para iniciar la instalación.

Consulte también