@babylonjs/core
Version:
Getting started? Play directly with the Babylon.js API using our [playground](https://playground.babylonjs.com/). It also contains a lot of samples to learn how to use it.
150 lines (149 loc) • 6.23 kB
TypeScript
import type { WebXRSessionManager } from "../webXRSessionManager.js";
import { Observable } from "../../Misc/observable.js";
import { Matrix, Vector3, Quaternion } from "../../Maths/math.vector.js";
import type { TransformNode } from "../../Meshes/transformNode.js";
import { WebXRAbstractFeature } from "./WebXRAbstractFeature.js";
import type { IWebXRHitResult } from "./WebXRHitTest.js";
/**
* Configuration options of the anchor system
*/
export interface IWebXRAnchorSystemOptions {
/**
* a node that will be used to convert local to world coordinates
*/
worldParentNode?: TransformNode;
/**
* If set to true a reference of the created anchors will be kept until the next session starts
* If not defined, anchors will be removed from the array when the feature is detached or the session ended.
*/
doNotRemoveAnchorsOnSessionEnded?: boolean;
/**
* If set to true, all anchor arrays will be cleared when the session initializes
*/
clearAnchorsOnSessionInit?: boolean;
}
/**
* A babylon container for an XR Anchor
*/
export interface IWebXRAnchor {
/**
* A babylon-assigned ID for this anchor
*/
id: number;
/**
* Transformation matrix to apply to an object attached to this anchor
*/
transformationMatrix: Matrix;
/**
* The native anchor object
*/
xrAnchor: XRAnchor;
/**
* if defined, this object will be constantly updated by the anchor's position and rotation
*/
attachedNode?: TransformNode;
/**
* Remove this anchor from the scene
*/
remove(): void;
/**
* @internal - set to true when the anchor was removed
*/
_removed: boolean;
}
/**
* An implementation of the anchor system for WebXR.
* For further information see https://github.com/immersive-web/anchors/
*/
export declare class WebXRAnchorSystem extends WebXRAbstractFeature {
private _options;
private _lastFrameDetected;
private _trackedAnchors;
private _referenceSpaceForFrameAnchors;
private _futureAnchors;
/**
* The module's name
*/
static readonly Name = "xr-anchor-system";
/**
* The (Babylon) version of this module.
* This is an integer representing the implementation version.
* This number does not correspond to the WebXR specs version
*/
static readonly Version = 1;
/**
* Observers registered here will be executed when a new anchor was added to the session
*/
onAnchorAddedObservable: Observable<IWebXRAnchor>;
/**
* Observers registered here will be executed when an anchor was removed from the session
*/
onAnchorRemovedObservable: Observable<IWebXRAnchor>;
/**
* Observers registered here will be executed when an existing anchor updates
* This can execute N times every frame
*/
onAnchorUpdatedObservable: Observable<IWebXRAnchor>;
/**
* Set the reference space to use for anchor creation, when not using a hit test.
* Will default to the session's reference space if not defined
*/
set referenceSpaceForFrameAnchors(referenceSpace: XRReferenceSpace);
/**
* constructs a new anchor system
* @param _xrSessionManager an instance of WebXRSessionManager
* @param _options configuration object for this feature
*/
constructor(_xrSessionManager: WebXRSessionManager, _options?: IWebXRAnchorSystemOptions);
private _tmpVector;
private _tmpQuaternion;
private _populateTmpTransformation;
/**
* Create a new anchor point using a hit test result at a specific point in the scene
* An anchor is tracked only after it is added to the trackerAnchors in xrFrame. The promise returned here does not yet guaranty that.
* Use onAnchorAddedObservable to get newly added anchors if you require tracking guaranty.
*
* @param hitTestResult The hit test result to use for this anchor creation
* @param position an optional position offset for this anchor
* @param rotationQuaternion an optional rotation offset for this anchor
* @returns A promise that fulfills when babylon has created the corresponding WebXRAnchor object and tracking has begun
*/
addAnchorPointUsingHitTestResultAsync(hitTestResult: IWebXRHitResult, position?: Vector3, rotationQuaternion?: Quaternion): Promise<IWebXRAnchor>;
/**
* Add a new anchor at a specific position and rotation
* This function will add a new anchor per default in the next available frame. Unless forced, the createAnchor function
* will be called in the next xrFrame loop to make sure that the anchor can be created correctly.
* An anchor is tracked only after it is added to the trackerAnchors in xrFrame. The promise returned here does not yet guaranty that.
* Use onAnchorAddedObservable to get newly added anchors if you require tracking guaranty.
*
* @param position the position in which to add an anchor
* @param rotationQuaternion an optional rotation for the anchor transformation
* @param forceCreateInCurrentFrame force the creation of this anchor in the current frame. Must be called inside xrFrame loop!
* @returns A promise that fulfills when babylon has created the corresponding WebXRAnchor object and tracking has begun
*/
addAnchorAtPositionAndRotationAsync(position: Vector3, rotationQuaternion?: Quaternion, forceCreateInCurrentFrame?: boolean): Promise<IWebXRAnchor>;
/**
* Get the list of anchors currently being tracked by the system
*/
get anchors(): IWebXRAnchor[];
/**
* detach this feature.
* Will usually be called by the features manager
*
* @returns true if successful.
*/
detach(): boolean;
/**
* Dispose this feature and all of the resources attached
*/
dispose(): void;
protected _onXRFrame(frame: XRFrame): void;
/**
* avoiding using Array.find for global support.
* @param xrAnchor the plane to find in the array
* @returns the index of the anchor in the array or -1 if not found
*/
private _findIndexInAnchorArray;
private _updateAnchorWithXRFrame;
private _createAnchorAtTransformationAsync;
}