XRInputSource: targetRaySpace 属性

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

只读XRInputSource 属性targetRaySpace返回一个XRSpace(通常是XRReferenceSpace),表示虚拟空间中目标光线的 position 和 orientation。其原生 origin 跟踪目标光线 origin 点的 position,其 orientation 表示控制器设备本身的 orientation。这些值在输入源的targetRayMode 上下文中进行解释,可用于完全解释设备作为输入源。

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

一个XRSpace 对象——通常是XRReferenceSpaceXRBoundedReferenceSpace——表示输入控制器在虚拟空间中 target 光线的 position 和 orientation。

返回的XRSpace 的原生 origin 位于 target 光线发出的点,空间的 orientation 表示 target 光线指向的方向。

使用说明

所有输入源——无论其targetRayMode 如何——都拥有有效的 targetRaySpace。然而,此空间的确切含义根据模式的不同而不同。

  • 每个凝视输入(targetRayMode 值为 gaze)都与其 target 光线空间共享同一个XRSpace 对象,因为凝视输入来自观察者的头部。此共享空间代表与由XRSession 方法requestReferenceSpace() 返回的空间相同的位置,但作为不同的对象进行维护,以允许将来对 API 进行改进。
  • 跟踪指针输入(targetRayModetracked-pointer)报告的 target 光线空间实际上是基于输入设备的真实空间 position 和 orientation。

要在渲染帧时确定 target 光线的 position 和 orientation,请将其传递到XRFrame 方法getPose() 方法,然后使用返回的XRPose 对象的transform 来收集所需的空间信息。

示例

这段代码片段展示了一个每帧调用一次的函数的一部分。它寻找 targetRaySpacenull 的输入。具有此属性值的输入表示从用户处向外投影 target 光线的输入。

对于每个此类输入,此示例寻找其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-targetrayspace

浏览器兼容性

BCD 表格仅在启用 JavaScript 的浏览器中加载。

另请参见