XRInputSource: targetRaySpace 属性

可用性有限

此特性不是基线特性,因为它在一些最广泛使用的浏览器中不起作用。

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

只读的 targetRaySpace 属性返回一个 XRSpace 对象(通常是 XRReferenceSpace),表示目标射线在虚拟空间中的位置和方向。它的原生原点跟踪目标射线原点的瞬时位置,并且其方向指示了控制器设备本身的方向。这些值,在输入源的 targetRayMode 上下文中解释,可用于完全理解设备作为输入源。

要获取一个表示输入控制器在虚拟空间中位置和方向的 XRSpace,请使用 gripSpace 属性。

一个 XRSpace 对象 — 通常是 XRReferenceSpaceXRBoundedReferenceSpace — 它表示输入控制器目标射线在虚拟空间中的位置和方向。

返回的 XRSpace 的原生原点位于目标射线发出的点,并且该空间的方向表示目标射线指向的方向。

用法说明

所有输入源 — 无论它们的 targetRayMode — 都有一个有效的 targetRaySpace。然而,这个空间的确切含义会根据模式的不同而有所不同。

  • 每一个注视输入(targetRayMode 值为 gaze)都共享相同的 XRSpace 对象作为其目标射线空间,因为注视输入来自于观察者的头部。这个共享空间表示与 XRSession 方法 requestReferenceSpace() 返回的空间相同的位置,但被维护为一个不同的对象,以便将来对 API 进行增强。
  • 由跟踪指针输入(targetRayModetracked-pointer)报告的目标射线空间实际上基于输入设备的真实空间位置和方向。

要在渲染帧时确定目标射线的位置和方向,请将其传递给 XRFrame 方法 getPose(),然后使用返回的 XRPose 对象的 transform 来收集您需要的空间信息。

示例

这段代码片段显示了一个需要每帧调用的函数的局部。它查找那些 targetRaySpace 不为 null 的输入。具有此属性值的输入表示那些从用户向外投射目标射线的输入。

对于每一个此类输入,此示例会查找 targetRayMode 值为 tracked-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 Device API
# dom-xrinputsource-targetrayspace

浏览器兼容性

另见