/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* Licensed under the Oculus SDK License Agreement (the "License");
* you may not use the Oculus SDK except in compliance with the License,
* which is provided at the time of installation or download, or which
* otherwise accompanies this software in either electronic or hard copy form.
*
* You may obtain a copy of the License at
*
* https://developer.oculus.com/licenses/oculussdk/
*
* Unless required by applicable law or agreed to in writing, the Oculus SDK
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System;
using System.Collections.Generic;
using UnityEngine;
public partial class OVRUnityHumanoidSkeletonRetargeter
{
///
/// This class contains mappings between Unity Humanoid Rig bones and Oculus Body Tracking bones
///
public static class OVRHumanBodyBonesMappings
{
///
/// Corresponds to major sections of the body (left food, chest, etc).
///
public enum BodySection
{
LeftLeg,
LeftFoot,
RightLeg,
RightFoot,
LeftArm,
LeftHand,
RightArm,
RightHand,
Hips,
Back,
Neck,
Head
};
///
/// Body tracking bone IDs that should be exposed through the inspector.
/// BoneId has enum values that map to the same integers, which would not work
/// with a serialized field that expects unique integers. BodyTrackingBoneId
/// is an enum that restricts BoneId to the values that we care about.
///
public enum BodyTrackingBoneId
{
Body_Start = OVRPlugin.BoneId.Body_Start,
Body_Root = OVRPlugin.BoneId.Body_Root,
Body_Hips = OVRPlugin.BoneId.Body_Hips,
Body_SpineLower = OVRPlugin.BoneId.Body_SpineLower,
Body_SpineMiddle = OVRPlugin.BoneId.Body_SpineMiddle,
Body_SpineUpper = OVRPlugin.BoneId.Body_SpineUpper,
Body_Chest = OVRPlugin.BoneId.Body_Chest,
Body_Neck = OVRPlugin.BoneId.Body_Neck,
Body_Head = OVRPlugin.BoneId.Body_Head,
Body_LeftShoulder = OVRPlugin.BoneId.Body_LeftShoulder,
Body_LeftScapula = OVRPlugin.BoneId.Body_LeftScapula,
Body_LeftArmUpper = OVRPlugin.BoneId.Body_LeftArmUpper,
Body_LeftArmLower = OVRPlugin.BoneId.Body_LeftArmLower,
Body_LeftHandWristTwist = OVRPlugin.BoneId.Body_LeftHandWristTwist,
Body_RightShoulder = OVRPlugin.BoneId.Body_RightShoulder,
Body_RightScapula = OVRPlugin.BoneId.Body_RightScapula,
Body_RightArmUpper = OVRPlugin.BoneId.Body_RightArmUpper,
Body_RightArmLower = OVRPlugin.BoneId.Body_RightArmLower,
Body_RightHandWristTwist = OVRPlugin.BoneId.Body_RightHandWristTwist,
Body_LeftHandPalm = OVRPlugin.BoneId.Body_LeftHandPalm,
Body_LeftHandWrist = OVRPlugin.BoneId.Body_LeftHandWrist,
Body_LeftHandThumbMetacarpal = OVRPlugin.BoneId.Body_LeftHandThumbMetacarpal,
Body_LeftHandThumbProximal = OVRPlugin.BoneId.Body_LeftHandThumbProximal,
Body_LeftHandThumbDistal = OVRPlugin.BoneId.Body_LeftHandThumbDistal,
Body_LeftHandThumbTip = OVRPlugin.BoneId.Body_LeftHandThumbTip,
Body_LeftHandIndexMetacarpal = OVRPlugin.BoneId.Body_LeftHandIndexMetacarpal,
Body_LeftHandIndexProximal = OVRPlugin.BoneId.Body_LeftHandIndexProximal,
Body_LeftHandIndexIntermediate = OVRPlugin.BoneId.Body_LeftHandIndexIntermediate,
Body_LeftHandIndexDistal = OVRPlugin.BoneId.Body_LeftHandIndexDistal,
Body_LeftHandIndexTip = OVRPlugin.BoneId.Body_LeftHandIndexTip,
Body_LeftHandMiddleMetacarpal = OVRPlugin.BoneId.Body_LeftHandMiddleMetacarpal,
Body_LeftHandMiddleProximal = OVRPlugin.BoneId.Body_LeftHandMiddleProximal,
Body_LeftHandMiddleIntermediate = OVRPlugin.BoneId.Body_LeftHandMiddleIntermediate,
Body_LeftHandMiddleDistal = OVRPlugin.BoneId.Body_LeftHandMiddleDistal,
Body_LeftHandMiddleTip = OVRPlugin.BoneId.Body_LeftHandMiddleTip,
Body_LeftHandRingMetacarpal = OVRPlugin.BoneId.Body_LeftHandRingMetacarpal,
Body_LeftHandRingProximal = OVRPlugin.BoneId.Body_LeftHandRingProximal,
Body_LeftHandRingIntermediate = OVRPlugin.BoneId.Body_LeftHandRingIntermediate,
Body_LeftHandRingDistal = OVRPlugin.BoneId.Body_LeftHandRingDistal,
Body_LeftHandRingTip = OVRPlugin.BoneId.Body_LeftHandRingTip,
Body_LeftHandLittleMetacarpal = OVRPlugin.BoneId.Body_LeftHandLittleMetacarpal,
Body_LeftHandLittleProximal = OVRPlugin.BoneId.Body_LeftHandLittleProximal,
Body_LeftHandLittleIntermediate = OVRPlugin.BoneId.Body_LeftHandLittleIntermediate,
Body_LeftHandLittleDistal = OVRPlugin.BoneId.Body_LeftHandLittleDistal,
Body_LeftHandLittleTip = OVRPlugin.BoneId.Body_LeftHandLittleTip,
Body_RightHandPalm = OVRPlugin.BoneId.Body_RightHandPalm,
Body_RightHandWrist = OVRPlugin.BoneId.Body_RightHandWrist,
Body_RightHandThumbMetacarpal = OVRPlugin.BoneId.Body_RightHandThumbMetacarpal,
Body_RightHandThumbProximal = OVRPlugin.BoneId.Body_RightHandThumbProximal,
Body_RightHandThumbDistal = OVRPlugin.BoneId.Body_RightHandThumbDistal,
Body_RightHandThumbTip = OVRPlugin.BoneId.Body_RightHandThumbTip,
Body_RightHandIndexMetacarpal = OVRPlugin.BoneId.Body_RightHandIndexMetacarpal,
Body_RightHandIndexProximal = OVRPlugin.BoneId.Body_RightHandIndexProximal,
Body_RightHandIndexIntermediate = OVRPlugin.BoneId.Body_RightHandIndexIntermediate,
Body_RightHandIndexDistal = OVRPlugin.BoneId.Body_RightHandIndexDistal,
Body_RightHandIndexTip = OVRPlugin.BoneId.Body_RightHandIndexTip,
Body_RightHandMiddleMetacarpal = OVRPlugin.BoneId.Body_RightHandMiddleMetacarpal,
Body_RightHandMiddleProximal = OVRPlugin.BoneId.Body_RightHandMiddleProximal,
Body_RightHandMiddleIntermediate = OVRPlugin.BoneId.Body_RightHandMiddleIntermediate,
Body_RightHandMiddleDistal = OVRPlugin.BoneId.Body_RightHandMiddleDistal,
Body_RightHandMiddleTip = OVRPlugin.BoneId.Body_RightHandMiddleTip,
Body_RightHandRingMetacarpal = OVRPlugin.BoneId.Body_RightHandRingMetacarpal,
Body_RightHandRingProximal = OVRPlugin.BoneId.Body_RightHandRingProximal,
Body_RightHandRingIntermediate = OVRPlugin.BoneId.Body_RightHandRingIntermediate,
Body_RightHandRingDistal = OVRPlugin.BoneId.Body_RightHandRingDistal,
Body_RightHandRingTip = OVRPlugin.BoneId.Body_RightHandRingTip,
Body_RightHandLittleMetacarpal = OVRPlugin.BoneId.Body_RightHandLittleMetacarpal,
Body_RightHandLittleProximal = OVRPlugin.BoneId.Body_RightHandLittleProximal,
Body_RightHandLittleIntermediate = OVRPlugin.BoneId.Body_RightHandLittleIntermediate,
Body_RightHandLittleDistal = OVRPlugin.BoneId.Body_RightHandLittleDistal,
Body_RightHandLittleTip = OVRPlugin.BoneId.Body_RightHandLittleTip,
Body_End = OVRPlugin.BoneId.Body_End,
// add new bones here
NoOverride = OVRPlugin.BoneId.Body_End + 1,
Remove = OVRPlugin.BoneId.Body_End + 2
};
///
/// For each humanoid bone, create a pair that determines the
/// pair of bones that create the joint pair. Used to
/// create the "axis" of the bone.
///
public static readonly Dictionary>
BoneToJointPair = new Dictionary>()
{
{
HumanBodyBones.Neck,
new Tuple(HumanBodyBones.Neck, HumanBodyBones.Head)
},
{
HumanBodyBones.Head,
new Tuple(HumanBodyBones.Neck, HumanBodyBones.Head)
},
{
HumanBodyBones.LeftEye,
new Tuple(HumanBodyBones.Head, HumanBodyBones.LeftEye)
},
{
HumanBodyBones.RightEye,
new Tuple(HumanBodyBones.Head, HumanBodyBones.RightEye)
},
{
HumanBodyBones.Jaw,
new Tuple(HumanBodyBones.Head, HumanBodyBones.Jaw)
},
{
HumanBodyBones.Hips,
new Tuple(HumanBodyBones.Hips, HumanBodyBones.Spine)
},
{
HumanBodyBones.Spine,
new Tuple(HumanBodyBones.Spine, HumanBodyBones.Chest)
},
{
HumanBodyBones.Chest,
new Tuple(HumanBodyBones.Chest, HumanBodyBones.UpperChest)
},
{
HumanBodyBones.UpperChest,
new Tuple(HumanBodyBones.UpperChest, HumanBodyBones.Neck)
},
{
HumanBodyBones.LeftShoulder,
new Tuple(HumanBodyBones.LeftShoulder, HumanBodyBones.LeftUpperArm)
},
{
HumanBodyBones.LeftUpperArm,
new Tuple(HumanBodyBones.LeftUpperArm, HumanBodyBones.LeftLowerArm)
},
{
HumanBodyBones.LeftLowerArm,
new Tuple(HumanBodyBones.LeftLowerArm, HumanBodyBones.LeftHand)
},
{
HumanBodyBones.LeftHand,
new Tuple(HumanBodyBones.LeftHand,
HumanBodyBones.LeftMiddleProximal)
},
{
HumanBodyBones.RightShoulder,
new Tuple(HumanBodyBones.RightShoulder,
HumanBodyBones.RightUpperArm)
},
{
HumanBodyBones.RightUpperArm,
new Tuple(HumanBodyBones.RightUpperArm,
HumanBodyBones.RightLowerArm)
},
{
HumanBodyBones.RightLowerArm,
new Tuple(HumanBodyBones.RightLowerArm, HumanBodyBones.RightHand)
},
{
HumanBodyBones.RightHand,
new Tuple(HumanBodyBones.RightHand,
HumanBodyBones.RightMiddleProximal)
},
{
HumanBodyBones.RightUpperLeg,
new Tuple(HumanBodyBones.RightUpperLeg,
HumanBodyBones.RightLowerLeg)
},
{
HumanBodyBones.RightLowerLeg,
new Tuple(HumanBodyBones.RightLowerLeg, HumanBodyBones.RightFoot)
},
{
HumanBodyBones.RightFoot,
new Tuple(HumanBodyBones.RightFoot, HumanBodyBones.RightToes)
},
{
HumanBodyBones.RightToes,
new Tuple(HumanBodyBones.RightFoot, HumanBodyBones.RightToes)
},
{
HumanBodyBones.LeftUpperLeg,
new Tuple(HumanBodyBones.LeftUpperLeg, HumanBodyBones.LeftLowerLeg)
},
{
HumanBodyBones.LeftLowerLeg,
new Tuple(HumanBodyBones.LeftLowerLeg, HumanBodyBones.LeftFoot)
},
{
HumanBodyBones.LeftFoot,
new Tuple(HumanBodyBones.LeftFoot, HumanBodyBones.LeftToes)
},
{
HumanBodyBones.LeftToes,
new Tuple(HumanBodyBones.LeftFoot, HumanBodyBones.LeftToes)
},
{
HumanBodyBones.LeftThumbProximal,
new Tuple(HumanBodyBones.LeftThumbProximal,
HumanBodyBones.LeftThumbIntermediate)
},
{
HumanBodyBones.LeftThumbIntermediate,
new Tuple(HumanBodyBones.LeftThumbIntermediate,
HumanBodyBones.LeftThumbDistal)
},
{
HumanBodyBones.LeftThumbDistal,
new Tuple(HumanBodyBones.LeftThumbDistal, HumanBodyBones.LastBone)
}, // Invalid.
{
HumanBodyBones.LeftIndexProximal,
new Tuple(HumanBodyBones.LeftIndexProximal,
HumanBodyBones.LeftIndexIntermediate)
},
{
HumanBodyBones.LeftIndexIntermediate,
new Tuple(HumanBodyBones.LeftIndexIntermediate,
HumanBodyBones.LeftIndexDistal)
},
{
HumanBodyBones.LeftIndexDistal,
new Tuple(HumanBodyBones.LeftIndexDistal, HumanBodyBones.LastBone)
}, // Invalid.
{
HumanBodyBones.LeftMiddleProximal,
new Tuple(HumanBodyBones.LeftMiddleProximal,
HumanBodyBones.LeftMiddleIntermediate)
},
{
HumanBodyBones.LeftMiddleIntermediate,
new Tuple(HumanBodyBones.LeftMiddleIntermediate,
HumanBodyBones.LeftMiddleDistal)
},
{
HumanBodyBones.LeftMiddleDistal,
new Tuple(HumanBodyBones.LeftMiddleDistal, HumanBodyBones.LastBone)
}, // Invalid.
{
HumanBodyBones.LeftRingProximal,
new Tuple(HumanBodyBones.LeftRingProximal,
HumanBodyBones.LeftRingIntermediate)
},
{
HumanBodyBones.LeftRingIntermediate,
new Tuple(HumanBodyBones.LeftRingIntermediate,
HumanBodyBones.LeftRingDistal)
},
{
HumanBodyBones.LeftRingDistal,
new Tuple(HumanBodyBones.LeftRingDistal, HumanBodyBones.LastBone)
}, // Invalid.
{
HumanBodyBones.LeftLittleProximal,
new Tuple(HumanBodyBones.LeftLittleProximal,
HumanBodyBones.LeftLittleIntermediate)
},
{
HumanBodyBones.LeftLittleIntermediate,
new Tuple(HumanBodyBones.LeftLittleIntermediate,
HumanBodyBones.LeftLittleDistal)
},
{
HumanBodyBones.LeftLittleDistal,
new Tuple(HumanBodyBones.LeftLittleDistal, HumanBodyBones.LastBone)
}, // Invalid.
{
HumanBodyBones.RightThumbProximal,
new Tuple(HumanBodyBones.RightThumbProximal,
HumanBodyBones.RightThumbIntermediate)
},
{
HumanBodyBones.RightThumbIntermediate,
new Tuple(HumanBodyBones.RightThumbIntermediate,
HumanBodyBones.RightThumbDistal)
},
{
HumanBodyBones.RightThumbDistal,
new Tuple(HumanBodyBones.RightThumbDistal, HumanBodyBones.LastBone)
}, // Invalid.
{
HumanBodyBones.RightIndexProximal,
new Tuple(HumanBodyBones.RightIndexProximal,
HumanBodyBones.RightIndexIntermediate)
},
{
HumanBodyBones.RightIndexIntermediate,
new Tuple(HumanBodyBones.RightIndexIntermediate,
HumanBodyBones.RightIndexDistal)
},
{
HumanBodyBones.RightIndexDistal,
new Tuple(HumanBodyBones.RightIndexDistal, HumanBodyBones.LastBone)
}, // Invalid.
{
HumanBodyBones.RightMiddleProximal,
new Tuple(HumanBodyBones.RightMiddleProximal,
HumanBodyBones.RightMiddleIntermediate)
},
{
HumanBodyBones.RightMiddleIntermediate,
new Tuple(HumanBodyBones.RightMiddleIntermediate,
HumanBodyBones.RightMiddleDistal)
},
{
HumanBodyBones.RightMiddleDistal,
new Tuple(HumanBodyBones.RightMiddleDistal, HumanBodyBones.LastBone)
}, // Invalid.
{
HumanBodyBones.RightRingProximal,
new Tuple(HumanBodyBones.RightRingProximal,
HumanBodyBones.RightRingIntermediate)
},
{
HumanBodyBones.RightRingIntermediate,
new Tuple(HumanBodyBones.RightRingIntermediate,
HumanBodyBones.RightRingDistal)
},
{
HumanBodyBones.RightRingDistal,
new Tuple(HumanBodyBones.RightRingDistal, HumanBodyBones.LastBone)
}, // Invalid.
{
HumanBodyBones.RightLittleProximal,
new Tuple(HumanBodyBones.RightLittleProximal,
HumanBodyBones.RightLittleIntermediate)
},
{
HumanBodyBones.RightLittleIntermediate,
new Tuple(HumanBodyBones.RightLittleIntermediate,
HumanBodyBones.RightLittleDistal)
},
{
HumanBodyBones.RightLittleDistal,
new Tuple(HumanBodyBones.RightLittleDistal, HumanBodyBones.LastBone)
}, // Invalid.
};
///
/// Paired human body bones with body sections.
///
public static readonly Dictionary BoneToBodySection =
new Dictionary()
{
{ HumanBodyBones.Neck, BodySection.Neck },
{ HumanBodyBones.Head, BodySection.Head },
{ HumanBodyBones.LeftEye, BodySection.Head },
{ HumanBodyBones.RightEye, BodySection.Head },
{ HumanBodyBones.Jaw, BodySection.Head },
{ HumanBodyBones.Hips, BodySection.Hips },
{ HumanBodyBones.Spine, BodySection.Back },
{ HumanBodyBones.Chest, BodySection.Back },
{ HumanBodyBones.UpperChest, BodySection.Back },
{ HumanBodyBones.RightShoulder, BodySection.RightArm },
{ HumanBodyBones.RightUpperArm, BodySection.RightArm },
{ HumanBodyBones.RightLowerArm, BodySection.RightArm },
{ HumanBodyBones.RightHand, BodySection.RightArm },
{ HumanBodyBones.LeftShoulder, BodySection.LeftArm },
{ HumanBodyBones.LeftUpperArm, BodySection.LeftArm },
{ HumanBodyBones.LeftLowerArm, BodySection.LeftArm },
{ HumanBodyBones.LeftHand, BodySection.LeftArm },
{ HumanBodyBones.LeftUpperLeg, BodySection.LeftLeg },
{ HumanBodyBones.LeftLowerLeg, BodySection.LeftLeg },
{ HumanBodyBones.LeftFoot, BodySection.LeftFoot },
{ HumanBodyBones.LeftToes, BodySection.LeftFoot },
{ HumanBodyBones.RightUpperLeg, BodySection.RightLeg },
{ HumanBodyBones.RightLowerLeg, BodySection.RightLeg },
{ HumanBodyBones.RightFoot, BodySection.RightFoot },
{ HumanBodyBones.RightToes, BodySection.RightFoot },
{ HumanBodyBones.LeftThumbProximal, BodySection.LeftHand },
{ HumanBodyBones.LeftThumbIntermediate, BodySection.LeftHand },
{ HumanBodyBones.LeftThumbDistal, BodySection.LeftHand },
{ HumanBodyBones.LeftIndexProximal, BodySection.LeftHand },
{ HumanBodyBones.LeftIndexIntermediate, BodySection.LeftHand },
{ HumanBodyBones.LeftIndexDistal, BodySection.LeftHand },
{ HumanBodyBones.LeftMiddleProximal, BodySection.LeftHand },
{ HumanBodyBones.LeftMiddleIntermediate, BodySection.LeftHand },
{ HumanBodyBones.LeftMiddleDistal, BodySection.LeftHand },
{ HumanBodyBones.LeftRingProximal, BodySection.LeftHand },
{ HumanBodyBones.LeftRingIntermediate, BodySection.LeftHand },
{ HumanBodyBones.LeftRingDistal, BodySection.LeftHand },
{ HumanBodyBones.LeftLittleProximal, BodySection.LeftHand },
{ HumanBodyBones.LeftLittleIntermediate, BodySection.LeftHand },
{ HumanBodyBones.LeftLittleDistal, BodySection.LeftHand },
{ HumanBodyBones.RightThumbProximal, BodySection.RightHand },
{ HumanBodyBones.RightThumbIntermediate, BodySection.RightHand },
{ HumanBodyBones.RightThumbDistal, BodySection.RightHand },
{ HumanBodyBones.RightIndexProximal, BodySection.RightHand },
{ HumanBodyBones.RightIndexIntermediate, BodySection.RightHand },
{ HumanBodyBones.RightIndexDistal, BodySection.RightHand },
{ HumanBodyBones.RightMiddleProximal, BodySection.RightHand },
{ HumanBodyBones.RightMiddleIntermediate, BodySection.RightHand },
{ HumanBodyBones.RightMiddleDistal, BodySection.RightHand },
{ HumanBodyBones.RightRingProximal, BodySection.RightHand },
{ HumanBodyBones.RightRingIntermediate, BodySection.RightHand },
{ HumanBodyBones.RightRingDistal, BodySection.RightHand },
{ HumanBodyBones.RightLittleProximal, BodySection.RightHand },
{ HumanBodyBones.RightLittleIntermediate, BodySection.RightHand },
{ HumanBodyBones.RightLittleDistal, BodySection.RightHand },
};
///
/// Paired OVRSkeleton bones with human body bones.
///
public static readonly Dictionary BoneIdToHumanBodyBone =
new Dictionary()
{
{ OVRSkeleton.BoneId.Body_Hips, HumanBodyBones.Hips },
{ OVRSkeleton.BoneId.Body_SpineLower, HumanBodyBones.Spine },
{ OVRSkeleton.BoneId.Body_SpineUpper, HumanBodyBones.Chest },
{ OVRSkeleton.BoneId.Body_Chest, HumanBodyBones.UpperChest },
{ OVRSkeleton.BoneId.Body_Neck, HumanBodyBones.Neck },
{ OVRSkeleton.BoneId.Body_Head, HumanBodyBones.Head },
{ OVRSkeleton.BoneId.Body_LeftShoulder, HumanBodyBones.LeftShoulder },
{ OVRSkeleton.BoneId.Body_LeftArmUpper, HumanBodyBones.LeftUpperArm },
{ OVRSkeleton.BoneId.Body_LeftArmLower, HumanBodyBones.LeftLowerArm },
{ OVRSkeleton.BoneId.Body_LeftHandWrist, HumanBodyBones.LeftHand },
{ OVRSkeleton.BoneId.Body_RightShoulder, HumanBodyBones.RightShoulder },
{ OVRSkeleton.BoneId.Body_RightArmUpper, HumanBodyBones.RightUpperArm },
{ OVRSkeleton.BoneId.Body_RightArmLower, HumanBodyBones.RightLowerArm },
{ OVRSkeleton.BoneId.Body_RightHandWrist, HumanBodyBones.RightHand },
{ OVRSkeleton.BoneId.Body_LeftHandThumbMetacarpal, HumanBodyBones.LeftThumbProximal },
{ OVRSkeleton.BoneId.Body_LeftHandThumbProximal, HumanBodyBones.LeftThumbIntermediate },
{ OVRSkeleton.BoneId.Body_LeftHandThumbDistal, HumanBodyBones.LeftThumbDistal },
{ OVRSkeleton.BoneId.Body_LeftHandIndexProximal, HumanBodyBones.LeftIndexProximal },
{ OVRSkeleton.BoneId.Body_LeftHandIndexIntermediate, HumanBodyBones.LeftIndexIntermediate },
{ OVRSkeleton.BoneId.Body_LeftHandIndexDistal, HumanBodyBones.LeftIndexDistal },
{ OVRSkeleton.BoneId.Body_LeftHandMiddleProximal, HumanBodyBones.LeftMiddleProximal },
{ OVRSkeleton.BoneId.Body_LeftHandMiddleIntermediate, HumanBodyBones.LeftMiddleIntermediate },
{ OVRSkeleton.BoneId.Body_LeftHandMiddleDistal, HumanBodyBones.LeftMiddleDistal },
{ OVRSkeleton.BoneId.Body_LeftHandRingProximal, HumanBodyBones.LeftRingProximal },
{ OVRSkeleton.BoneId.Body_LeftHandRingIntermediate, HumanBodyBones.LeftRingIntermediate },
{ OVRSkeleton.BoneId.Body_LeftHandRingDistal, HumanBodyBones.LeftRingDistal },
{ OVRSkeleton.BoneId.Body_LeftHandLittleProximal, HumanBodyBones.LeftLittleProximal },
{ OVRSkeleton.BoneId.Body_LeftHandLittleIntermediate, HumanBodyBones.LeftLittleIntermediate },
{ OVRSkeleton.BoneId.Body_LeftHandLittleDistal, HumanBodyBones.LeftLittleDistal },
{ OVRSkeleton.BoneId.Body_RightHandThumbMetacarpal, HumanBodyBones.RightThumbProximal },
{ OVRSkeleton.BoneId.Body_RightHandThumbProximal, HumanBodyBones.RightThumbIntermediate },
{ OVRSkeleton.BoneId.Body_RightHandThumbDistal, HumanBodyBones.RightThumbDistal },
{ OVRSkeleton.BoneId.Body_RightHandIndexProximal, HumanBodyBones.RightIndexProximal },
{ OVRSkeleton.BoneId.Body_RightHandIndexIntermediate, HumanBodyBones.RightIndexIntermediate },
{ OVRSkeleton.BoneId.Body_RightHandIndexDistal, HumanBodyBones.RightIndexDistal },
{ OVRSkeleton.BoneId.Body_RightHandMiddleProximal, HumanBodyBones.RightMiddleProximal },
{ OVRSkeleton.BoneId.Body_RightHandMiddleIntermediate, HumanBodyBones.RightMiddleIntermediate },
{ OVRSkeleton.BoneId.Body_RightHandMiddleDistal, HumanBodyBones.RightMiddleDistal },
{ OVRSkeleton.BoneId.Body_RightHandRingProximal, HumanBodyBones.RightRingProximal },
{ OVRSkeleton.BoneId.Body_RightHandRingIntermediate, HumanBodyBones.RightRingIntermediate },
{ OVRSkeleton.BoneId.Body_RightHandRingDistal, HumanBodyBones.RightRingDistal },
{ OVRSkeleton.BoneId.Body_RightHandLittleProximal, HumanBodyBones.RightLittleProximal },
{ OVRSkeleton.BoneId.Body_RightHandLittleIntermediate, HumanBodyBones.RightLittleIntermediate },
{ OVRSkeleton.BoneId.Body_RightHandLittleDistal, HumanBodyBones.RightLittleDistal },
};
///
/// For each humanoid bone, create a pair that determines the
/// pair of bones that create the joint pair. Used to
/// create the "axis" of the bone.
///
public static readonly Dictionary>
BoneIdToJointPair = new Dictionary>()
{
{
OVRSkeleton.BoneId.Body_Neck,
new Tuple(OVRSkeleton.BoneId.Body_Neck,
OVRSkeleton.BoneId.Body_Head)
},
{
OVRSkeleton.BoneId.Body_Head,
new Tuple(OVRSkeleton.BoneId.Body_Head,
OVRSkeleton.BoneId.Invalid)
},
{
OVRSkeleton.BoneId.Body_Root,
new Tuple(OVRSkeleton.BoneId.Body_Root,
OVRSkeleton.BoneId.Body_Hips)
},
{
OVRSkeleton.BoneId.Body_Hips,
new Tuple(OVRSkeleton.BoneId.Body_Hips,
OVRSkeleton.BoneId.Body_SpineLower)
},
{
OVRSkeleton.BoneId.Body_SpineLower,
new Tuple(OVRSkeleton.BoneId.Body_SpineLower,
OVRSkeleton.BoneId.Body_SpineMiddle)
},
{
OVRSkeleton.BoneId.Body_SpineMiddle,
new Tuple(OVRSkeleton.BoneId.Body_SpineMiddle,
OVRSkeleton.BoneId.Body_SpineUpper)
},
{
OVRSkeleton.BoneId.Body_SpineUpper,
new Tuple(OVRSkeleton.BoneId.Body_SpineUpper,
OVRSkeleton.BoneId.Body_Chest)
},
{
OVRSkeleton.BoneId.Body_Chest,
new Tuple(OVRSkeleton.BoneId.Body_Chest,
OVRSkeleton.BoneId.Body_Neck)
},
{
OVRSkeleton.BoneId.Body_LeftShoulder,
new Tuple(OVRSkeleton.BoneId.Body_LeftShoulder,
OVRSkeleton.BoneId.Body_LeftArmUpper)
},
{
OVRSkeleton.BoneId.Body_LeftScapula,
new Tuple(OVRSkeleton.BoneId.Body_LeftScapula,
OVRSkeleton.BoneId.Body_LeftArmUpper)
},
{
OVRSkeleton.BoneId.Body_LeftArmUpper,
new Tuple(OVRSkeleton.BoneId.Body_LeftArmUpper,
OVRSkeleton.BoneId.Body_LeftArmLower)
},
{
OVRSkeleton.BoneId.Body_LeftArmLower,
new Tuple(OVRSkeleton.BoneId.Body_LeftArmLower,
OVRSkeleton.BoneId.Body_LeftHandWrist)
},
{
OVRSkeleton.BoneId.Body_LeftHandWrist,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandWrist,
OVRSkeleton.BoneId.Body_LeftHandMiddleMetacarpal)
},
{
OVRSkeleton.BoneId.Body_LeftHandPalm,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandPalm,
OVRSkeleton.BoneId.Body_LeftHandMiddleMetacarpal)
},
{
OVRSkeleton.BoneId.Body_LeftHandWristTwist,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandWristTwist,
OVRSkeleton.BoneId.Body_LeftHandMiddleMetacarpal)
},
{
OVRSkeleton.BoneId.Body_LeftHandThumbMetacarpal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandThumbMetacarpal,
OVRSkeleton.BoneId.Body_LeftHandThumbProximal)
},
{
OVRSkeleton.BoneId.Body_LeftHandThumbProximal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandThumbProximal,
OVRSkeleton.BoneId.Body_LeftHandThumbDistal)
},
{
OVRSkeleton.BoneId.Body_LeftHandThumbDistal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandThumbDistal,
OVRSkeleton.BoneId.Body_LeftHandThumbTip)
},
{
OVRSkeleton.BoneId.Body_LeftHandThumbTip,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandThumbDistal,
OVRSkeleton.BoneId.Body_LeftHandThumbTip)
},
{
OVRSkeleton.BoneId.Body_LeftHandIndexMetacarpal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandIndexMetacarpal,
OVRSkeleton.BoneId.Body_LeftHandIndexProximal)
},
{
OVRSkeleton.BoneId.Body_LeftHandIndexProximal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandIndexProximal,
OVRSkeleton.BoneId.Body_LeftHandIndexIntermediate)
},
{
OVRSkeleton.BoneId.Body_LeftHandIndexIntermediate,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandIndexIntermediate,
OVRSkeleton.BoneId.Body_LeftHandIndexDistal)
},
{
OVRSkeleton.BoneId.Body_LeftHandIndexDistal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandIndexDistal,
OVRSkeleton.BoneId.Body_LeftHandIndexTip)
},
{
OVRSkeleton.BoneId.Body_LeftHandIndexTip,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandIndexDistal,
OVRSkeleton.BoneId.Body_LeftHandIndexTip)
},
{
OVRSkeleton.BoneId.Body_LeftHandMiddleMetacarpal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandMiddleMetacarpal,
OVRSkeleton.BoneId.Body_LeftHandMiddleProximal)
},
{
OVRSkeleton.BoneId.Body_LeftHandMiddleProximal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandMiddleProximal,
OVRSkeleton.BoneId.Body_LeftHandMiddleIntermediate)
},
{
OVRSkeleton.BoneId.Body_LeftHandMiddleIntermediate,
new Tuple(
OVRSkeleton.BoneId.Body_LeftHandMiddleIntermediate,
OVRSkeleton.BoneId.Body_LeftHandMiddleDistal)
},
{
OVRSkeleton.BoneId.Body_LeftHandMiddleDistal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandMiddleDistal,
OVRSkeleton.BoneId.Body_LeftHandMiddleTip)
},
{
OVRSkeleton.BoneId.Body_LeftHandMiddleTip,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandMiddleDistal,
OVRSkeleton.BoneId.Body_LeftHandMiddleTip)
},
{
OVRSkeleton.BoneId.Body_LeftHandRingMetacarpal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandRingMetacarpal,
OVRSkeleton.BoneId.Body_LeftHandRingProximal)
},
{
OVRSkeleton.BoneId.Body_LeftHandRingProximal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandRingProximal,
OVRSkeleton.BoneId.Body_LeftHandRingIntermediate)
},
{
OVRSkeleton.BoneId.Body_LeftHandRingIntermediate,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandRingIntermediate,
OVRSkeleton.BoneId.Body_LeftHandRingDistal)
},
{
OVRSkeleton.BoneId.Body_LeftHandRingDistal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandRingDistal,
OVRSkeleton.BoneId.Body_LeftHandRingTip)
},
{
OVRSkeleton.BoneId.Body_LeftHandRingTip,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandRingDistal,
OVRSkeleton.BoneId.Body_LeftHandRingTip)
},
{
OVRSkeleton.BoneId.Body_LeftHandLittleMetacarpal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandLittleMetacarpal,
OVRSkeleton.BoneId.Body_LeftHandLittleProximal)
},
{
OVRSkeleton.BoneId.Body_LeftHandLittleProximal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandLittleProximal,
OVRSkeleton.BoneId.Body_LeftHandLittleIntermediate)
},
{
OVRSkeleton.BoneId.Body_LeftHandLittleIntermediate,
new Tuple(
OVRSkeleton.BoneId.Body_LeftHandLittleIntermediate,
OVRSkeleton.BoneId.Body_LeftHandLittleDistal)
},
{
OVRSkeleton.BoneId.Body_LeftHandLittleDistal,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandLittleDistal,
OVRSkeleton.BoneId.Body_LeftHandLittleTip)
},
{
OVRSkeleton.BoneId.Body_LeftHandLittleTip,
new Tuple(OVRSkeleton.BoneId.Body_LeftHandLittleDistal,
OVRSkeleton.BoneId.Body_LeftHandRingTip)
},
{
OVRSkeleton.BoneId.Body_RightShoulder,
new Tuple(OVRSkeleton.BoneId.Body_RightShoulder,
OVRSkeleton.BoneId.Body_RightArmUpper)
},
{
OVRSkeleton.BoneId.Body_RightScapula,
new Tuple(OVRSkeleton.BoneId.Body_RightScapula,
OVRSkeleton.BoneId.Body_RightArmUpper)
},
{
OVRSkeleton.BoneId.Body_RightArmUpper,
new Tuple(OVRSkeleton.BoneId.Body_RightArmUpper,
OVRSkeleton.BoneId.Body_RightArmLower)
},
{
OVRSkeleton.BoneId.Body_RightArmLower,
new Tuple(OVRSkeleton.BoneId.Body_RightArmLower,
OVRSkeleton.BoneId.Body_RightHandWrist)
},
{
OVRSkeleton.BoneId.Body_RightHandWrist,
new Tuple(OVRSkeleton.BoneId.Body_RightHandWrist,
OVRSkeleton.BoneId.Body_RightHandMiddleMetacarpal)
},
{
OVRSkeleton.BoneId.Body_RightHandPalm,
new Tuple(OVRSkeleton.BoneId.Body_RightHandPalm,
OVRSkeleton.BoneId.Body_RightHandMiddleMetacarpal)
},
{
OVRSkeleton.BoneId.Body_RightHandWristTwist,
new Tuple(OVRSkeleton.BoneId.Body_RightHandWristTwist,
OVRSkeleton.BoneId.Body_RightHandMiddleMetacarpal)
},
{
OVRSkeleton.BoneId.Body_RightHandThumbMetacarpal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandThumbMetacarpal,
OVRSkeleton.BoneId.Body_RightHandThumbProximal)
},
{
OVRSkeleton.BoneId.Body_RightHandThumbProximal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandThumbProximal,
OVRSkeleton.BoneId.Body_RightHandThumbDistal)
},
{
OVRSkeleton.BoneId.Body_RightHandThumbDistal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandThumbDistal,
OVRSkeleton.BoneId.Body_RightHandThumbTip)
},
{
OVRSkeleton.BoneId.Body_RightHandThumbTip,
new Tuple(OVRSkeleton.BoneId.Body_RightHandThumbDistal,
OVRSkeleton.BoneId.Body_RightHandThumbTip)
},
{
OVRSkeleton.BoneId.Body_RightHandIndexMetacarpal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandIndexMetacarpal,
OVRSkeleton.BoneId.Body_RightHandIndexProximal)
},
{
OVRSkeleton.BoneId.Body_RightHandIndexProximal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandIndexProximal,
OVRSkeleton.BoneId.Body_RightHandIndexIntermediate)
},
{
OVRSkeleton.BoneId.Body_RightHandIndexIntermediate,
new Tuple(
OVRSkeleton.BoneId.Body_RightHandIndexIntermediate,
OVRSkeleton.BoneId.Body_RightHandIndexDistal)
},
{
OVRSkeleton.BoneId.Body_RightHandIndexDistal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandIndexDistal,
OVRSkeleton.BoneId.Body_RightHandIndexTip)
},
{
OVRSkeleton.BoneId.Body_RightHandIndexTip,
new Tuple(OVRSkeleton.BoneId.Body_RightHandIndexDistal,
OVRSkeleton.BoneId.Body_RightHandIndexTip)
},
{
OVRSkeleton.BoneId.Body_RightHandMiddleMetacarpal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandMiddleMetacarpal,
OVRSkeleton.BoneId.Body_RightHandMiddleProximal)
},
{
OVRSkeleton.BoneId.Body_RightHandMiddleProximal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandMiddleProximal,
OVRSkeleton.BoneId.Body_RightHandMiddleIntermediate)
},
{
OVRSkeleton.BoneId.Body_RightHandMiddleIntermediate,
new Tuple(
OVRSkeleton.BoneId.Body_RightHandMiddleIntermediate,
OVRSkeleton.BoneId.Body_RightHandMiddleDistal)
},
{
OVRSkeleton.BoneId.Body_RightHandMiddleDistal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandMiddleDistal,
OVRSkeleton.BoneId.Body_RightHandMiddleTip)
},
{
OVRSkeleton.BoneId.Body_RightHandMiddleTip,
new Tuple(OVRSkeleton.BoneId.Body_RightHandMiddleDistal,
OVRSkeleton.BoneId.Body_RightHandMiddleTip)
},
{
OVRSkeleton.BoneId.Body_RightHandRingMetacarpal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandRingMetacarpal,
OVRSkeleton.BoneId.Body_RightHandRingProximal)
},
{
OVRSkeleton.BoneId.Body_RightHandRingProximal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandRingProximal,
OVRSkeleton.BoneId.Body_RightHandRingIntermediate)
},
{
OVRSkeleton.BoneId.Body_RightHandRingIntermediate,
new Tuple(OVRSkeleton.BoneId.Body_RightHandRingIntermediate,
OVRSkeleton.BoneId.Body_RightHandRingDistal)
},
{
OVRSkeleton.BoneId.Body_RightHandRingDistal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandRingDistal,
OVRSkeleton.BoneId.Body_RightHandRingTip)
},
{
OVRSkeleton.BoneId.Body_RightHandRingTip,
new Tuple(OVRSkeleton.BoneId.Body_RightHandRingDistal,
OVRSkeleton.BoneId.Body_RightHandRingTip)
},
{
OVRSkeleton.BoneId.Body_RightHandLittleMetacarpal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandLittleMetacarpal,
OVRSkeleton.BoneId.Body_RightHandLittleProximal)
},
{
OVRSkeleton.BoneId.Body_RightHandLittleProximal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandLittleProximal,
OVRSkeleton.BoneId.Body_RightHandLittleIntermediate)
},
{
OVRSkeleton.BoneId.Body_RightHandLittleIntermediate,
new Tuple(
OVRSkeleton.BoneId.Body_RightHandLittleIntermediate,
OVRSkeleton.BoneId.Body_RightHandLittleDistal)
},
{
OVRSkeleton.BoneId.Body_RightHandLittleDistal,
new Tuple(OVRSkeleton.BoneId.Body_RightHandLittleDistal,
OVRSkeleton.BoneId.Body_RightHandLittleTip)
},
{
OVRSkeleton.BoneId.Body_RightHandLittleTip,
new Tuple(OVRSkeleton.BoneId.Body_RightHandLittleDistal,
OVRSkeleton.BoneId.Body_RightHandRingTip)
},
};
}
}