XRInputSource: targetRayMode 属性

安全上下文: 此功能仅在 安全上下文 (HTTPS) 中可用,在部分或所有 支持的浏览器 中可用。

只读 XRInputSource 属性 targetRayMode 指示为输入源生成目标光线以及将其呈现给用户的方式。

通常,目标光线从瞄准系统的源头沿目标光线方向绘制,该方向是用户正在观看或指向的方向。光线样式通常由您决定,目标光线终点的指示方式也是如此。您可以通过绘制形状或突出显示目标表面或物体来指示目标点或物体。

由手柄控制器发射的目标光线

A screenshot showing a target ray being emitted by a hand controller

目标光线可以是简单的线(理想情况下随着距离逐渐消失),也可以是动画效果,例如上面截图中所示的科幻“相位器”样式。

一个字符串,指示在为用户生成和呈现目标光线时使用哪种方法。可能的值是

gaze

用户正在使用凝视跟踪系统(或凝视输入),该系统检测用户正在观看的方向。目标光线将从观看者的眼睛绘制,并沿他们观看的方向延伸。

screen

使用触摸屏、鼠标或其他触觉输入设备上的轻触来指示目标光线的方向。

tracked-pointer

使用手持设备或手部跟踪系统进行瞄准,用户将设备指向目标方向。目标光线从手(或手中的物体)沿目标方向延伸。方向由平台特定规则确定,但如果不存在此类规则,则方向通过假设用户正将食指从手中伸直来选择。

transient-pointer

输入源是在操作系统交互意图而不是特定硬件的生成过程中产生的。一些示例包括基于过于敏感而无法直接公开的信息的用户意图,例如凝视、来自 Web 驱动程序的合成输入或辅助技术生成的输入。

使用说明

输入源的 targetRaySpace 指示目标光线的位置和方向,可用于确定在何处渲染光线。

示例

这段代码片段显示了在每帧调用一次的函数的一部分。它寻找具有非null targetRaySpace 的输入。具有此属性值的输入代表从用户处投射出目标光线的输入。

对于每个此类输入,此示例都寻找其targetRayModetracked-pointer 的输入,这表明输入实际上是代表瞄准设备而不是凝视设备、屏幕轻触或鼠标点击。对于跟踪指针,将调用函数myRenderTargetRayAsBeam() 以从输入控制器的虚拟位置沿其指向的方向渲染光束。

代码应继续执行任务,例如绘制控制器或任何代表用户手在虚拟空间中的位置的物体,以及任何其他与输入相关的任务。

js
function updateInputSources(session, frame, refSpace) {
  for (const source of session.getInputSources()) {
    const targetRayPose = frame.getPose(inputSource.targetRaySpace, refSpace);

    if (targetRayPose) {
      if (source.targetRayMode === "tracked-pointer") {
        myRenderTargetRayAsBeam(targetRayPose);
      }
    }

    // …
  }
}

有关更多详细信息和更完整的示例,请参阅文章 输入和输入源

规范

规范
WebXR 设备 API
# dom-xrinputsource-targetraymode

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅