XRInputSource: targetRaySpace 属性
只读XRInputSource
属性targetRaySpace
返回一个XRSpace
(通常是XRReferenceSpace
),表示虚拟空间中目标光线的 position 和 orientation。其原生 origin 跟踪目标光线 origin 点的 position,其 orientation 表示控制器设备本身的 orientation。这些值在输入源的targetRayMode
上下文中进行解释,可用于完全解释设备作为输入源。
要获取一个XRSpace
,它表示输入控制器在虚拟空间中的 position 和 orientation,请使用gripSpace
属性。
值
一个XRSpace
对象——通常是XRReferenceSpace
或XRBoundedReferenceSpace
——表示输入控制器在虚拟空间中 target 光线的 position 和 orientation。
返回的XRSpace
的原生 origin 位于 target 光线发出的点,空间的 orientation 表示 target 光线指向的方向。
使用说明
所有输入源——无论其targetRayMode
如何——都拥有有效的 targetRaySpace
。然而,此空间的确切含义根据模式的不同而不同。
- 每个凝视输入(
targetRayMode
值为gaze
)都与其 target 光线空间共享同一个XRSpace
对象,因为凝视输入来自观察者的头部。此共享空间代表与由XRSession
方法requestReferenceSpace()
返回的空间相同的位置,但作为不同的对象进行维护,以允许将来对 API 进行改进。 - 跟踪指针输入(
targetRayMode
为tracked-pointer
)报告的 target 光线空间实际上是基于输入设备的真实空间 position 和 orientation。
要在渲染帧时确定 target 光线的 position 和 orientation,请将其传递到XRFrame
方法getPose()
方法,然后使用返回的XRPose
对象的transform
来收集所需的空间信息。
示例
这段代码片段展示了一个每帧调用一次的函数的一部分。它寻找 targetRaySpace
非 null
的输入。具有此属性值的输入表示从用户处向外投影 target 光线的输入。
对于每个此类输入,此示例寻找其targetRayMode
为 tracked-pointer
的输入,这表明输入实际上旨在表示一个瞄准设备,而不是凝视设备、屏幕点击或鼠标点击。对于跟踪指针,会调用一个名为 myRenderTargetRayAsBeam()
的函数来渲染从输入控制器的虚拟位置开始,向其指向的方向发射的光束。
此代码应继续执行其他任务,例如绘制控制器或任何代表用户双手在虚拟空间中的位置的物体,以及任何其他与输入相关的任务。
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 的浏览器中加载。