Mercurial > hg > Game > Games
diff Orchestland/Assets/LeapMotion/Scripts/Hands/RiggedFinger.cs @ 1:f7675884f2a1
Add Orchestland project
author | Daiki OYAKAWA <e135764@ie.u-ryukyu.ac.jp> |
---|---|
date | Fri, 17 Jul 2015 23:09:20 +0900 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Orchestland/Assets/LeapMotion/Scripts/Hands/RiggedFinger.cs Fri Jul 17 23:09:20 2015 +0900 @@ -0,0 +1,42 @@ +/******************************************************************************\ +* Copyright (C) Leap Motion, Inc. 2011-2014. * +* Leap Motion proprietary. Licensed under Apache 2.0 * +* Available at http://www.apache.org/licenses/LICENSE-2.0.html * +\******************************************************************************/ + +using UnityEngine; +using System.Collections; +using Leap; + +/** + * Manages the orientation of the bones in a model rigged for skeletal animation. + * + * The class expects that the graphics model bones corresponding to bones in the Leap Motion + * hand model are in the same order in the bones array. + */ +public class RiggedFinger : FingerModel { + + /** Allows the mesh to be stretched to align with finger joint positions + * Only set to true when mesh is not visible + */ + public bool deformPosition = false; + + public Vector3 modelFingerPointing = Vector3.forward; + public Vector3 modelPalmFacing = -Vector3.up; + + public Quaternion Reorientation() { + return Quaternion.Inverse(Quaternion.LookRotation(modelFingerPointing, -modelPalmFacing)); + } + + /** Updates the bone rotations. */ + public override void UpdateFinger() { + for (int i = 0; i < bones.Length; ++i) { + if (bones[i] != null) { + bones[i].rotation = GetBoneRotation(i) * Reorientation(); + if (deformPosition) { + bones[i].position = GetBoneCenter(i); + } + } + } + } +}