Como criar um projeto holográfico do DirectX

Observação

Este artigo refere-se às APIs nativas do WinRT herdadas. Para novos projetos de aplicativos nativos, recomendamos usar a API OpenXR.

Um aplicativo holográfico criado para um HoloLens será um aplicativo de Plataforma Universal do Windows (UWP). Se estiver direcionando a área de trabalho Windows Mixed Reality headsets, você poderá criar um aplicativo UWP ou um aplicativo Win32.

O modelo de aplicativo UWP holográfico do DirectX 11 é muito parecido com o modelo de aplicativo UWP do DirectX 11. O modelo inclui um loop de programa, uma classe DeviceResources para gerenciar o dispositivo e o contexto Direct3D e uma classe de renderizador de conteúdo simplificada. Ele também tem um IFrameworkView, assim como qualquer outro aplicativo UWP.

No entanto, o aplicativo de realidade misturada tem alguns recursos adicionais que não estão presentes em um aplicativo UWP típico do Direct3D. O modelo de aplicativo Windows Mixed Reality pode:

  • Manipular recursos de dispositivo Direct3D associados a câmeras holográficas.
  • Recupere buffers de volta da câmera do sistema. No caso do Direct3D12, crie recursos de buffer de back holographic e gerencie tempos de vida de recursos.
  • Manipule a entrada de foco e reconheça um gesto.
  • Vá para o modo de renderização estéreo de tela inteira.

Como começar?

Primeiro instale as ferramentas, seguindo as instruções sobre como baixar o Visual Studio 2019 e os modelos de aplicativo Windows Mixed Reality. Os modelos de aplicativo de realidade misturada estão disponíveis no marketplace do Visual Studio como um download da Web ou instalando-os como uma extensão por meio da interface do usuário do Visual Studio.

Agora você está pronto para criar seu aplicativo directx 11 Windows Mixed Reality! Observe que, para remover o conteúdo de exemplo, comente a diretiva de pré-processador DRAW_SAMPLE_CONTENT em pch.h.

Criar um projeto UWP

Depois que as ferramentas forem instaladas, você poderá criar um projeto UWP do DirectX holográfico.

Para criar um novo projeto no Visual Studio 2019:

  1. Inicie o Visual Studio.
  2. Na seção Introdução à direita, selecione Criar um novo projeto.
  3. Nos menus suspensos da caixa de diálogo Criar um novo projeto, selecione C++, Windows Mixed Reality e UWP.
  4. Selecione Aplicativo Holográfico DirectX 11 (Universal do Windows) (C++/WinRT). Captura de tela do modelo de projeto de aplicativo C++/WinRT UWP do Holographic DirectX 11 no Visual Studio 2019
    Modelo de projeto de aplicativo UWP do C++/WinRT do DirectX 11 holográfico no Visual Studio 2019

    Importante

    Verifique se o nome do modelo de projeto inclui "(C++/WinRT)". Caso contrário, você tem uma versão mais antiga dos modelos de projeto holográfico instalados. Para obter os modelos de projeto mais recentes, instale-os como uma extensão para o Visual Studio 2019.

  5. Selecione Avançar.
  6. Preencha as caixas de texto Nome do projeto e Local e selecione ou toque em Criar. O projeto de aplicativo holográfico é criado.
  7. Para direcionamento de desenvolvimento apenas HoloLens 2, verifique se a versão de destino e a versão mínima estão definidas como Windows 10, versão 1903. Se você também estiver direcionando o HoloLens (1ª geração) ou headsets de Windows Mixed Reality da área de trabalho, poderá definir a versão Mínima como Windows 10, versão 1809. Isso exigirá algumas verificações adaptáveis de versão em seu código ao usar novos recursos de HoloLens 2. Captura de tela da configuração do Windows 10, versão 1903 como o destino e as versões mínimas
    Definindo o Windows 10, versão 1903 como o destino e as versões mínimas

    Importante

    Se você não vir o Windows 10, versão 1903 como uma opção, não terá o SDK do Windows 10 mais recente instalado. Para que essa opção apareça, instale a versão 10.0.18362.0 ou posterior do SDK do Windows 10.

Para criar um novo projeto no Visual Studio 2017:

  1. Inicie o Visual Studio.
  2. No menu Arquivo , aponte para Novo e selecione Projeto no menu de contexto. A caixa de diálogo Novo projeto é aberta.
  3. Expanda Instalado à esquerda e expanda o nó de linguagem do Visual C++ .
  4. Navegue até o nó Holográfico Universal > do Windows e selecione Aplicativo Holográfico DirectX 11 (Universal do Windows) (C++/WinRT). Captura de tela do modelo de projeto de aplicativo C++/WinRT UWP do Holographic DirectX 11 no Visual Studio 2017
    Modelo de projeto de aplicativo UWP do C++/WinRT do DirectX 11 holográfico no Visual Studio 2017

    Importante

    Verifique se o nome do modelo de projeto inclui "(C++/WinRT)". Caso contrário, você tem uma versão mais antiga dos modelos de projeto holográfico instalados. Para obter os modelos de projeto mais recentes, instale-os como uma extensão para o Visual Studio 2017.

  5. Preencha as caixas de texto Nome e Local e selecione ou toque em OK. O projeto de aplicativo holográfico é criado.
  6. Para direcionamento de desenvolvimento apenas HoloLens 2, verifique se a versão de destino e a versão mínima estão definidas como Windows 10, versão 1903. Se você também estiver direcionando o HoloLens (1ª geração) ou headsets de Windows Mixed Reality da área de trabalho, poderá definir a versão Mínima como Windows 10, versão 1809. Isso exigirá algumas verificações adaptáveis de versão em seu código ao usar novos recursos de HoloLens 2. Captura de tela da configuração do Windows 10, versão 1903 como o destino e as versões mínimas
    Definindo o Windows 10, versão 1903 como o destino e as versões mínimas

    Importante

    Se você não vir o Windows 10, versão 1903 como uma opção, não terá o SDK do Windows 10 mais recente instalado. Para que essa opção apareça, instale a versão 10.0.18362.0 ou posterior do SDK do Windows 10.

O modelo gera um projeto usando C++/WinRT, uma projeção de linguagem C++17 das APIs Windows Runtime que dá suporte a qualquer compilador C++17 compatível com padrões. O projeto mostra como criar um cubo bloqueado pelo mundo que é colocado a 2 metros do usuário. O usuário pode tocar no ar ou pressionar um botão no controlador para colocar o cubo em uma posição diferente especificada pelo foco do usuário. Você pode modificar esse projeto para criar qualquer aplicativo de realidade misturada.

Você também pode criar um novo projeto usando o modelo de projeto holográfico do Visual C# , que é baseado no SharpDX. Se o projeto do C# holográfico não tiver começado a partir do modelo de aplicativo Holographic do Windows, você precisará copiar o arquivo ms.fxcompile.targets de um projeto de modelo do Windows Mixed Reality C# e importá-lo no arquivo.csproj para compilar arquivos HLSL adicionados ao seu projeto. Um modelo do Direct3D 12 também é fornecido na extensão de modelos de aplicativo Windows Mixed Reality para o Visual Studio.

Examine Usando o Visual Studio para implantar e depurar para obter informações sobre como criar e implantar o exemplo em seu HoloLens, computador com dispositivo imersivo anexado ou emulador.

O restante das instruções abaixo pressupõe que você esteja usando O C++ para criar seu aplicativo.

Ponto de entrada do aplicativo UWP

Seu aplicativo UWP holográfico começa na função wWinMain em AppView.cpp. A função wWinMain cria o IFrameworkView do aplicativo e inicia o CoreApplication com ele.

Em AppView.cpp:

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

Desse ponto em diante, a classe AppView lida com a interação com eventos de entrada básicos do Windows, eventos CoreWindow e mensagens e assim por diante. Ele também criará o HolographicSpace usado pelo aplicativo.

Criando um projeto Win32

A maneira mais fácil de começar a criar um projeto holográfico Win32 é adaptar o exemplo BasicHologram Win32.

Este exemplo do Win32 usa C++/WinRT, uma projeção de linguagem C++17 das APIs Windows Runtime que dão suporte a qualquer compilador C++17 compatível com padrões. O projeto mostra como criar um cubo bloqueado pelo mundo que é colocado a 2 metros do usuário. O usuário pode pressionar um botão no controlador para colocar o cubo em uma posição diferente especificada pelo foco do usuário. Você pode modificar esse projeto para criar qualquer aplicativo de realidade misturada.

Ponto de entrada do aplicativo Win32

Seu aplicativo Win32 holográfico começa na função wWinMain em AppMain.cpp. A função wWinMain cria o HWND do aplicativo e inicia seu loop de mensagem.

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

Desse ponto em diante, a classe AppMain lida com a interação com mensagens de janela básicas e assim por diante. Ele também criará o HolographicSpace usado pelo aplicativo.

Renderizar conteúdo holográfico

A pasta Conteúdo do projeto contém classes para renderizar hologramas no espaço holográfico. O holograma padrão no modelo é um cubo giratório colocado a 2 metros do usuário. Desenhar esse cubo é implementado em SpinningCubeRenderer.cpp, que tem estes métodos principais:

Método Explicação
CreateDeviceDependentResources Carrega sombreadores e cria a malha de cubo.
PositionHologram Coloca o holograma no local especificado pelo SpatialPointerPose fornecido.
Update Gira o cubo e define a matriz do modelo.
Render Renderiza um quadro usando os sombreadores de vértice e pixel.

A subpasta Shaders contém quatro implementações de sombreador padrão:

Sombreador Explicação
GeometryShader.hlsl Uma passagem que deixa a geometria não modificada.
PixelShader.hlsl Passa pelos dados de cor. Os dados de cor são interpolados e atribuídos a um pixel na etapa de rasterização.
VertexShader.hlsl Sombreador simples para fazer o processamento de vértice na GPU.
VPRTVertexShader.hlsl Sombreador simples para fazer o processamento de vértice na GPU, que é otimizado para Windows Mixed Reality renderização estéreo.

VertexShaderShared.hlsl contém código comum compartilhado entre VertexShader.hlsl e VPRTVertexShader.hlsl.

Observação: o modelo de aplicativo Direct3D 12 também inclui ViewInstancingVertexShader.hlsl. Essa variante usa recursos opcionais D3D12 para renderizar imagens estéreo com mais eficiência.

Os sombreadores são compilados quando o projeto é compilado e carregados no método SpinningCubeRenderer::CreateDeviceDependentResources .

Interagir com os hologramas

A entrada do usuário é processada na classe SpatialInputHandler , que obtém uma instância SpatialInteractionManager e assina o evento SourcePressed . Isso permite detectar o gesto de toque de ar e outros eventos de entrada espaciais.

Atualizar conteúdo holográfico

Seu aplicativo de realidade misturada é atualizado em um loop de jogo, que, por padrão, é implementado no método Update em AppMain.cpp. O método Update atualiza objetos de cena, como o cubo giratório, e retorna um objeto HolographicFrame que é usado para obter matrizes de exibição e projeção atualizadas e para apresentar a cadeia de troca.

O método Render em AppMain.cpp usa o HolographicFrame e renderiza o quadro atual para cada câmera holográfica, de acordo com o aplicativo atual e o estado de posicionamento espacial.

Observações

O modelo de aplicativo Windows Mixed Reality agora dá suporte à compilação com o sinalizador de mitigação Spectre habilitado (/Qspectre). Instale a versão mitigada pelo Spectre das bibliotecas de runtime do MICROSOFT VISUAL C++ (MSVC) antes de compilar uma configuração com a mitigação spectre habilitada. Para instalar as bibliotecas C++ atenuadas pelo Spectre, inicie o Instalador do Visual Studio e selecione Modificar. Navegue até Componentes individuais e pesquise "spectre". Selecione as caixas correspondentes às plataformas de destino e à versão do MSVC para as quais você precisa compilar o código mitigado pelo Spectre e clique em Modificar para iniciar a instalação.

Confira também