XRRigidTransform:position 属性

可用性有限

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

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

只读的 XRRigidTransform 属性 position 是一个 DOMPointReadOnly 对象,它提供了以米为单位的 3D 点,描述了变换的平移分量。

一个只读的 DOMPointReadOnly,指示变换矩阵的 3D 位置分量。单位为米。

注意: 点的 w 分量始终为 1.0。

示例

创建一个可以用于将物体放置在视线水平(假设视线水平为 1.5 米)的参考空间

js
function onSessionStarted(xrSession) {
  xrSession.addEventListener("end", onSessionEnded);

  gl = initGraphics(xrSession);

  const glLayer = new XRWebGLLayer(xrSession, gl);
  xrSession.updateRenderState({ baseLayer: glLayer });

  if (immersiveSession) {
    xrSession
      .requestReferenceSpace("bounded-floor")
      .then((refSpace) => {
        refSpaceCreated(refSpace);
      })
      .catch(() => {
        session.requestReferenceSpace("local-floor").then(refSpaceCreated);
      });
  } else {
    session.requestReferenceSpace("viewer").then(refSpaceCreated);
  }
}

function refSpaceCreated(refSpace) {
  xrReferenceSpace = immersiveSession
    ? refSpace
    : refSpace.getOffsetReferenceSpace(new XRRigidTransform({ y: -1.5 }));
  xrSession.requestAnimationFrame(onFrame);
}

在为 WebXR 使用设置好图形上下文后,首先会检查变量 immersiveSession 是否为 true;如果是,我们首先请求一个 bounded-floor 参考空间。如果失败(可能是因为 bounded-floor 不受支持),我们尝试请求一个 local-floor 参考空间。

如果不在沉浸式会话中,我们则请求一个 viewer 参考空间。

在所有情况下,一旦获得空间,它就会被传递给 refSpaceCreated() 函数。对于沉浸式空间,指定的空间将被保存以备将来使用。但是,对于内联会话,我们知道我们处于一个未自动调整到地面水平的空间,因此我们请求一个偏移参考空间,将查看器的高度调整为比假定的地面水平(0 米)高 1.5 米。然后将使用这个新的参考空间,而不是最初接收到的那个。

最后,提交一个动画帧请求。

规范

规范
WebXR Device API
# dom-xrrigidtransform-position

浏览器兼容性