Nreal Light开发-lesson 8 手势跟踪官方文档翻译

ps.先前已经用过手势跟踪了,这里将官方文档进行翻译,从而更好的理解手势跟踪

介绍

NRSDK的手部跟踪功能可以跟踪手部关键点的位置,并实时识别手部姿势。手部姿势显示在第一人称视图中,用于与在世界中的虚拟对象进行沉浸的交互。

能力

  • NRSDK可以通过世界坐标系追踪手,并注释23个关键点的位置和方向
  • NRSDK目前支持任意一只手的六个手势;(ps.目前好像是7个)
  • 在跟踪手部姿势的同时,NRSDK也返回到是否有手部被跟踪的状态
  • NRSDK提供左手/右手检测功能
  • 当使用手作为输入时,手的姿势会驱动激光光标指针,其行为与标准控制器光标类似

手势

一般手势

选择手势

  • 只要食指和拇指捏在一起(不管其他手指的姿势如何),就被认为是捏的姿势。
  • 以上手势都将被识别为捏/选择。

系统手势

  • 保持这个手势1.2秒,即可调出主菜单。
  • 左手和右手都会被识别。

手指指挥棒

与控制器类似,NRSDK为每只手提供一个指针,以便与目标进行交互。可以从每只手的HandState获得指针姿势以及指针姿势是否正在被跟踪。

指针姿势必须满足以下条件才能正确跟踪:

  • 手被认出了
  • 手掌方向指向前方

基本指针样式包含在位于Assets>NRSDK>Prefabs>HandsNRHand_RNRHand_L预制件中。您还可以根据指针姿势和相关数据,结合NRPointerRaycaster中的一些数据,自定义指针的样式。

关节

NRSDK手部跟踪系统为每个识别的手部姿势(位置和方向)识别手部23个关键点的位置。

索引

关节方向

要求和限制

设备兼容性

Hand Tracking(手势跟踪)已在以下Android手机上进行了全面测试:

  • Nreal Dev-Kit
  • OnePlus:9R / 7T / 8T / 8 Pro 5G
  • LG:V60 / V50S ThinQ 5G / V50 ThinQ 5G / G9 (Velvet 5G) / Wing
  • SONY:Xperia 5 II / Xperia 1
  • SAMSUNG:Galaxy Note20 5G / Galaxy S10+ / Galaxy S20+ 5G / Galaxy Z Fold 2 5G / Galaxy S21 5G / Galaxy Note20 Ultra / Galaxy Note10+ 5G / Galaxy A90 5G
  • OPPO: Find X2 / Find x2 Pro / Find x3 Pro
  • ZTE Axon 10 pro
  • Black Shark 2 Pro

手部跟踪也可以在除上述设备之外的设备上运行,但稳定性无法保证。有关完整的兼容性列表,请参阅设备兼容性

背景和摄像头

  • Hand Tracking(手部跟踪) SDK使用on-board(板上的)摄像头来检测手,因此请确保从摄像头中可以看到手。
  • 避免复杂的背景,纯色背景优先;
  • 避免在相机框架中出现背光或弱光,或不平衡的照明条件;

手势

  • 避免双手手指堆叠或交错;
  • 避免不同的人的手;
  • 避免快速移动;
  • 关节的方向有可能被识别为转换的。如果出现这种情况,请将你的手从可见的区域移开,然后再次将它们移回。

开发者指南

手动跟踪的常见用法

简单的示例用例:

//如果输入来源成功转到手部跟踪,返回“true”
  bool switchToHandTracking = NRInput.SetInputSource(InputSourceEnum.Hands);

  //如果输入来源成功转到控制器,返回“true” 
  bool switchToController = NRInput.SetInputSource(InputSourceEnum.Controller);

  //如果手部跟踪正在运行,返回“true”
  bool isRunning =  NRInput.Hands.IsRunning;

  //返回右手的NRHand
  NRHand hand =  NRInput.Hands.GetHand(HandEnum.RightHand);

  //如果用户现在正在执行系统手势,则返回true
  bool isPerformingSystemGesture = NRInput.Hands.IsPerformingSystemGesture();

HandState(手部状态)的详细信息:

  //返回右手的HandState
  HandState handState = NRInput.Hands.GetHandState(HandEnum.RightHand);

  //返回这只手是左手还是右手
  HandEnum handEnum = handState.handEnum;

  //如果该手被追踪,则返回true
  bool isTracked = handState.isTracked;

  //返回手射线指针的起点的Pose
  Pose pointerPose = handState.pointerPose;

  //如果手射线指针的姿势有效,则返回ture
  bool pointerValid = handState.pointerPoseValid;

  //如果这只手正在捏,则返回true
  bool isPinching = handState.isPinching;

  //returns the current pinch strength value of hand. The range is from 0 to 1
  float pinchStrength = handState.pinchStrength;

  //返回手的当前捏的力量的值。范围从0到1
  HandGesture handGesture = handState.currentGesture;

  //返回包含拇指指尖关节的位置和方向的Pose
  Pose thumbTipPose = handState.GetJointPose(HandJointID.ThumbTip);

启用手部跟踪

  1. 使用NRSDK在Unity中创建一个新项目。有关更多设置说明,请参阅Getting Started with NRSDK(NRSDK入门)。

  2. 从场景层次中删除“Main Camera”。

  3. Assets>NRSDK>Prefabs>NRCameraRig中查找NRCameraRigNRInput预置件。将它们拖动到场景层次。

  4. 在层次窗口中选择NRInput 游戏对象以打开Inspector窗口,然后选择Hands作为Input Source Type(输入源类型)

  5. Assets>NRSDK>Prefabs>Hands中查找NRHand_RNRHand_L。将它们相应地添加为NRInputLeft and Right anchor(左右锚点)的子游戏对象。


6. 现在您已经准备好进行手部跟踪,请参阅Tutorial: Manipulating an Object(教程:操纵对象)以添加更多与对象的交互。

样例包含在Unity package中。有关详细信息,请参阅Assets>NRSDK>Demos>HandTracking

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值