@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.
122 lines (121 loc) • 4.57 kB
TypeScript
import type { TransformNode } from "../../Meshes/transformNode.js";
import type { WebXRSessionManager } from "../webXRSessionManager.js";
import { Observable } from "../../Misc/observable.js";
import { Vector3, Matrix } from "../../Maths/math.vector.js";
import { WebXRAbstractFeature } from "./WebXRAbstractFeature.js";
/**
* Options used in the plane detector module
*/
export interface IWebXRPlaneDetectorOptions {
/**
* The node to use to transform the local results to world coordinates
*/
worldParentNode?: TransformNode;
/**
* If set to true a reference of the created planes will be kept until the next session starts
* If not defined, planes will be removed from the array when the feature is detached or the session ended.
*/
doNotRemovePlanesOnSessionEnded?: boolean;
/**
* Preferred detector configuration, not all preferred options will be supported by all platforms.
*/
preferredDetectorOptions?: XRGeometryDetectorOptions;
}
/**
* A babylon interface for a WebXR plane.
* A Plane is actually a polygon, built from N points in space
*
* Supported in chrome 79, not supported in canary 81 ATM
*/
export interface IWebXRPlane {
/**
* a babylon-assigned ID for this polygon
*/
id: number;
/**
* an array of vector3 points in babylon space. right/left hand system is taken into account.
*/
polygonDefinition: Array<Vector3>;
/**
* A transformation matrix to apply on the mesh that will be built using the polygonDefinition
* Local vs. World are decided if worldParentNode was provided or not in the options when constructing the module
*/
transformationMatrix: Matrix;
/**
* the native xr-plane object
*/
xrPlane: XRPlane;
}
/**
* The plane detector is used to detect planes in the real world when in AR
* For more information see https://github.com/immersive-web/real-world-geometry/
*/
export declare class WebXRPlaneDetector extends WebXRAbstractFeature {
private _options;
private _detectedPlanes;
private _enabled;
private _lastFrameDetected;
/**
* The module's name
*/
static readonly Name = "xr-plane-detection";
/**
* 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 plane was added to the session
*/
onPlaneAddedObservable: Observable<IWebXRPlane>;
/**
* Observers registered here will be executed when a plane is no longer detected in the session
*/
onPlaneRemovedObservable: Observable<IWebXRPlane>;
/**
* Observers registered here will be executed when an existing plane updates (for example - expanded)
* This can execute N times every frame
*/
onPlaneUpdatedObservable: Observable<IWebXRPlane>;
/**
* construct a new Plane Detector
* @param _xrSessionManager an instance of xr Session manager
* @param _options configuration to use when constructing this feature
*/
constructor(_xrSessionManager: WebXRSessionManager, _options?: IWebXRPlaneDetectorOptions);
/**
* 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;
/**
* Check if the needed objects are defined.
* This does not mean that the feature is enabled, but that the objects needed are well defined.
* @returns true if the initial compatibility test passed
*/
isCompatible(): boolean;
/**
* Enable room capture mode.
* When enabled and supported by the system,
* the detectedPlanes array will be populated with the detected room boundaries
* @see https://immersive-web.github.io/real-world-geometry/plane-detection.html#dom-xrsession-initiateroomcapture
* @returns true if plane detection is enabled and supported. Will reject if not supported.
*/
initiateRoomCapture(): Promise<void>;
protected _onXRFrame(frame: XRFrame): void;
private _init;
private _updatePlaneWithXRPlane;
/**
* avoiding using Array.find for global support.
* @param xrPlane the plane to find in the array
* @returns the index of the plane in the array or -1 if not found
*/
private _findIndexInPlaneArray;
}