--- title: XRReferenceSpace slug: Web/API/XRReferenceSpace tags: - API - AR - Augmented Reality - Distances - Interface - Mixed Reality - Offsets - Reference - Spaces - VR - Virtual Reality - WebXR - WebXR API - WebXR Device API - XR - XRReferenceSpace - matrix - transform translation_of: Web/API/XRReferenceSpace ---
{{APIRef("WebXR Device API")}}{{secureContext_header}}
WebXR Device API の XRReferenceSpace
インターフェイスは、指定された追跡の振る舞いを使用して、仮想世界内の特定の追跡対象のエンティティまたはオブジェクトの座標系を記述します。 追跡の振る舞いは、選択した参照空間タイプによって定義されます。 いくつかの異なる追跡の振る舞いのサポートを追加し、追跡対象オブジェクトと世界の別の場所との間のオフセット変換を記述する新しい参照空間を要求することにより、基本クラス {{domxref("XRSpace")}} を拡張します。
すべての参照空間(制限付き参照空間を除く)は、XRReferenceSpace
タイプを使用して記述されます。 制限付き空間は、{{domxref("XRBoundedReferenceSpace")}} オブジェクトとして実装されます。 これは、ビューアーが移動するのに「安全」な境界を確立できる特別な空間です。 実世界のカメラで移動を追跡するシステムなど、ユーザーが物理的に動き回ることができる XR システムの場合、この境界は、物理的な障害によるものか、XR ハードウェアの制限によるものかにかかわらず、ユーザーが動き回ることができる領域の縁を確立します。 ユーザーが物理的および仮想的な障害物と衝突しないようにするための境界の使用の詳細については、制限付き参照空間を使用したビューアーの保護の記事を参照してください。
{{domxref("XRSpace")}} から継承されたプロパティ(現時点では、ない)に加えて、XRReferenceSpace
は {{domxref("EventTarget")}} のプロパティも継承します。 XRReferenceSpace
は、追加のプロパティを定義しません。
親インターフェイスである {{domxref("XRSpace")}} から継承されたメソッド(現時点では、ない)に加えて、XRReferenceSpace
は {{domxref("EventTarget")}} からメソッドを継承します。 XRReferenceSpace
は、次のメソッドも提供します。
XRReferenceSpace
または {{domxref("XRBoundedReferenceSpace")}})の新しい参照空間オブジェクトを作成して返します。 新しい参照空間を使用して、メソッドが呼び出されたオブジェクトの参照空間から別の座標空間に座標を変換できます。 これは、レンダリング中にオブジェクトを配置したり、3D 空間でビューアーの位置や向きを変更するときに必要な変換を実行したりするのに役立ちます。{{domxref("XRSpace")}} または {{domxref("EventTarget")}} オブジェクトに送信される可能性のある他のイベントに加えて、以下も XRReferenceSpace
オブジェクトに適用されます。
reset
イベントは、ユーザーの環境または場所を基準にして追跡対象オブジェクトの原点で不連続性が発生したことをブラウザーが検出すると、{{domxref("XRReferenceSpace")}} オブジェクトに送信されます。 これは、例えば、ユーザーが XR デバイスを再調整した後や、追跡を失って回復した後にデバイスが原点を自動的に調整した場合に発生する可能性があります。
{{domxref("EventTarget.addEventListener", "addEventListener()")}} の使用に加えて、{{domxref("XRReferenceSpace.onreset", "onreset")}} イベントハンドラープロパティを設定することにより、reset
イベントハンドラーを確立できます。
{{page("/ja/docs/Web/API/XRReferenceSpaceType", "Values")}}
XRReferenceSpace
を取得する必要がある状況は2つあります。 1つ目は、シーンを設定し、{{domxref("XRSession")}} の期間中、世界に対するユーザーの視点を表す参照空間を取得する必要がある場合です。 これを行うには、{{domxref("XRSession")}} のメソッド {{domxref("XRSession.requestReferenceSpace", "requestReferenceSpace()")}} を呼び出して、取得する参照空間タイプを指定します。
xrSession.requestReferenceSpace("local").then((refSpace) => { xrReferenceSpace = refSpace; /* ... */ });
新しい参照空間を取得する必要があるもう1つの状況は、原点を新しい位置に移動する必要がある場合です。 これは通常、例えば、あなたのプロジェクトで、ユーザーが XR デバイスを介して接続されていないキーボード、マウス、タッチパッド、ゲームコントローラーなどの入力デバイスを使用して環境内を移動できる場合に行われます。 原点は通常、空間内のユーザーの位置であるため、原点を変更して、ユーザーの移動と方向の変更を反映する必要があります。
ユーザーの世界のビューを移動または回転するには、その視点を表すために使用される XRReferenceSpace
を変更する必要があります。 ただし、XRReferenceSpace
は不変であるため、代わりに、変更された視点を表す新しい参照空間を作成する必要があります。 これは、{{domxref("XRReferenceSpace.getOffsetReferenceSpace", "getOffsetReferenceSpace()")}} メソッドを使用して簡単に実行できます。
let offsetTransform = new XRRigidTransform({x: 2, y: 0, z: 1}, {x: 0, y: 1, z: 0, w: 1}); xrReferenceSpace = xrReferenceSpace.getOffsetReferenceSpace(offsetTransform);
これにより、XRReferenceSpace
を新しいものに置き換えます。 その原点と向きは、新しい原点を現在の原点に対して (2, 0, 1) に配置するように調整し、前の世界の向きに対してビューアーを真上に向けるように空間を向ける単位{{Glossary("quaternion","クォータニオン")}}を指定して回転します。
XRReferenceSpace
のネイティブ原点は、+X が右側、+Y が上向き、+Z が「後方」またはユーザーに向かっていると見なされるように常に構成されています。
仕様 | 状態 | コメント |
---|---|---|
{{SpecName('WebXR','#xrreferencespace-interface','XRReferenceSpace')}} | {{Spec2('WebXR')}} | 初期定義 |
{{Compat("api.XRReferenceSpace")}}