/* * 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) }, }; } }