XRInputSource: targetRaySpace 屬性

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

只讀的 targetRaySpace 屬性返回一個 XRSpace 物件(通常是 XRReferenceSpace),表示目標射線在虛擬空間中的位置和方向。它的原生原點跟蹤目標射線原點的瞬時位置,並且其方向指示了控制器裝置本身的方向。這些值,在輸入源的 targetRayMode 上下文中解釋,可用於完全理解裝置作為輸入源。

要獲取一個表示輸入控制器在虛擬空間中位置和方向的 XRSpace,請使用 gripSpace 屬性。

一個 XRSpace 物件 — 通常是 XRReferenceSpaceXRBoundedReferenceSpace — 它表示輸入控制器目標射線在虛擬空間中的位置和方向。

返回的 XRSpace 的原生原點位於目標射線發出的點,並且該空間的方向表示目標射線指向的方向。

用法說明

所有輸入源 — 無論它們的 targetRayMode — 都有一個有效的 targetRaySpace。然而,這個空間的確切含義會根據模式的不同而有所不同。

  • 每一個注視輸入(targetRayMode 值為 gaze)都共享相同的 XRSpace 物件作為其目標射線空間,因為注視輸入來自於觀察者的頭部。這個共享空間表示與 XRSession 方法 requestReferenceSpace() 返回的空間相同的位置,但被維護為一個不同的物件,以便將來對 API 進行增強。
  • 由跟蹤指標輸入(targetRayModetracked-pointer)報告的目標射線空間實際上基於輸入裝置的真實空間位置和方向。

要在渲染幀時確定目標射線的位置和方向,請將其傳遞給 XRFrame 方法 getPose(),然後使用返回的 XRPose 物件的 transform 來收集您需要的空間資訊。

示例

這段程式碼片段顯示了一個需要每幀呼叫的函式的區域性。它查詢那些 targetRaySpace 不為 null 的輸入。具有此屬性值的輸入表示那些從使用者向外投射目標射線的輸入。

對於每一個此類輸入,此示例會查詢 targetRayMode 值為 tracked-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 Device API
# dom-xrinputsource-targetrayspace

瀏覽器相容性

另見