Criar um projeto Holographic DirectX
Nota
Este artigo está relacionado com as APIs nativas do WinRT legadas. Para novos projetos de aplicações nativas, recomendamos que utilize a API OpenXR.
Uma aplicação holográfica que criar para um HoloLens será uma aplicação Plataforma Universal do Windows (UWP). Se tiver como destino auscultadores Windows Mixed Reality de ambiente de trabalho, pode criar uma aplicação UWP ou uma aplicação Win32.
O modelo de aplicação UWP holográfico DirectX 11 é semelhante ao modelo de aplicação UWP directX 11. O modelo inclui um ciclo de programa, uma classe DeviceResources para gerir o dispositivo e o contexto Direct3D e uma classe de compositor de conteúdo simplificada. Também tem um IFrameworkView, tal como qualquer outra aplicação UWP.
No entanto, a aplicação de realidade mista tem algumas capacidades adicionais que não estão presentes numa aplicação UWP Direct3D típica. O modelo de aplicação Windows Mixed Reality pode:
- Processar recursos de dispositivos Direct3D associados a câmaras holográficas.
- Obter memórias intermédias traseiras da câmara do sistema. No caso do Direct3D12, crie recursos de memória intermédia holográfica e faça a gestão das durações dos recursos.
- Processe a entrada do olhar e reconheça um gesto.
- Aceda ao modo de composição estéreo de ecrã inteiro.
Como posso começar?
Primeiro, instale as ferramentas, seguindo as instruções sobre como transferir o Visual Studio 2019 e os modelos de aplicações Windows Mixed Reality. Os modelos de aplicações de realidade mista estão disponíveis no marketplace do Visual Studio como uma transferência Web ou ao instalá-los como uma extensão através da IU do Visual Studio.
Agora, está pronto para criar a sua aplicação directX 11 Windows Mixed Reality! Tenha em atenção que, para remover o conteúdo de exemplo, comente o DRAW_SAMPLE_CONTENT diretiva de pré-processamento em pch.h.
Criar um projeto UWP
Assim que as ferramentas estiverem instaladas, pode criar um projeto Holographic DirectX UWP.
Para criar um novo projeto no Visual Studio 2019:
- Inicie o Visual Studio.
- Na secção Introdução à direita, selecione Criar um novo projeto.
- Nos menus pendentes na caixa de diálogo Criar um novo projeto, selecione C++, Windows Mixed Reality e UWP.
- Selecione Aplicação Holographic DirectX 11 (Universal Windows) (C++/WinRT).
Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2019Importante
Certifique-se de que o nome do modelo de projeto inclui "(C++/WinRT)". Caso contrário, 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.
- Selecione Seguinte.
- Preencha as caixas de texto Nome do projeto e Localização e selecione ou toque em Criar. O projeto da aplicação holográfica é criado.
- Para segmentação de desenvolvimento apenas HoloLens 2, certifique-se de que a versão De destino e a versão Mínima estão definidas como Windows 10, versão 1903. Se também estiver a direcionar o HoloLens (1.ª geração) ou auscultadores de Windows Mixed Reality de ambiente de trabalho, pode definir a versão mínima para Windows 10, versão 1809. Isto irá exigir algumas verificações adaptáveis de versão no seu código ao utilizar novas funcionalidades de HoloLens 2.
Definir Windows 10, versão 1903 como o destino e as versões mínimasImportante
Se não vir Windows 10, versão 1903 como uma opção, não tem o SDK Windows 10 mais recente instalado. Para que esta opção seja apresentada, instale a versão 10.0.18362.0 ou posterior do SDK Windows 10.
Para criar um novo projeto no Visual Studio 2017:
- Inicie o Visual Studio.
- No menu Ficheiro , aponte para Novo e selecione Projeto no menu de contexto. A caixa de diálogo Novo Projeto é aberta.
- Expanda Instalado à esquerda e expanda o nó de idioma do Visual C++ .
- Navegue para o nó Do Windows Universal > Holographic e selecione Holographic DirectX 11 App (Universal Windows) (C++/WinRT).
Modelo de projeto de aplicação Holographic DirectX 11 C++/WinRT UWP no Visual Studio 2017Importante
Certifique-se de que o nome do modelo de projeto inclui "(C++/WinRT)". Caso contrário, 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.
- Preencha as caixas de texto Nome e Localização e selecione ou toque em OK. O projeto da aplicação holográfica é criado.
- Para segmentação de desenvolvimento apenas HoloLens 2, certifique-se de que a versão De destino e a versão Mínima estão definidas como Windows 10, versão 1903. Se também estiver a direcionar o HoloLens (1.ª geração) ou auscultadores de Windows Mixed Reality de ambiente de trabalho, pode definir a versão mínima para Windows 10, versão 1809. Isto irá exigir algumas verificações adaptáveis de versão no seu código ao utilizar novas funcionalidades de HoloLens 2.
Definir Windows 10, versão 1903 como o destino e as versões mínimasImportante
Se não vir Windows 10, versão 1903 como uma opção, não tem o SDK Windows 10 mais recente instalado. Para que esta opção seja apresentada, instale a versão 10.0.18362.0 ou posterior do SDK Windows 10.
O modelo gera um projeto com C++/WinRT, uma projeção de idioma C++17 das APIs Windows Runtime que suporta qualquer compilador C+++17 compatível com normas. O projeto mostra como criar um cubo protegido pelo mundo que é colocado a 2 metros do utilizador. O utilizador pode tocar ou premir um botão no controlador para colocar o cubo numa posição diferente especificada pelo olhar do utilizador. Pode modificar este projeto para criar qualquer aplicação de realidade mista.
Também pode criar um novo projeto com o modelo de projeto holográfico Visual C# baseado no SharpDX. Se o projeto C# holográfico não tiver sido iniciado a partir do modelo da aplicação Holográfica do Windows, terá de copiar o ficheiro ms.fxcompile.targets a partir de um projeto de modelo Windows Mixed Reality C# e importá-lo no seu ficheiro.csproj para compilar ficheiros HLSL que adicionar ao seu projeto. Também é fornecido um modelo Direct3D 12 na extensão de modelos de aplicações Windows Mixed Reality para o Visual Studio.
Veja Utilizar o Visual Studio para implementar e depurar para obter informações sobre como criar e implementar o exemplo no HoloLens, PC com dispositivo envolvente anexado ou um emulador.
As restantes instruções abaixo pressupõem que está a utilizar C++ para criar a sua aplicação.
Ponto de entrada da aplicação UWP
A sua aplicação holográfica UWP é iniciada na função wWinMain em AppView.cpp. A função wWinMain cria o IFrameworkView da aplicação e inicia a CoreApplication com a mesma.
A partir de AppView.cpp:
// The main function bootstraps into the IFrameworkView.
int __stdcall wWinMain(HINSTANCE, HINSTANCE, PWSTR, int)
{
winrt::init_apartment();
CoreApplication::Run(AppViewSource());
return 0;
}
A partir daí, a classe AppView processa a interação com eventos de entrada básicos do Windows, eventos coreWindow e mensagens, etc. Também irá criar o HolographicSpace utilizado pela sua aplicação.
Criar um projeto Win32
A forma mais fácil de começar a criar um projeto holográfico Win32 é adaptar o exemplo BasicHologram Win32.
Este exemplo win32 utiliza C++/WinRT, uma projeção de idioma C++17 das APIs Windows Runtime que suporta qualquer compilador C+++17 compatível com normas. O projeto mostra como criar um cubo protegido pelo mundo que é colocado a 2 metros do utilizador. O utilizador pode premir um botão no controlador para colocar o cubo numa posição diferente especificada pelo olhar do utilizador. Pode modificar este projeto para criar qualquer aplicação de realidade mista.
Ponto de entrada da aplicação Win32
A sua aplicação Holographic Win32 é iniciada na função wWinMain em AppMain.cpp. A função wWinMain cria o HWND da aplicação e inicia o ciclo de mensagens.
A partir de 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 daí, a classe AppMain processa a interação com mensagens de janela básicas, etc. Também irá criar o HolographicSpace utilizado pela sua aplicação.
Compor conteúdo holográfico
A pasta Conteúdo do projeto contém classes para compor hologramas no espaço holográfico. O holograma predefinido no modelo é um cubo giratório colocado a 2 metros de distância do utilizador. Desenhar este cubo é implementado em SpinningCubeRenderer.cpp, que tem estes métodos principais:
Método | Explicação |
---|---|
CreateDeviceDependentResources |
Carrega sombreados e cria a malha de cubo. |
PositionHologram |
Coloca o holograma na localização especificada pelo SpatialPointerPose fornecido. |
Update |
Roda o cubo e define a matriz do modelo. |
Render |
Compõe uma moldura com o vértice e os sombreados de píxeis. |
A subpasta Shaders contém quatro implementações de sombreado predefinidas:
Sombreado | Explicação |
---|---|
GeometryShader.hlsl |
Uma passagem que deixa a geometria não modificada. |
PixelShader.hlsl |
Transmite os dados de cor. Os dados de cor são interpolados e atribuídos a um pixel no passo de rasterização. |
VertexShader.hlsl |
Sombreado simples para fazer o processamento de vértice na GPU. |
VPRTVertexShader.hlsl |
Sombreado simples para fazer o processamento de vértices na GPU, que está otimizado para Windows Mixed Reality composição estéreo. |
VertexShaderShared.hlsl
contém código comum partilhado entre VertexShader.hlsl
e VPRTVertexShader.hlsl
.
Nota: o modelo de aplicação Direct3D 12 também inclui ViewInstancingVertexShader.hlsl
. Esta variante utiliza funcionalidades opcionais D3D12 para compor imagens estéreo de forma mais eficiente.
Os sombreados compilam quando o projeto é criado e carregados no método SpinningCubeRenderer::CreateDeviceDependentResources .
Interagir com os hologramas
A entrada do utilizador é processada na classe SpatialInputHandler , que obtém uma instância SpatialInteractionManager e subscreve o evento SourcePressed . Isto permite detetar o gesto de toque de ar e outros eventos de entrada espacial.
Atualizar conteúdo holográfico
A sua aplicação de realidade mista é atualizada num ciclo de jogo, que por predefinição é implementado no método Update em AppMain.cpp
. O método Update atualiza objetos de cena, como o cubo giratório, e devolve um objeto HolographicFrame que é utilizado para obter matrizes de projeção e vista atualizadas e para apresentar a cadeia de troca.
O método Render no AppMain.cpp
utiliza o HolographicFrame e compõe a moldura atual para cada câmara holográfica, de acordo com a aplicação atual e o estado de posicionamento espacial.
Notas
O modelo de aplicação Windows Mixed Reality suporta agora a compilação com o sinalizador de mitigação Spectre ativado (/Qspectre). Certifique-se de que instala 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 ativada. Para instalar as bibliotecas C++ mitigadas pelo Spectre, inicie o Instalador do Visual Studio e selecione Modificar. Navegue para Componentes individuais e procure "espectro". Selecione as caixas correspondentes às plataformas de destino e à versão MSVC para a qual precisa de compilar código mitigado pela Spectre e clique em Modificar para iniciar a instalação.