MRが楽しい

MRやVRについて学習したことを書き残す

MRTKのJoint Prefabs(ハンドジョイント)におけるラベルの対応を確認する

本日は MRTK の小ネタ枠です。
MRTKのJoint Prefabs(ハンドジョイント)におけるラベルの対応を確認して記事にします。

IMixedRealityHandJointHandler

IMixedRealityHandJointHandler は手の検出時にイベントを発生させるハンドラです。
取得データには 27 個の関節情報を含む手の形状情報が含まれます。
・IMixedRealityHandJointHandler Interface
docs.microsoft.com

ハンドジョイントのラベルと関節の対応

ハンドジョイントのラベルと関節の対応を以下に示します。
ゼロオリジンでインデックス 0 のみ手の関節に対応していません。
f:id:bluebirdofoz:20210419223957j:plain

ラベル名 インデックス 説明
None 0 対応なし
Wrist 1 手首
Palm 2 手の平
ThumbMetacarpalJoint 3 親指の手首の関節
ThumbProximalJoint 4 親指の付け根の関節
ThumbDistalJoint 5 親指の第1関節
ThumbTip 6 親指の先端
IndexMetacarpal 7 人差し指の手首の関節
IndexKnuckle 8 人差し指の付け根の関節
IndexMiddleJoint 9 人差し指のの第2関節
IndexDistalJoint 10 人差し指のの第1関節
IndexTip 11 人差し指の先端
MiddleMetacarpal 12 中指の手首の関節
MiddleKnuckle 13 中指の付け根の関節
MiddleMiddleJoint 14 中指のの第2関節
MiddleDistalJoint 15 中指のの第1関節
MiddleTipTip 16 中指の先端
RingMetacarpal 17 薬指の手首の関節
RingKnuckle 18 薬指の付け根の関節
RingMiddleJoint 19 薬指のの第2関節
RingDistalJoint 20 薬指のの第1関節
RingTip 21 薬指の先端
PinkyMetacarpal 22 小指の手首の関節
PinkyKnuckle 23 小指の付け根の関節
PinkyMiddleJoint 24 小指のの第2関節
PinkyDistalJoint 25 小指のの第1関節
PinkyTip 26 小指の先端

ハンドジョイントの情報は以下のように取得します。

private HandStatus CheckCurrentHandStatus(InputEventData<IDictionary<TrackedHandJoint, MixedRealityPose>> eventData)
{
    // 各指のジョイント座標を取得する
    IDictionary<TrackedHandJoint, MixedRealityPose> joint = eventData.InputData;
    Vector3 none_0 = joint[TrackedHandJoint.None].Position;                  // 対応なし
    Vector3 wrist_0 = joint[TrackedHandJoint.Wrist].Position;                // 手首
    Vector3 palm_0 = joint[TrackedHandJoint.Palm].Position;                  // 手の平

    Vector3 thumb_0 = joint[TrackedHandJoint.ThumbMetacarpalJoint].Position; // 親指の手首の関節
    Vector3 thumb_1 = joint[TrackedHandJoint.ThumbProximalJoint].Position;   // 親指の付け根の関節
    Vector3 thumb_2 = joint[TrackedHandJoint.ThumbDistalJoint].Position;     // 親指の第1関節
    Vector3 thumb_3 = joint[TrackedHandJoint.ThumbTip].Position;             // 親指の先端

    Vector3 index_0 = joint[TrackedHandJoint.IndexMetacarpal].Position;      // 人差し指の手首の関節
    Vector3 index_1 = joint[TrackedHandJoint.IndexKnuckle].Position;         // 人差し指の付け根の関節
    Vector3 index_2 = joint[TrackedHandJoint.IndexMiddleJoint].Position;     // 人差し指の第2関節
    Vector3 index_3 = joint[TrackedHandJoint.IndexDistalJoint].Position;     // 人差し指の第1関節
    Vector3 index_4 = joint[TrackedHandJoint.IndexTip].Position;             // 人差し指の先端

    Vector3 middle_0 = joint[TrackedHandJoint.MiddleMetacarpal].Position;    // 中指の手首の関節
    Vector3 middle_1 = joint[TrackedHandJoint.MiddleKnuckle].Position;       // 中指の付け根の関節
    Vector3 middle_2 = joint[TrackedHandJoint.MiddleMiddleJoint].Position;   // 中指の第2関節
    Vector3 middle_3 = joint[TrackedHandJoint.MiddleDistalJoint].Position;   // 中指の第1関節
    Vector3 middle_4 = joint[TrackedHandJoint.MiddleTip].Position;           // 中指の先端

    Vector3 ring_0 = joint[TrackedHandJoint.RingMetacarpal].Position;        // 薬指の手首の関節
    Vector3 ring_1 = joint[TrackedHandJoint.RingKnuckle].Position;           // 薬指の付け根の関節
    Vector3 ring_2 = joint[TrackedHandJoint.RingMiddleJoint].Position;       // 薬指の第2関節
    Vector3 ring_3 = joint[TrackedHandJoint.RingDistalJoint].Position;       // 薬指の第1関節
    Vector3 ring_4 = joint[TrackedHandJoint.RingTip].Position;               // 薬指の先端

    Vector3 pinky_0 = joint[TrackedHandJoint.PinkyMetacarpal].Position;      // 小指の手首の関節
    Vector3 pinky_1 = joint[TrackedHandJoint.PinkyKnuckle].Position;         // 小指の付け根の関節
    Vector3 pinky_2 = joint[TrackedHandJoint.PinkyMiddleJoint].Position;     // 小指の第2関節
    Vector3 pinky_3 = joint[TrackedHandJoint.PinkyDistalJoint].Position;     // 小指の第1関節
    Vector3 pinky_4 = joint[TrackedHandJoint.PinkyTip].Position;             // 小指の先端
}


各関節の定義は以下の通りです。
docs.microsoft.com

各関節から取得可能な情報は以下の通りです。
docs.microsoft.com