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 Device API
# dom-xrinputsource-gripspace

瀏覽器相容性