Holographic DirectX プロジェクトを作成します。Creating a holographic DirectX project

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 アプリ テンプレートこれはプログラム ループ (または「ゲーム ループ」) が含まれます。、 DeviceResources Direct3D デバイスと、コンテキストを管理するクラスと簡略化されたコンテンツ レンダラー クラス。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. また、 IFrameworkView他の UWP アプリと同様、します。It also has an IFrameworkView, just like any other UWP app.

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

  • Holographic カメラに関連付けられている Direct3D デバイス リソースを処理します。Handle Direct3D device resources associated with holographic cameras.
  • システムからカメラのバック バッファーを取得します。Retrieve camera back buffers from the system.
  • 処理視線入力、および単純な認識ジェスチャします。Handle gaze input, and recognize a simple gesture.
  • ステレオのレンダリングを全画面表示モードに移動します。Go into full-screen stereo rendering mode.

どのように始めればよいですか。How do I get started?

最初ツールをインストールする、次の Visual Studio 2017 のダウンロードについてと Microsoft HoloLens のエミュレーター。First install the tools, following the instructions on downloading Visual Studio 2017 and the Microsoft HoloLens emulator. Microsoft HoloLens のエミュレーターと同じインストーラーには、holographic アプリ テンプレートが含まれます。The holographic app templates are included in the same installer as the Microsoft HoloLens emulator. また、インストールする前に、テンプレートをインストールするオプションが選択されていることを確認します。Also ensure that the option to install the templates is selected before installing.

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

UWP プロジェクトを作成します。Creating a UWP project

1 回、ツールがインストールされているholographic DirectX UWP プロジェクトを作成することができます。Once the tools are installed you can then create a holographic DirectX UWP project.

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

  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 ユニバーサル > HolographicノードHolographic DirectX 11 アプリ (ユニバーサル Windows) (C++/WinRT) します。Navigate to the Windows Universal > Holographic node and select Holographic DirectX 11 App (Universal Windows) (C++/WinRT). Holographic の DirectX 11 のスクリーン ショットC++Visual Studio での WinRT UWP アプリ プロジェクト テンプレートScreenshot of the Holographic DirectX 11 C++/WinRT UWP app project template in Visual Studio
    DirectX 11 の holographic C++Visual Studio での WinRT UWP アプリ プロジェクト テンプレートHolographic DirectX 11 C++/WinRT UWP app project template in Visual Studio

    重要

    プロジェクト テンプレートの名前が含まれているかどうかを必ず"(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. 最新のプロジェクト テンプレートを取得する最新 HoloLens のエミュレーターをインストールします。To get the latest project templates, install the latest HoloLens Emulator.

  5. 入力、名前場所テキスト ボックス、およびクリックまたはタップしますOKFill in the Name and Location text boxes, and click or tap OK. Holographic アプリ プロジェクトが作成されます。The holographic app project is created.
  6. 開発のため、HoloLens 2 のみを対象とすることを確認、ターゲット バージョン最小バージョンに設定されているWindows 10、バージョンが 1903For 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. 表示するには、このオプションを取得する10.0.18362.0 のバージョンをインストールまたはそれ以降、Windows 10 SDK のします。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. すべての複合現実アプリを作成するには、このプロジェクトを変更できます。You can modify this project to create any mixed reality app.

使用して新しいプロジェクトを作成する代わりに、 Visual C# holographic プロジェクト テンプレート、SharpDX に基づいています。Alternatively, you can create a new project using the Visual C# holographic project template, which is based on SharpDX. 場合、holographic C# Windows Holographic のアプリ テンプレートからプロジェクトは開始されませんでした、Windows Mixed Reality から ms.fxcompile.targets ファイルをコピーする必要がありますC#HLSL をコンパイルするためにファイルで、.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.

レビューを配置およびデバッグ Visual Studio を使用して構築し、HoloLens、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 アプリケーションの起動時、 wWinMain AppView.cpp 内の関数。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

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

この Win32 サンプルを使用して C++/WinRT、標準に準拠した c++ 17 コンパイラをサポートする Windows ランタイム Api の c++ 17 の言語プロジェクションです。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. すべての複合現実アプリを作成するには、このプロジェクトを変更できます。You can modify this project to create any mixed reality app.

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

Holographic Win32 アプリケーションの起動時、 wWinMain AppMain.cpp 内の関数。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.cppがこれらの主要メソッド。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.hlslVPRTVertexShader.hlslします。VertexShaderShared.hlsl contains common code shared between VertexShader.hlsl and VPRTVertexShader.hlsl.

プロジェクトをビルドするとで読み込まれているときに、シェーダーがコンパイルされる、 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

既定で実装されているゲームのループで、複合現実アプリの更新プログラム、 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.

レンダリングメソッド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.

関連項目See also