新都网站开发网站备案时网站没有内容可以

当前位置: 首页 > news >正文

新都网站开发,网站备案时网站没有内容可以,四川做网站多少钱,通辽网站建设公司Hololens 2应用开发系列#xff08;3#xff09;——MRTK基础知识及配置文件配置#xff08;中#xff09; 一、前言二、输入系统2.1 MRTK输入系统介绍2.2 输入数据提供者#xff08;Input Data Providers#xff09;2.3 输入动作#xff08;Input Actions#xff09;2… Hololens 2应用开发系列3——MRTK基础知识及配置文件配置中 一、前言二、输入系统2.1 MRTK输入系统介绍2.2 输入数据提供者Input Data Providers2.3 输入动作Input Actions2.4 控制器Controllers2.5 指针Pointers2.6 手势笔势、Gestures2.7 手部关节追踪Articulated Hand Tracking2.8 语音命令2.9 其他 三、总结参考文献 一、前言 在前面的Hololens 2应用开发系列文章中我介绍了Hololens2开发环境配置及项目生成部署、使用MRTK在Unity中设置混合现实场景并进行程序模拟以及MRTK基础知识和总配置文件和相机配置使用的说明在上述最后一篇文章中我总体介绍了输入Input 配置的概要而在本篇文章中我将对输入Input 配置进行详细介绍。
二、输入系统 2.1 MRTK输入系统介绍 在了解MRTK输入系统前请先了解几个关键名词 输入数据提供者Input Data Providers本质上是数据提供者参考该文章2.4节MRTK服务介绍又被称为设备管理器从硬件HoloLens 2、鼠标、输入模拟程序等底层获取信息并向MRTK提供数据控制器Controllers注意此控制器不是实际的物理硬件而是一个软件是一个抽象的表达它将从 输入数据提供者Input Data Providers 获取的数据转换为MRTK所需的数据类型和事件指针Pointers该处的指针概念类似于电脑的鼠标电脑操作系统将鼠标信息在2D显示器平面上显示出的鼠标光标由控制器Controllers 可视化转换而来只不过在3D空间中指针也有所三维化通常它是一条射线由人手(或控制器此处指物理控制器)发出指向远处人手(控制器)所指向的方向指针包含近指针和远指针。准确来说近指针是对于附近物体的触摸和抓取等操作而远指针才一般以射线形式显示焦点Focus指针指到某个物体上则在该物体的表面与指针相交处产生了焦点光标Cursor指针射线末端为展示焦点所在位置同时提供指针交互的视觉表现会在射线末端呈现一个圆环类似于电脑中鼠标光标中所代表实际点击位置的最上方的角。 微软官方文档输入系统概述中为我们介绍了输入系统的如下组成其中设备管理器为我们提供的系统层面的数据因此又称为数据提供者而控制器Controller的配图与实际功能意义并非完全相符但整体的层级关系是基本正确的即数据提供者Input Data Providers→控制器Controllers→指针Pointers→焦点Focus→光标Cursor→交互Interactable。   从实现上来说微软官方对MRTK的事件流进行了描述其如下图所示。控制器将输入事件传递给指针指针将指针事件传递给了聚焦物或目标物聚焦物或目标物通过监听指针事件和输入事件执行相应命令。   而在具体实现上MRTK输入系统之间各部分的关系较为复杂为了更好地帮助大家理解各个组件之间的属性与关联在此我以思维导图的方式将各个组件为大家展示如下 #mermaid-svg-57uNOPV6XRMYv0X8 {font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-57uNOPV6XRMYv0X8 .error-icon{fill:#552222;}#mermaid-svg-57uNOPV6XRMYv0X8 .error-text{fill:#552222;stroke:#552222;}#mermaid-svg-57uNOPV6XRMYv0X8 .edge-thickness-normal{stroke-width:2px;}#mermaid-svg-57uNOPV6XRMYv0X8 .edge-thickness-thick{stroke-width:3.5px;}#mermaid-svg-57uNOPV6XRMYv0X8 .edge-pattern-solid{stroke-dasharray:0;}#mermaid-svg-57uNOPV6XRMYv0X8 .edge-pattern-dashed{stroke-dasharray:3;}#mermaid-svg-57uNOPV6XRMYv0X8 .edge-pattern-dotted{stroke-dasharray:2;}#mermaid-svg-57uNOPV6XRMYv0X8 .marker{fill:#333333;stroke:#333333;}#mermaid-svg-57uNOPV6XRMYv0X8 .marker.cross{stroke:#333333;}#mermaid-svg-57uNOPV6XRMYv0X8 svg{font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:16px;}#mermaid-svg-57uNOPV6XRMYv0X8 .label{font-family:“trebuchet ms”,verdana,arial,sans-serif;color:#333;}#mermaid-svg-57uNOPV6XRMYv0X8 .cluster-label text{fill:#333;}#mermaid-svg-57uNOPV6XRMYv0X8 .cluster-label span{color:#333;}#mermaid-svg-57uNOPV6XRMYv0X8 .label text,#mermaid-svg-57uNOPV6XRMYv0X8 span{fill:#333;color:#333;}#mermaid-svg-57uNOPV6XRMYv0X8 .node rect,#mermaid-svg-57uNOPV6XRMYv0X8 .node circle,#mermaid-svg-57uNOPV6XRMYv0X8 .node ellipse,#mermaid-svg-57uNOPV6XRMYv0X8 .node polygon,#mermaid-svg-57uNOPV6XRMYv0X8 .node path{fill:#ECECFF;stroke:#9370DB;stroke-width:1px;}#mermaid-svg-57uNOPV6XRMYv0X8 .node .label{text-align:center;}#mermaid-svg-57uNOPV6XRMYv0X8 .node.clickable{cursor:pointer;}#mermaid-svg-57uNOPV6XRMYv0X8 .arrowheadPath{fill:#333333;}#mermaid-svg-57uNOPV6XRMYv0X8 .edgePath .path{stroke:#333333;stroke-width:2.0px;}#mermaid-svg-57uNOPV6XRMYv0X8 .flowchart-link{stroke:#333333;fill:none;}#mermaid-svg-57uNOPV6XRMYv0X8 .edgeLabel{background-color:#e8e8e8;text-align:center;}#mermaid-svg-57uNOPV6XRMYv0X8 .edgeLabel rect{opacity:0.5;background-color:#e8e8e8;fill:#e8e8e8;}#mermaid-svg-57uNOPV6XRMYv0X8 .cluster rect{fill:#ffffde;stroke:#aaaa33;stroke-width:1px;}#mermaid-svg-57uNOPV6XRMYv0X8 .cluster text{fill:#333;}#mermaid-svg-57uNOPV6XRMYv0X8 .cluster span{color:#333;}#mermaid-svg-57uNOPV6XRMYv0X8 div.mermaidTooltip{position:absolute;text-align:center;max-width:200px;padding:2px;font-family:“trebuchet ms”,verdana,arial,sans-serif;font-size:12px;background:hsl(80, 100%, 96.2745098039%);border:1px solid #aaaa33;border-radius:2px;pointer-events:none;z-index:100;}#mermaid-svg-57uNOPV6XRMYv0X8 :root{–mermaid-font-family:“trebuchet ms”,verdana,arial,sans-serif;} 从底层硬件获取数据 图像 语音命令 处理语音输入 输入事件 录制音频片段 输入事件 输入事件 输入事件 输入事件 手势识别 输入系统Input System 数据提供者Input Data Providers 输入模拟服务 控制器Controllers Unity操纵杆 Unity 触控设备 Windows MR设备 Hand Joint Service 手部关节跟踪 … 语音Speech 关键字识别 更多指针Pointers… 听写Dictation 控制器1 指针1 控制器2 … 指针2 … 手势Gesture 焦点Focus 交互事件 光标Cursor 其中每个数据提供者可以生成一个或多个控制器如左手控制器、右手控制器同时一个控制器也可以根据不同的输入事件生成多种类型的指针如点击、抓取、指向但往往其在一个时刻对应一种指针每个指针都有其焦点和光标同时聚焦的物体也根据输入事件执行不同的交互事件。但是凡事也有例外对于语音输入和听写输入其无需控制器而是根据输入内容执行相应的处理服务从而转化成相应的输入事件如命令某个物体做出改变。PS: 不同于电脑中只能有一个鼠标系统中可以同时存在多个指针如左手和右手一起交互。   在理解了所有组件的基本概念之后接下来再看各项的具体设置便更为容易。 2.2 输入数据提供者Input Data Providers 微软官方对MRTK输入数据提供者的文档请参考输入提供者 - MRTK2。   MRTK的输入系统为支持多种类型的输入源对每种类型的输入设备或交互方式几乎都通过输入数据提供者Input Data Providers 来捕获和处理相应的输入事件。因此无论是内置的输入设备还是自定义的硬件平台MRTK都要求或者支持开发人员创建对应的数据提供者来整合这些输入源到统一的输入管理系统中确保应用能够无缝地响应来自各种交互方式的输入事件。   对于一个输入提供者它可创建多个控制器这些控制器统一由输入提供者进行生成、管理和销毁但听写和语音输入提供者不会创建任何控制器它们直接引发自己的专用输入事件。MRTK现有的一些输入数据提供者及其对应源输入设备如下 输入数据提供者源输入设备及相关说明Windows Mixed Reality Device Manager设备HoloLens等监测数据手、语音等创建的控制器WMR 关节手、WMR 控制器、WMR GGV凝视、手势和语音手Mouse Device Manager设备鼠标监测数据鼠标动作创建的控制器鼠标控制器OpenXR XRSDK Device Manager设备通用OpenXRVR、MR设备监测数据设备按钮、操纵杆等动作数据创建的控制器通用OpenXRVR、MR控制器Unity Joystick Manager设备操纵杆监测数据操纵杆动作数据创建的控制器Generic JoystickUnity Touch Device Manager设备触摸屏设备监测数据触碰数据创建的控制器Unity Touch ControllerWindows Speech Input设备支持语音输入的Windows设备监测数据语音命令数据创建的控制器无Windows Dictation Input设备支持语音输入的Windows设备监测数据听写数据创建的控制器无Hand Joint Service设备带有手部关节识别的设备监测数据图像数据创建的控制器Input Simulation Service设备Unity模拟功能监测数据图像数据创建的控制器Simulated Hand 在了解相关功能说明后您可选择对应所需的输入数据提供者并展开其菜单进行配置常规情况下您仅需选择并克隆对应设备下的配置文件即可一些输入提供者可能会有额外设置如输入模拟服务会要求您配置不同按键的动作。   如需创建自己的输入提供者请参考微软官方教程创建输入系统数据提供程序 — MRTK2该部分属于高阶教程您可先行自行了解。 2.3 输入动作Input Actions 输入动作是对原始物理输入的抽象所有的物理操作都需要转化成逻辑动作才能在程序中使用输入动作旨在帮助将应用程序逻辑与产生输入的特定输入源隔离开来。因此区分于上方为方便大家理解而绘制的思维导图输入动作Input Actions 并非直接位于输入数据提供者之前或之后而是位于整个输入处理流程的更高层级。   输入动作到底是什么在前面叙述的逻辑中我们仅了解了利用输入数据提供者对程序进行控制或使程序监测输入数据来知道你的关注目标这类似于在电脑桌面上的鼠标移动操作而输入动作类似于选中某个图标后物体获得焦点后为“打开程序”执行某种命令的鼠标双击操作和回车操作这两种操作作用是一样的被关注的目标无需知道具体输入源操作方式是什么而仅仅需要监听“打开程序”这个动作便可知道自己要做什么改变。   具体来讲如定义一个名为Select的操作并将其映射到鼠标左键、游戏手柄中的按钮和6DOF控制器中的触发器然后应用程序只需要监听Select输入动作事件便可执行选中这一命令。同时我们也可以设定输入规则将一个输入动作分解为多个输入动作如摇动一个摇杆可将该动作分解成向前、向后、向左、向右四个动作。   因此在输入动作Input Actions 中可以设置的是根据不同的输入类型设置具体的操作名称和设置输入动作规则对动作进行分解。该部分设置面板如下   其中在输入动作设置部分我们可以根据输入数据类型设置其不同的动作名称准确说是指定了操作名称后将其映射到某种输入类型因此在此我列出我们可以映射的输入数据类型。 数据类型描述Digital(开关值)开关输入等同于按键输入如手柄按键SingleAxis(单轴)单轴模输入如游戏手柄中的模拟触发器DualAxis(双轴)双轴模拟输入如摇杆SixDof(6自由度)平移和旋转3D姿势如6DOF控制器生成的3D姿势如6自由度的手持控制器Raw原始数据仅用于代理None无输入 除此之外还有一些数据类型我们可根据字面意义对其进行理解。   对于输入规则我们可以选择原始的输入动作在不同的方向上对其进行分解进而产生新的输入。   对于定义好的输入动作我们可在控制器部分将其映射到实体的控制器上进而完成输入事件关联详细可参考官方文档。 2.4 控制器Controllers 参考微软官方文档在控制器设置中我们需要将具体的实物控制器配置映射到其关联的MRTK控制器服务上。   如我们点击了Controller Definitions后在弹出的菜单上我们选择鼠标控制器Mouse Controller会出现鼠标控制器的选项界面   在对相应的数据类型选择输入动作后我们可以关注到下方小字即该设置所映射到的控制器服务。针对HoloLens 2开发和测试我们需要重点配置的控制器有GGV Hand Controller手部控制器、GGV Left Hand Controller左手控制器、GGV Right Hand Controller右手控制器和Mouse Controller鼠标控制器。其余控制器可根据需要进行配置。   在控制器的配置页面中下方还有不少配置选项主要是对控制器的可视化操作及可视化效果在图像中会渲染出一个与你的控制器一致的控制器模型通常我们并不需要但在软件开发时可据此进行调试检查控制器如手势的跟踪状态此处可自行配置。 2.5 指针Pointers 指针用于与游戏对象交互。指针的类别分为近指针、远指针和瞬移指针。 远指针该类型的指针用于与远离用户的对象进行交互。 这些类型的指针通常会投射出可以深入世界的线条使用户能够对不在他们身边的对象进行交互和操作。近指针该类型的指针用于与距离用户足够近的对象进行交互以便可以抓取、触摸和操作对象。 一般情况下这些类型的指针通过查找附近区域中的对象来与对象交互在短距离处进行光线投射、进行球体投射、查找附近的对象或枚举被视为可抓取/可触摸对象的对象列表。瞬移指针这些类型的指针插入到瞬移系统以处理将用户移到指针所指位置的操作。   在程序运行过程中当新的控制器被检测到时会自动创建对应的指针。由于单个控制器可以有多个指针例如关节手可以具有近距和远距交互指针因此有一个组件指针调解器负责调解哪个指针应处于活动状态。用户的手部接近某个可按按钮时ShellHandRayPointer应停止显示而PokePointer应该参与进来。通过更改指针配置文件中的PointerMediator属性可以提供指针调解器的替代实现。由于指针调解器每帧都会运行因此它最终会控制所有指针的活动/非活动状态。所以如果在代码中设置指针的 IsInteractionEnabled属性每帧的指针调解器会覆盖此属性值我们可以改为自行指定PointerBehavior来控制指针的打开和关闭。 具体配置方法可参阅微软官方文档如何禁用指针。   在MRTK指针配置面板上我们可以对指针进行配置同时对其可视化与否和可视化效果进行设定。由于微软官方指针文档已较为全面在此不再多余阐述。
2.6 手势笔势、Gestures 要注意区分手势Gestures与后面手部关节追踪Articulated Hand Tracking手势识别是建立在手部关节追踪基础之上的高级抽象层相比于手部关节追踪来说手势更加注重动作的意义和目的性开发者无需关心所有关节的详细动态只需监听和响应特定的预设手势即可。微软官方教程中将Gestures亦翻译为了笔势但不排除错误翻译的可能。手势是基于人手的输入事件。 MRTK 中有两种类型的设备会引发手势输入事件 Windows Mixed Reality设备例如HoloLens。 它描述捏合运动“隔空敲击”和点击并按住手势WindowsMixedRealityDeviceManager包装Unity XR.WSA.Input.GestureRecognizer以使用来自HoloLens设备的Unity手势事件触摸屏设备UnityTouchController 包装支持物理触摸屏的 Unity Touch 类 为了增强理解微软官方为我们制作了一个基本手势操作的视频通过本视频您可了解具体的手势操作同时对该部分的配置项有所了解。   HoloLens 2手势识别器会生成若干手势识别结果并将其映射到默认的输入动作上如单击(Tap)、抓取(Grab)、操作(Manipulation)等同时我们也可以映射自定义的手势输入动作。 2.7 手部关节追踪Articulated Hand Tracking 手部关节追踪区分于手势顾名思义它是更底层的实现配置。手部关节追踪的设置偏重于对手部关节预制件的设置在此我们尽量不要变动其原始设置。   借助手部关节追踪我们可以从输入系统为每个手部关节请求位置和旋转。此外系统还允许访问跟随关节的GameObject。 如果其他GameObject应连续跟踪某个关节这会非常有用。TrackedHandJoint 枚举中列出了可用关节。具体请查阅官方文档在此无需做详细描述。 2.8 语音命令 HoloLens 2中系统提供了语音文字识别功能在此我们可通过关键词设置语音控制命令并将其关联到某个输入动作上。其中总体的配置有启动行为Start Behavior即选择自动启动还是手动启动和识别可信等级不同等级识别效果不同。   由于配置较为简单在此不做阐述详细可参阅官方文档。 2.9 其他 由于是引导章节本文暂未涉及代码和高级功能的讲解MRTK输入系统官方文档中还未我们提供了凝视Gaze、听写Dictation、访问 MRTK 中的输入状态、添加近交互性等功能的介绍、使用和代码编写感兴趣的同学可以先行了解。 三、总结 错综复杂的输入逻辑一点点构成了MRTK日益丰富完善的输入系统为了更好帮助大家理解我尽量将一些专有名词或说法转化为了适合小白的通俗易懂的话语内容制作属实不易错误也不可避免如有错误敬请指出 参考文献 [1] 汪祥春.HoloLens 2开发入门精要基于Unity和MRTK[M]. 北京清华大学出版社2021. [2] MRTK2-unity开发文档[EB/OL].https://learn.microsoft.com/zh-cn/windows/mixed-reality/mrtk-unity/mrtk2,2022.