夜風のMixedReality

xRと出会って変わった人生と出会った技術を書き残すためのGeekなHoloRangerの居場所

Stereokitでハローキューブで任意の3Dモデルを配置する HoloLens Adentカレンダー 2021 12日目

本日は昨日に引き続き[StereoKit]の調査枠です。

〇HoloLens Adevntカレンダー2021とは?

HoloLens Adventカレンダーは技術関連投稿サイトのQiita上で毎年12月に開かれているイベントの一つです。

あるテーマに沿って12月1日から25日までの間毎日誰かしらが情報共有を行うというイベントになっています。

HoloLens Advent カレンダーは初代HoloLensがリリースされた2016年より毎年開かれ今年で5年目となっています。

qiita.com

〇Stereokitとは?

StereoKitはMicrosoftによって提供されているMixedRealityデバイス向けの開発環境でVisualStudioで動作します。

UnityやUnrealを使用することなくC#とVisualStudioだけでアプリケーションを作成することができます。

導入は前回の記事を参考にしてください。

redhologerbera.hatenablog.com

〇hellocube

HelloCubeではプリミティブのCubeが生成されます。

youtu.be

今回はこのモデルを任意のモデルに変更します。

〇モデルの配置

最初にプロジェクト内で使用するモデルをプロジェクトに読み込みます。

 // Initialize StereoKit
            SKSettings settings = new SKSettings
            {
                appName = "StereoKitProjectUWP",
                assetsFolder = "Assets",
            };
            if (!SK.Initialize(settings))
                Environment.Exit(1);

[Program.cs]で宣言される初期値で[assetsFolder]としてデフォルトのフォルダが[Assets]として登録されています。

ここで宣言するファイルがアプリ内で使用する資産のルートフォルダになります。

表示する3Dモデルをルートフォルダの中に配置します。

[StereoKit]はobj、glbなどの規格に対応しています。fbxが対応していない点が注意点です。

これらはBlenderで作成することができます。今回は以下のような形状のモデルを作成しpyramidという名前を付けました。

f:id:Holomoto-Sumire:20211212192812p:plain

[ソリューションエクスプローラ]の[Assets]いかに[pyramid.obj]をドラッグアンドドロップし配置します。

f:id:Holomoto-Sumire:20211212193934p:plain

次にコードです。

            Pose testPose = new Pose(0.1f, 0, -5f, Quat.Identity);
            Model testModel = Model.FromFile("pyramid.obj");

Model.FromFileメソッドを使用してソリューション内のパスからモデルを宣言します。

ここでtestPoseはモデルの座標を宣言します。ここではx軸に10cm、z軸に5mの位置にデフォルトの回転で宣言しています。

次にモデルの生成を行います。

実行中はwhile文内の処理が働いています。

 while (SK.Step(() =>
            {
                if (SK.System.displayType == Display.Opaque)
                    Default.MeshCube.Draw(floorMaterial, floorTransform);

                  testModel.Draw(Matrix.S(1f));
            })) ;
                                testModel.Draw(Matrix.S(1f));

Model.Draw(”モデルのスケール”)で実際にモデルを配置します。

実行すると作成したpyramidのモデルが生成されます。

バウンディングの作成

次にモデルを移動可能にします。

  UI.HandleBegin("Pyramid", ref testPose , testModel.Bounds * Scale);

                testModel.Draw(Matrix.S(1f));

UI.HandleBeginはモデルにバウンドをつけHandTrackingで操作可能にします。

 引数はモデル名、モデルの座標、モデルというように記述します。

これによって操作が可能になります。

youtu.be

以上で任意のモデルを配置できました。