This page has been translated automatically.
Interface Overview
Assets Workflow
Settings and Preferences
Adjusting Node Parameters
Setting Up Materials
Setting Up Properties
Landscape Tool
Using Editor Tools for Specific Tasks
Setting Up Development Environment
Usage Examples
UUSL (Unified UNIGINE Shader Language)
File Formats
Rebuilding the Engine and Tools
Double Precision Coordinates
Common Functionality
Controls-Related Classes
Engine-Related Classes
Filesystem Functionality
GUI-Related Classes
Math Functionality
Node-Related Classes
Objects-Related Classes
Networking Functionality
Pathfinding-Related Classes
Physics-Related Classes
Plugins-Related Classes
CIGI Client Plugin
Rendering-Related Classes
Warning! This version of documentation is OUTDATED, as it describes an older SDK version! Please switch to the documentation for the latest SDK version.
Warning! This version of documentation describes an old SDK version which is no longer supported! Please upgrade to the latest SDK version.

Unigine::LeapMotion::Hand Struct

Header: #include <LeapMotionInterface.h>
LeapMotion plugin must be loaded.

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.

It is possible for movement or changes in position to be lost when a finger is behind or directly in front of the hand (from the point of view of the controller).
The Leap Motion software matches the internal model against the existing data. In some cases, the software can make an incorrect match – for example, identifying a right hand as a left hand.

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.
palm_normal Coordinates of the normal vector to the palm. If a hand is flat, this vector will point downward, or “out” of the front surface of your palm.
direction Normalized direction from the palm position toward the fingers.

The orientation of the hand as a basis matrix.

The basis is defined as follows:

  • X - Positive in the direction of the pinky.
  • Y - Positive above the hand.
  • Z - Positive in the direction of the wrist.
Since the left hand is a mirror of the right hand, the basis matrix will be left-handed for left hands. You can change from right-hand to left-hand rule by multiplying the z basis vector by -1.
arm Arm of the hand.
fingers List of all fingers of the hand.
All coordinates are relative to the origin of the Leap Motion coordinate system.
The Hand structure is declared as follows:
Source code (C++)
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;
Last update: 2019-08-16
Build: ()