XRInputSource:gripSpace 属性

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

只读的XRInputSource属性gripSpace返回一个XRSpace,其原生原点跟踪用于渲染虚拟对象的姿态,以便它们看起来像是被用户的手握住(或作为用户手的一部分)。例如,如果用户握住一根虚拟的直棒,则此XRSpace的原生原点将位于用户拳头的大致质心处。

一个XRSpace对象,表示输入设备在虚拟空间中的位置和方向,适合将设备的图像渲染到场景中。如果输入源本身不可跟踪,则gripSpacenull。例如,只有其targetRayModetracked-pointer的输入才会提供gripSpace

想象一下,控制器形状像一根直棒,被握在用户的拳头中。握持空间的原生原点位于用户的拳头质心(即质量中心),跟踪用户手的姿势。

左手握持空间的坐标系。

A diagram showing how the grip space indicates the local coordinate system for the player's hand relative to the world.

右手握持空间的坐标系。

A diagram showing how the grip space indicates the local coordinate system for the player's hand relative to the world.

如上图所示,坐标系的方向如下

  • x 轴垂直于用户的手掌,如果控制器在用户右手则向手背方向延伸为 +X,如果控制器在左手则为 -X。
  • z 轴沿着杆的长度,平行于用户的手掌并沿着他们握持的长度。-Z 方向为用户拇指方向,+Z 方向则相反。
  • y 轴由其他两个轴之间的关系隐含确定;与以往一样,它是其他两个轴的叉积(与 X 和 Z 轴都成 90°)。

示例

在本例中,取自帧渲染回调,gripSpace用于渲染一个表示控制器在虚拟环境中的位置和方向的网格。

js
for (const source in xrSession.inputSources) {
  if (source.gripSpace) {
    const gripPose = frame.getPose(source.gripSpace, xrRefSpace);

    if (gripPose) {
      myDrawMeshUsingTransform(controllerMesh, gripPose.transform.matrix);
    }
  }
}

对于每个具有 gripSpace 值的输入源,此循环获取表示 gripSpace 描述的位置和方向的XRPose。如果返回有效姿态,则调用方法 myDrawMeshUsingTransform() 以使用握持姿态的变换矩阵变换绘制控制器的网格。

规范

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

浏览器兼容性

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