本日は MRTK の小ネタ枠です。
MRTKのJoint Prefabs(ハンドジョイント)におけるラベルの対応を確認して記事にします。
IMixedRealityHandJointHandler
IMixedRealityHandJointHandler は手の検出時にイベントを発生させるハンドラです。
取得データには 27 個の関節情報を含む手の形状情報が含まれます。
・IMixedRealityHandJointHandler Interface
docs.microsoft.com
ハンドジョイントのラベルと関節の対応
ハンドジョイントのラベルと関節の対応を以下に示します。
ゼロオリジンでインデックス 0 のみ手の関節に対応していません。
ラベル名 | インデックス | 説明 |
---|---|---|
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