Unigine::LeapMotion::Hand Struct
Header: | #include <LeapMotionInterface.h> |
Hands are the main entity tracked by the Leap Motion controller. The controller maintains an inner model of the human hand and validates the data from its sensors against this model. This allows the controller to track finger positions even when a finger is not completely visible.
This structure represents a physical hand detected by the Leap and provides access to its attributes describing the hand position, orientation, and movement.
The structure has the following set of properties:
ID | ID of the hand. |
type | Hand type: 0 - for the left, 0 - for the right one. |
witdh | Width of the palm when the hand is in a flat position, in meters. |
is_valid | Indicates whether the hand contains valid tracking data (1). |
palm_position | Coordinates of the position of the palm. |
stabilized_palm_position | Coordinates of the modified palm position with some additional smoothing and stabilization applied. |
wrist_position | Coordinates of the position of the wrist. |
palm_velocity | Instantaneous velocity of the finger tip, in m/s. |
center | Coordinates of the center of the bone. |
direction | Normalized direction from the palm position toward the fingers. |
basis | Orthonormal basis vectors for this Bone as a Matrix. Basis vectors specify the orientation of the bone:
The bases provided for the right hand use the right-hand rule; those for the left hand use the left-hand rule. Thus, the positive direction of the x-basis is to the right for the right hand and to the left for the left hand. You can change from right-hand to left-hand rule by multiplying the z basis vector by -1. You can use the basis vectors for such purposes as measuring complex finger poses and skeletal animation. Converting the basis vectors directly into a quaternion representation is not mathematically valid. If you use quaternions, create them from the derived rotation matrix not directly from the bases. |
arm | Arm of the hand. |
fingers | List of all fingers of the hand. |
struct Hand
{
int id;
int type;
int is_valid;
float palm_width;
Unigine::Math::vec3 palm_position;
Unigine::Math::vec3 palm_stabilized_position;
Unigine::Math::vec3 wrist_position;
Unigine::Math::vec3 palm_velocity;
Unigine::Math::vec3 palm_normal;
Unigine::Math::vec3 direction;
Unigine::Math::mat4 basis;
Arm arm;
Unigine::Map<int, Finger> fingers;
};