UNPKG

@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
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; }