Unity3D总结记录(十七) Unity中leapMotionSDK翻

转自:https://blog.csdn.net/zmdsjtu/article/details/52668345

转自:https://blog.csdn.net/zmdsjtu/article/details/52669422

官方C++ SDK介绍地址:

https://developer.leapmotion.com/documentation/cpp/api/Leap.Hand.html#cppclass_leap_1_1_hand_1aa2c9cca797fde17bf7371451a297e608

 

本文是就着英文版官方说明给出了翻译以及自己的理解,Hand模块总共分为了两块,上文完成一半,下午把另一半发上来。

 

目录概览:

 

·        Hand()

·        arm() const

·        basis() const

·        confidence() const

·        direction() const

·        finger(int32_t id) const

·        fingers() const

·        frame() const

·        grabAngle() const

·        grabStrength() const

·        id() const

·        invalid()

·        isLeft() const

·        isRight() const

·        isValid() const

·        operator!=(const Hand &) const

·        operator==(const Hand &) const

·        palmNormal() const

·        palmPosition() const

·        palmVelocity() const

·        palmWidth() const

 

 

详细解释:

class Leap::Hand

 

获取一个手的对象:

 

Leap::HandList hands = frame.hands();

Leap::Hand firstHand =hands[0];

备注:hand()出来的可能是无效对象,当检测不出手的时候会拟合出一个,故而可以用用手isvalid()功能来判定是否是有效的。

Since

1.0

 

Hand()

创造一个Hand object.//Frame对象里获取有效Hand对象

Leap::HandleftmostHand = frame.hands().leftmost();

Since

1.0

 

 

Arm arm() const

 

返回定义的Arm类型的参数,如果看不到胳膊就根据人体解剖学估计出一个(估计是吹逼的,效果并没有那么好,233,实测性能并不好,但勉强可以用)

 

Leap::Handhand = frame.hands().frontmost();

Leap::Armarm = hand.arm();

Since

2.0.3

 

 

Matrix basis() const

 

以矩阵的形式返回hand的方向信息//左右手呈镜面关系

xAxis 小拇指的正方向

yAxis 手面向上的正方向

zAxis 手腕朝向的正方向

 

Leap::Matrixbasis = hand.basis();

Leap::VectorxBasis = basis.xBasis;

Leap::VectoryBasis = basis.yBasis;

Leap::VectorzBasis = basis.zBasis;

Since

2.0

 

 

float confidence() const

 

对一个手部姿态的确信程度(看来并不是无脑自信,哈哈哈)

 

float confidence= hand.confidence();

Since

2.0

 

 

Vector direction() const

 

返回手掌朝向的Vector,分为pitch,yaw和row。

 

float pitch = hand.direction().pitch();

float yaw = hand.direction().yaw();

float roll = hand.palmNormal().roll();

Since

1.0

 

Finger finger(int32_t id) const

 

从前一Frame里返回Finger类型的指定编号的手指对象,如果没有会返回一个invalidFinger对象

 

Leap::Finger fingerOnHandByID = hand.finger(fingerID);

Since

1.0

 

 

FingerList fingers() const

 

返回这个hand里所有的Finger对象并储存在FingerList里。

 

备注:用 PointableList::extended() 可以去除列表里non-extendedfinger对象

// hand is a Leap::Hand object

Leap::PointableListpointables= hand.pointables();// Both fingers and tools

Leap::FingerListfingers = hand.fingers();

Since

1.0

 

Frame frame() const

 

返回和Hand相关的Frame。如果不可获得就返回invalid类型的Frame对象

 

Leap::FrameframeForHand = hand.frame();

Since

1.0

 

 

float grabAngle() const

 

返回手掌抓握的紧张程度,数值在0-π之间,紧握为0,松开为π

//本质上其实就是算的四根手指的平均张开角度

 

Since

3.0

 

 

float grabStrength() const

 

落伍了落伍了!!废弃不用了。。。

 grabAngle() 替代。

Since

2.0

 

 

int32_t id() const

Hand对象绑定的ID,就算手消失了还是存在的

(然而它并没有Kinect那种消失再回来还能一定程度上匹配的功能,至少我测试的没有,甚至同一只手没超出范围还会跳变,摔墙!)

//下面代码用于发现未来一些frame里已知ID的手的甄别

Leap::HandknownHand = frame.hand(handID);

Since

1.0

 

 

bool isLeft() const

判断手是不是左手。。。

 

std::string handName = hand.isLeft()? "Left hand" : "Right hand";

Since

2.0

 

bool isRight() const

判断是不是右手

if(hand.isRight()){

    // .. Do righthanded stuff

}

Since

2.0

 

 

bool isValid() const

判断手对象里的数据是不是有效的鲁棒的。

if (hand.isValid()){

    //Process handdata...

}

Since

1.0

 

 

 

bool operator!=(const Hand &) const

比较两个Hand对象是不是同一Frame同一个手(估计是比较手的长短啊大小啊位置啊之类的)//黑人问号脸:我要这个何用???

thisHand != thatHand;

Since

1.0

 

 

bool operator==(const Hand &) const

和上面的类似

thisHand == thatHand;

Since

1.0

 

 

Vector palmNormal() const

指向手掌的Vector,搭配direction食用风味更佳

float pitch = hand.direction().pitch();

float yaw = hand.direction().yaw();

float roll = hand.palmNormal().roll();

Since

1.0

 

Vector palmPosition() const

返回手腕重心点在LeapMotion坐标系里毫米单位的坐标

Leap::VectorhandCenter = hand.palmPosition();

Since

1.0

 

Vector palmVelocity() const

返回手掌的移动速度,单位:millimeters/second.

Leap::VectorhandSpeed = hand.palmVelocity();

Since

1.0

 

float palmWidth() const

当手面平整时估计手掌的宽度。单位是毫米

float handWidth = hand.palmWidth();

Since

2.0

 



第一部分先到这里了,剩下的下午翻译完再发。


官方C++ SDK介绍地址:

https://developer.leapmotion.com/documentation/cpp/api/Leap.Hand.html#cppclass_leap_1_1_hand_1aa2c9cca797fde17bf7371451a297e608

 

本文是就着英文版官方说明给出了翻译以及自己的理解,Hand模块总共分为了两块,这里为下篇。

 

目录概览:

 

·        pinchDistance()const

·        pinchStrength()const

·        pointable(int32_tid) const

·        pointables()const

·        rotationAngle(constFrame &sinceFrame) const

·        rotationAngle(constFrame &sinceFrame, const Vector &axis) const

·        rotationAxis(constFrame &sinceFrame) const

·        rotationMatrix(constFrame &sinceFrame) const

·        rotationProbability(constFrame &sinceFrame) const

·        scaleFactor(constFrame &sinceFrame) const

·        scaleProbability(constFrame &sinceFrame) const

·        sphereCenter()const

·        sphereRadius()const

·        stabilizedPalmPosition()const

·        timeVisible()const

·        toString() const

·        translation(constFrame &sinceFrame) const

·        translationProbability(constFrame &sinceFrame) const

·        wristPosition()const

 

 

详细解释:

 

 

float pinchDistance() const

大拇指和食指的距离。单位:毫米。

Since

3.0

 

float pinchStrength() const

废弃!

 pinchDistance() 替代

Since

2.0

 

Pointable pointable(int32_t id) const

返回Hand对应IDPointable对象

Leap::PointableknownPointable = hand.pointable(pointableID);

Since

1.0

 

PointableList pointables() const

返回Potintable组成的一个列表(其实就是五根手指组成的).

// hand is a Leap::Hand object

Leap::PointableListpointables = hand.pointables();// Both fingers and tools

Leap::FingerListfingers = hand.fingers();

Since

1.0

 

float rotationAngle(const Frame & sinceFrame) const

返回和startFrame那一帧相比,手的相对旋转

float rotationOfHand = hand.rotationAngle(startFrame);

 

 

float rotationAngle(const Frame & sinceFrame,const Vector & axis) const

返回和sinceFrame那一帧相比,绕axis的相对旋转的角度

float rotationAroundYAxis = hand.rotationAngle(startFrame,Leap::Vector::yAxis());

 

Vector rotationAxis(const Frame & sinceFrame) const

返回当前和sinceFrame那一帧相比,启发式(heuristically)确定的绕着旋转的轴的Vector

Leap::VectoraxisOfHandRotation = hand.rotationAxis(startFrame);

 

Matrix rotationMatrix(const Frame & sinceFrame) const

返回和SinceFrame相比的变换矩阵,Matrix类型。

Leap::MatrixhandRotationTransform = hand.rotationMatrix(startFrame);

 

 

float rotationProbability(const Frame & sinceFrame) const

sinceFrame相比,当前帧为旋转移动成的可能性,返回一个0-1float

float rotationIntentFactor = hand.rotationProbability(startFrame);

 

 

 

float scaleFactor(const Frame & sinceFrame) const

返回当前和指定帧的缩放比例

float handScaleMotion = hand.scaleFactor(startFrame);

 

 

float scaleProbability(const Frame & sinceFrame) const

返回两帧之间是缩放运动的可能性,数值为0-1float

float scaleIntentFactor = hand.scaleProbability(startFrame);

 

Vector sphereCenter() const

返回手掌抓取球的模型中球的球心位置坐标。

Leap::VectorsphereCenter= hand.sphereCenter();

Since

1.0

 

 

float sphereRadius() const

返回上述模型中的球的半径(就是假装握着球,这球有多大,233),单位为毫米

float sphereDiameter = 2 * hand.sphereRadius();

Since

1.0

 

 

Vector stabilizedPalmPosition() const

经过平滑处理以及一系列其他处理之后的手掌的位置坐标,返回值为Vector

//可靠性和手运动的速度有关,如果速度过快可能会有滞后感

Leap::VectorfilteredHandPosition = hand.stabilizedPalmPosition();

Since

1.0

 

 

float timeVisible() const

返回这个hand被追踪的时间,单位是秒

float lifetimeOfThisHandObject = hand.timeVisible();

Since

1.0

 

 

std::string toString() const

hand的信息转化为方便阅读与显示的string类型。

Since

1.0

 

Vector translation(const Frame & sinceFrame) const

返回前后两帧平移运动位置变化的Vector

Leap::VectorlinearHandMovement = hand.translation(startFrame);

 

float translationProbability(const Frame & sinceFrame) const

返回前后两帧为平移运动的可能性质,大小为0-1float

float translationIntentFactor = hand.translationProbability(startFrame);

 

 

Vector wristPosition() const

返回腕部以毫米为单位的坐标的Vector

Since

2.0.3

 

 

补充两点:

 

Public Static Functions

const Hand & invalid()

返回invalidHand

if (hand !=Leap::Hand::invalid()){

    //Process handdata...

}

Since

1.0

Friends

friendstd::ostream & operator<<

输出方便阅读的Hand对象

std::cout << hand << std::endl;

Since

1.0



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值