ホログラフィック DirectX プロジェクトを作成するCreating a holographic DirectX project

注意

この記事は、従来の WinRT ネイティブ Api に関連しています。This article relates to the legacy WinRT native APIs. 新しいネイティブアプリプロジェクトの場合は、 OPENXR API を使用することをお勧めします。For new native app projects, we recommend using the OpenXR API.

HoloLens 用に作成した holographic アプリは、 ユニバーサル Windows プラットフォーム (UWP) アプリになります。A holographic app you create for a HoloLens will be a Universal Windows Platform (UWP) app. デスクトップ Windows Mixed Reality ヘッドセットを対象とする場合は、UWP アプリまたは Win32 アプリを作成できます。If targeting desktop Windows Mixed Reality headsets, you can create a UWP app or a Win32 app.

DirectX 11 holographic UWP アプリテンプレートは DirectX 11 UWP アプリテンプレートとよく似ています。これには、プログラムループ (または "ゲームループ")、Direct3D デバイスとコンテキストを管理するための DeviceResources クラス、および簡略化されたコンテンツレンダラークラスが含まれます。The DirectX 11 holographic UWP app template is much like the DirectX 11 UWP app template; it includes a program loop (or "game loop"), a DeviceResources class to manage the Direct3D device and context, and a simplified content renderer class. 他の UWP アプリと同じように、 IFrameworkViewもあります。It also has an IFrameworkView, just like any other UWP app.

ただし、mixed reality アプリには、一般的な Direct3D UWP アプリには存在しないいくつかの追加機能があります。The mixed reality app, however, has some additional capabilities that aren't present in a typical Direct3D UWP app. Windows Mixed Reality アプリテンプレートでは、次のことができます。The Windows Mixed Reality app template is able to:

  • Holographic カメラに関連付けられている Direct3D デバイスリソースを処理します。Handle Direct3D device resources associated with holographic cameras.
  • システムからカメラのバックバッファーを取得します。または (Direct3D12 の場合)、holographic バックバッファーリソースを作成し、リソースの有効期間を管理します。Retrieve camera back buffers from the system, or (in the case of Direct3D12) create holographic back buffer resources and manage resource lifetimes.
  • 見つめ入力を処理し、簡単なジェスチャを認識します。Handle gaze input, and recognize a simple gesture.
  • 全画面表示のステレオレンダリングモードに切り替えます。Go into full-screen stereo rendering mode.

開始するには?How do I get started?

まず、Visual Studio 2019 および Windows Mixed Reality アプリテンプレートのダウンロードに関する説明に従って、 ツールをインストールします。First install the tools, following the instructions on downloading Visual Studio 2019 and the Windows Mixed Reality app templates. 混合 reality アプリテンプレートは、Visual Studio marketplace の web ダウンロードとして、または VISUAL studio UI を使用して拡張機能としてインストールすることによって入手できます。The mixed reality app templates are available on the Visual Studio marketplace as a web download, or by installing them as an extension through the Visual Studio UI.

これで、DirectX 11 Windows Mixed Reality アプリを作成する準備ができました。Now you're ready to create your DirectX 11 Windows Mixed Reality app! サンプルコンテンツを削除するには、 pchDRAW_SAMPLE_CONTENT プリプロセッサディレクティブをコメントアウトします。Note, to remove the sample content, comment out the DRAW_SAMPLE_CONTENT preprocessor directive in pch.h.

UWP プロジェクトの作成Creating a UWP project

ツールがインストールされたら、HOLOGRAPHIC DirectX UWP プロジェクトを作成できます。Once the tools are installed you can then create a holographic DirectX UWP project.

Visual Studio 2019 で新しいプロジェクトを作成するには:To create a new project in Visual Studio 2019:

  1. Visual Studio を起動します。Start Visual Studio.
  2. 右側の [ はじめ に] セクションで、[ 新しいプロジェクトの作成] を選択します。In the Get Started section on the right, select Create a new project.
  3. [ 新しいプロジェクトの作成 ] ダイアログボックスのドロップダウンメニューで、[ C++]、[ Windows Mixed Reality]、[ UWP] の順に選択します。In the drop-down menus in the Create a new project dialog, select C++, Windows Mixed Reality, and UWP.
  4. Holographic DirectX 11 アプリ (ユニバーサル Windows) (C++/WinRT) を選択します。Select Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Visual Studio 2019 の Holographic DirectX 11 C++/WinRT UWP アプリプロジェクトテンプレートのスクリーンショットScreenshot of the Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2019
    Visual Studio 2019 の Holographic DirectX 11 C++/WinRT UWP アプリプロジェクトテンプレートHolographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2019

    重要

    プロジェクトテンプレートの名前に "(C++/WinRT)" が含まれていることを確認してください。Be sure that the project template's name includes "(C++/WinRT)". それ以外の場合は、古いバージョンの holographic プロジェクトテンプレートがインストールされています。If not, you have an older version of the holographic project templates installed. 最新のプロジェクトテンプレートを入手するには、Visual Studio 2019 の拡張機能として インストール します。To get the latest project templates, install them as an extension to Visual Studio 2019.

  5. [次へ] をクリックします。Click Next.
  6. [ プロジェクト名 ] と [ 場所 ] のテキストボックスに入力し、[ 作成] をクリックまたはタップします。Fill in the Project name and Location text boxes, and click or tap Create. Holographic app プロジェクトが作成されます。The holographic app project is created.
  7. HoloLens 2 のみを対象とする開発では、 ターゲットバージョン最小バージョンWindows 10 バージョン 1903 に設定されていることを確認します。For development targeting only HoloLens 2, ensure that the Target version and Minimum version are set to Windows 10, version 1903. HoloLens (第1世代) またはデスクトップ Windows Mixed Reality ヘッドセットも対象としている場合は、代わりに、 最小バージョンWindows 10 バージョン 1809 に設定できます。ただし、hololens 2 の新機能を使用する場合は、コードに バージョンのアダプティブチェック が必要になります。If you are also targeting HoloLens (1st gen) or desktop Windows Mixed Reality headsets, you can set Minimum version to Windows 10, version 1809 instead, although this will require some version adaptive checks in your code when using new features of HoloLens 2. ターゲットバージョンと最小バージョンとして Windows 10 バージョン1903を設定するスクリーンショットScreenshot of setting Windows 10, version 1903 as the target and minimum versions
    ターゲットバージョンと最小バージョンとして Windows 10 バージョン1903を 設定するSetting Windows 10, version 1903 as the target and minimum versions

    重要

    オプションとして windows 10 バージョン 1903 が表示されない場合は、最新の WINDOWS 10 SDK がインストールされていません。If you do not see Windows 10, version 1903 as an option, you do not have the latest Windows 10 SDK installed. このオプションを表示するに は、Windows 10 SDK のバージョン10.0.18362.0 以降をインストールします。To get this option to appear, install version 10.0.18362.0 or later of the Windows 10 SDK.

Visual Studio 2017 で新しいプロジェクトを作成するには:To create a new project in Visual Studio 2017:

  1. Visual Studio を起動します。Start Visual Studio.
  2. [ ファイル ] メニューの [ 新規作成 ] をポイントし、コンテキストメニューの [ プロジェクト ] をクリックします。From the File menu, point to New and select Project from the context menu. [新しいプロジェクト] ダイアログ ボックスが開きます。The New Project dialog opens.
  3. 左側の [ インストール済み ] を展開し、[ Visual C++ 言語] ノードを展開します。Expand Installed on the left and expand the Visual C++ language node.
  4. [ Windows Universal > Holographic ] ノードに移動し、[ Holographic DirectX 11 App (ユニバーサル Windows) (C++/WinRT)] を選択します。Navigate to the Windows Universal > Holographic node and select Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Visual Studio 2017 の Holographic DirectX 11 C++/WinRT UWP アプリプロジェクトテンプレートのスクリーンショットScreenshot of the Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2017
    Visual Studio 2017 の Holographic DirectX 11 C++/WinRT UWP アプリプロジェクトテンプレートHolographic DirectX 11 C++/WinRT UWP app project template in Visual Studio 2017

    重要

    プロジェクトテンプレートの名前に "(C++/WinRT)" が含まれていることを確認してください。Be sure that the project template's name includes "(C++/WinRT)". それ以外の場合は、古いバージョンの holographic プロジェクトテンプレートがインストールされています。If not, you have an older version of the holographic project templates installed. 最新のプロジェクトテンプレートを入手するには、Visual Studio 2017 の拡張機能として インストール します。To get the latest project templates, install them as an extension to Visual Studio 2017.

  5. [ 名前 ] と [ 場所 ] のテキストボックスに入力し、[ OK] をクリックまたはタップします。Fill in the Name and Location text boxes, and click or tap OK. Holographic app プロジェクトが作成されます。The holographic app project is created.
  6. HoloLens 2 のみを対象とする開発では、 ターゲットバージョン最小バージョンWindows 10 バージョン 1903 に設定されていることを確認します。For development targeting only HoloLens 2, ensure that the Target version and Minimum version are set to Windows 10, version 1903. HoloLens (第1世代) またはデスクトップ Windows Mixed Reality ヘッドセットも対象としている場合は、代わりに、 最小バージョンWindows 10 バージョン 1809 に設定できます。ただし、hololens 2 の新機能を使用する場合は、コードに バージョンのアダプティブチェック が必要になります。If you are also targeting HoloLens (1st gen) or desktop Windows Mixed Reality headsets, you can set Minimum version to Windows 10, version 1809 instead, although this will require some version adaptive checks in your code when using new features of HoloLens 2. ターゲットバージョンと最小バージョンとして Windows 10 バージョン1903を設定するスクリーンショットScreenshot of setting Windows 10, version 1903 as the target and minimum versions
    ターゲットバージョンと最小バージョンとして Windows 10 バージョン1903を 設定するSetting Windows 10, version 1903 as the target and minimum versions

    重要

    オプションとして windows 10 バージョン 1903 が表示されない場合は、最新の WINDOWS 10 SDK がインストールされていません。If you do not see Windows 10, version 1903 as an option, you do not have the latest Windows 10 SDK installed. このオプションを表示するに は、Windows 10 SDK のバージョン10.0.18362.0 以降をインストールします。To get this option to appear, install version 10.0.18362.0 or later of the Windows 10 SDK.

このテンプレートは、c++ /WinRTを使用してプロジェクトを生成します。これは、標準に準拠している c++ 17 コンパイラをサポートする Windows ランタイム Api の c++ 17 言語の射影です。The template generates a project using C++/WinRT, a C++17 language projection of the Windows Runtime APIs that supports any standards-compliant C++17 compiler. このプロジェクトは、ユーザーから2メートル離れたワールドロックキューブを作成する方法を示しています。The project shows how to create a world-locked cube that's placed two meters from the user. ユーザーは、コントローラー上のボタンを使用して、ユーザーの宝石によって指定された別の位置にキューブを配置できますThe user can air-tap or press a button on the controller to place the cube in a different position that's specified by the user's gaze. このプロジェクトを変更して、mixed reality アプリを作成できます。You can modify this project to create any mixed reality app.

または、SharpDX に基づく Visual C# holographic プロジェクトテンプレートを使用して、新しいプロジェクトを作成することもできます。Alternatively, you can create a new project using the Visual C# holographic project template, which is based on SharpDX. Holographic C# プロジェクトが Windows Holographic アプリテンプレートから開始されなかった場合は、プロジェクトに追加した HLSL ファイルをコンパイルするために、Windows Mixed Reality C# テンプレートプロジェクトからファイルをコピーし、.csproj ファイルにインポートする必要があります。If your holographic C# project did not start from the Windows Holographic app template, you will need to copy the ms.fxcompile.targets file from a Windows Mixed Reality C# template project and import it in your .csproj file in order to compile HLSL files that you add to your project. Direct3D 12 テンプレートは、Visual Studio の Windows Mixed Reality アプリテンプレート拡張機能にも用意されています。A Direct3D 12 template is also provided in the Windows Mixed Reality app templates extension to Visual Studio.

「Visual Studio を使用してデプロイとデバッグを行う」で、HoloLens、PC にデバイスが接続されている PC、またはエミュレーターにサンプルを構築してデプロイする方法について確認します。Review Using Visual Studio to deploy and debug for information on how to build and deploy the sample to your HoloLens, PC with immersive device attached, or an emulator.

次の手順の残りの部分では、C++ を使用してアプリをビルドしていることを前提としています。The rest of the instructions below will assume that you are using C++ to build your app.

UWP アプリのエントリポイントUWP app entry point

Holographic UWP アプリは、AppView .cpp の Wwinmain 関数で開始されます。Your holographic UWP app starts in the wWinMain function in AppView.cpp. Wwinmain 関数は、アプリの IFrameworkViewを作成し、それを使用して CoreApplicationを開始します。The wWinMain function creates the app's IFrameworkView and starts the CoreApplication with it.

Appview .cpp から:From 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 イベントとメッセージングなどとの対話を処理します。From that point on, the AppView class handles interaction with Windows basic input events, CoreWindow events and messaging, and so on. また、アプリで使用される HolographicSpace も作成されます。It will also create the HolographicSpace used by your app.

Win32 プロジェクトの作成Creating a Win32 project

Win32 holographic プロジェクトの構築を開始する最も簡単な方法は、 basichologram win32 サンプルを調整することです。The easiest way to get started building a Win32 holographic project is to adapt the BasicHologram Win32 sample.

この Win32 サンプルでは、標準に準拠している C++ 17 コンパイラをサポートする Windows ランタイム Api の C++ 17language プロジェクションである c++/WinRTを使用します。This Win32 sample uses C++/WinRT, a C++17 language projection of the Windows Runtime APIs that supports any standards-compliant C++17 compiler. このプロジェクトは、ユーザーから2メートル離れたワールドロックキューブを作成する方法を示しています。The project shows how to create a world-locked cube that's placed two meters from the user. ユーザーは、コントローラー上のボタンをクリックして、ユーザーの 宝石によって指定された別の位置にキューブを配置できます。The user can press a button on the controller to place the cube in a different position that's specified by the user's gaze. このプロジェクトを変更して、mixed reality アプリを作成できます。You can modify this project to create any mixed reality app.

Win32 アプリのエントリポイントWin32 app entry point

Holographic Win32 アプリは、AppMain の Wwinmain 関数で開始されます。Your holographic Win32 app starts in the wWinMain function in AppMain.cpp. Wwinmain 関数は、アプリの HWND を作成し、そのメッセージループを開始します。The wWinMain function creates the app's HWND and starts its message loop.

Appmain .cpp から:From 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 クラスは基本的なウィンドウメッセージとの対話を処理します。From that point on, the AppMain class handles interaction with basic window messages, and so on. また、アプリで使用される HolographicSpace も作成されます。It will also create the HolographicSpace used by your app.

Holographic コンテンツのレンダリングRender holographic content

プロジェクトの コンテンツ フォルダーには、 holographic 空間にホログラムをレンダリングするためのクラスが含まれています。The project's Content folder contains classes for rendering holograms in the holographic space. テンプレートの既定のホログラムは、ユーザーから2メートル離れた位置にある回転する立方体です。The default hologram in the template is a spinning cube that's placed two meters away from the user. このキューブの描画は、次の主要なメソッドを含む SpinningCubeRenderer に実装されてい ますDrawing this cube is implemented in SpinningCubeRenderer.cpp, which has these key methods:

メソッドMethod 説明Explanation
CreateDeviceDependentResources シェーダーを読み込み、キューブメッシュを作成します。Loads shaders and creates the cube mesh.
PositionHologram 指定した SpatialPointerPoseによって指定された場所にホログラムを配置します。Places the hologram at the location specified by the provided SpatialPointerPose.
Update キューブを回転させ、モデルマトリックスを設定します。Rotates the cube, and sets the model matrix.
Render 頂点シェーダーとピクセルシェーダーを使用してフレームをレンダリングします。Renders a frame using the vertex and pixel shaders.

シェーダー サブフォルダーには、4つの既定のシェーダー実装が含まれています。The Shaders subfolder contains four default shader implementations:

シェーダーShader 説明Explanation
GeometryShader.hlsl ジオメトリを変更せずに残すパススルー。A pass-through that leaves the geometry unmodified.
PixelShader.hlsl カラーデータを通過します。Passes through the color data. 色データが補間され、ラスタライズの手順でピクセルに割り当てられます。The color data is interpolated and assigned to a pixel at the rasterization step.
VertexShader.hlsl GPU で頂点処理を行うための単純なシェーダー。Simple shader to do vertex processing on the GPU.
VPRTVertexShader.hlsl Windows Mixed Reality ステレオレンダリング用に最適化された、GPU で頂点処理を行うための単純なシェーダー。Simple shader to do vertex processing on the GPU, that is optimized for Windows Mixed Reality stereo rendering.

VertexShaderShared.hlsl との間で共有される共通のコード VertexShader.hlsl を格納 VPRTVertexShader.hlsl します。VertexShaderShared.hlsl contains common code shared between VertexShader.hlsl and VPRTVertexShader.hlsl.

注: Direct3D 12 アプリケーションテンプレートにもが含まれてい ViewInstancingVertexShader.hlsl ます。Note: The Direct3D 12 app template also includes ViewInstancingVertexShader.hlsl. このバリアントでは、D3D12 のオプション機能を使用して、ステレオ画像をより効率的にレンダリングします。This variant uses D3D12 optional features to render stereo images more efficiently.

シェーダーは、プロジェクトのビルド時にコンパイルされ、 SpinningCubeRenderer:: CreateDeviceDependentResources メソッドに読み込まれます。The shaders are compiled when the project is built, and they're loaded in the SpinningCubeRenderer::CreateDeviceDependentResources method.

ホログラムを操作するInteract with your holograms

ユーザー入力は SpatialInputHandler クラスで処理されます。このクラスは SpatialInteractionManager インスタンスを取得し、 sourcepressed イベントをサブスクライブします。User input is processed in the SpatialInputHandler class, which gets a SpatialInteractionManager instance and subscribes to the SourcePressed event. これにより、エアタップジェスチャとその他の空間入力イベントを検出できるようになります。This enables detecting the air-tap gesture and other spatial input events.

Holographic コンテンツの更新Update holographic content

混合 reality アプリの更新は、既定ではの Update メソッドに実装されているゲームループで更新され AppMain.cpp ます。Your mixed reality app updates in a game loop, which by default is implemented in the Update method in AppMain.cpp. Update メソッドは、回転するキューブなどのシーンオブジェクトを更新し、最新のビューおよび射影マトリックスを取得して、スワップチェーンを表示するために使用される HolographicFrameオブジェクトを返します。The Update method updates scene objects, like the spinning cube, and returns a HolographicFrame object that is used to get up-to-date view and projection matrices and to present the swap chain.

Render メソッドは、 AppMain.cpp 現在のアプリと空間ポジショニングの状態に従って、 HolographicFrame を受け取り、現在のフレームを各 holographic カメラにレンダリングします。The Render method in AppMain.cpp takes the HolographicFrame and renders the current frame to each holographic camera, according to the current app and spatial positioning state.

メモNotes

Windows Mixed Reality アプリケーションテンプレートで、Spectre 軽減フラグが有効になっているコンパイル (/Qspectre) がサポートされるようになりました。The Windows Mixed Reality app template now supports compilation with the Spectre mitigation flag enabled (/Qspectre). Spectre 軽減策が有効になっている構成をコンパイルする前に、Microsoft Visual C++ Spectre (MSVC) ランタイムライブラリを必ずインストールしてください。Make sure to install the Spectre-mitigated version of the Microsoft Visual C++ (MSVC) runtime libraries prior to compiling a configuration with Spectre mitigation enabled. Spectre の緩和された C++ ライブラリをインストールするには、Visual Studio インストーラーを起動し、[ 変更] を選択します。To install the Spectre-mitigated C++ libraries, launch the Visual Studio Installer and select Modify. 個々の コンポーネント に移動し、"spectre" を検索します。Navigate to Individual components and search for "spectre". Spectre コードをコンパイルするために必要なターゲットプラットフォームと MSVC のバージョンに対応するボックスを選択し、[ 変更 ] をクリックしてインストールを開始します。Select the boxes corresponding to the target platforms and MSVC version that you need to compile Spectre-mitigated code for, and click Modify to begin the install.

関連項目See also