XRReferenceSpace
WebXR 裝置 API 的 XRReferenceSpace 介面使用指定的跟蹤行為,描述了虛擬世界中特定跟蹤實體或物件的座標系。跟蹤行為由所選的 參考空間型別 定義。它透過增加對幾種不同跟蹤行為的支援,以及請求一個描述跟蹤物件和世界中另一位置之間的偏移變換的新參考空間,來擴充套件基類 XRSpace。
除受限參考空間(bounded reference spaces)外,所有參考空間都使用 XRReferenceSpace 型別進行描述。受限空間實現為 XRBoundedReferenceSpace 物件。這些是特殊空間,可讓您建立一個周界,在其中使用者移動是“安全”的。對於允許使用者實際四處移動的 XR 系統(例如,透過真實攝像頭跟蹤移動的系統),此邊界確定了使用者可以活動的區域邊緣,無論是由於物理障礙還是 XR 硬體的限制。有關使用邊界防止使用者與物理和虛擬障礙物碰撞的更多資訊,請參閱文章 使用受限參考空間保護使用者。
例項屬性
XRReferenceSpace 繼承了 EventTarget 的屬性,但沒有定義其他屬性。
例項方法
XRReferenceSpace 除了以下方法外,還繼承了 EventTarget 的方法。
getOffsetReferenceSpace()-
建立並返回一個新的參考空間物件,其型別與呼叫方法的物件相同(即,
XRReferenceSpace或XRBoundedReferenceSpace)。新的參考空間可用於將座標從呼叫方法的物件的參考空間轉換為另一個座標空間。這對於在渲染時定位物件以及在更改檢視者的 3D 空間位置和/或方向時執行必要的變換很有用。
事件
reset-
當瀏覽器檢測到跟蹤物件原點與使用者環境或位置之間出現不連續性時,會向
XRReferenceSpace物件傳送reset事件。例如,在使用者重新校準其 XR 裝置後,或者裝置在丟失並重新獲得跟蹤後自動調整其原點時,可能會發生這種情況。
參考空間型別
參考空間型別的列表如下表所示,並附有關於其用例和實現它們所使用的介面的簡要資訊。
有界地板-
一個
XRBoundedReferenceSpace,類似於local型別,但使用者預計不會超出由返回物件中的boundsGeometry給出的預定邊界。 local-
一個
XRReferenceSpace跟蹤空間,其本地原點位於建立會話時檢視者位置附近。具體位置取決於底層平臺和實現。預期使用者不會(或很少)超出其起始位置移動,並且跟蹤針對此用例進行了最佳化。對於具有六自由度 (6DoF) 跟蹤的裝置,local參考空間會嘗試使原點相對於環境保持穩定。 區域性地板-
一個
XRReferenceSpace,與local型別類似,但起始位置放置在檢視者站立的安全位置,其中 y 軸的值在地面水平處為 0。如果不知道地面水平,使用者代理將估算地面水平。如果估算的地面水平非零,則瀏覽器應將其四捨五入,以避免指紋識別(可能精確到最近的釐米)。 無界-
一個
XRReferenceSpace跟蹤空間,允許使用者完全自由移動,可能距離其原點非常遠。檢視者根本不被跟蹤;跟蹤針對圍繞使用者當前位置的穩定性進行了最佳化,因此本地原點可以根據需要漂移以適應該需求。 檢視器-
一個
XRReferenceSpace跟蹤空間,其本地原點跟蹤檢視者的位置和方向。這用於使用者可以實際四處移動的環境,並且受到所有XRSession例項(沉浸式和內聯)的支援,儘管它對於內聯會話最有價值。在確定檢視者與輸入之間的距離,或在使用偏移空間時特別有用。否則,通常會更頻繁地使用其他參考空間型別之一。
用法說明
建立 XRReferenceSpace
您需要在兩種情況下獲取 XRReferenceSpace。第一種情況是在設定場景時,需要獲取一個參考空間來表示使用者在 XRSession 持續期間對世界的視角。為此,請呼叫 XRSession 方法 requestReferenceSpace(),並指定您希望獲取的參考空間型別。
xrSession.requestReferenceSpace("local").then((refSpace) => {
xrReferenceSpace = refSpace;
// …
});
您可能需要獲取新參考空間的另一種情況是,如果您需要將原點移動到新位置;例如,當您的專案允許使用者使用鍵盤、滑鼠、觸控板或未透過 XR 裝置連線的遊戲控制器等輸入裝置在環境中移動時,通常會這樣做。由於原點通常是使用者在空間中的位置,因此您需要更改原點以反映他們的移動和所做的任何方向更改。
要移動或旋轉使用者對世界的看法,您需要更改用於表示該視角的 XRReferenceSpace。但是,XRReferenceSpace 是不可變的,因此您需要建立一個表示更改後的視角的新參考空間。使用 getOffsetReferenceSpace() 方法可以輕鬆完成此操作。
let offsetTransform = new XRRigidTransform(
{ x: 2, y: 0, z: 1 },
{ x: 0, y: 0, z: 0, w: 1 },
);
xrReferenceSpace = xrReferenceSpace.getOffsetReferenceSpace(offsetTransform);
這會將 XRReferenceSpace 替換為一個新物件,該物件的新原點和方向將調整為相對於當前原點位於 (2, 0, 1) 處,並透過一個單位 四元數進行旋轉,該四元數將空間定向為使檢視者相對於先前世界方向直視上方。
幾何體
任何 XRReferenceSpace 的本地原點始終配置為:+X 向右,+Y 向上,+Z 向“後”或朝向使用者。
規範
| 規範 |
|---|
| WebXR Device API # xrreferencespace-interface |
瀏覽器相容性
載入中…