@egjs/view3d
Version:
Fast & Customizable glTF 3D model viewer, packed with full of features!
65 lines (55 loc) • 1.37 kB
text/typescript
/*
* Copyright (c) 2020 NAVER Corp.
* egjs projects are licensed under the MIT license
*/
import * as XR from "../../const/xr";
/**
* Manager for WebXR hit-test feature
*/
class HitTest {
/**
* Return whether hit-test feature is available
*/
public static isAvailable() {
return XR.HIT_TEST_SUPPORTED();
}
private _source: any = null;
/**
* Return whether hit-test is ready
*/
public get ready() { return this._source != null; }
/**
* Destroy instance
*/
public destroy() {
if (this._source) {
this._source.cancel();
this._source = null;
}
}
/**
* Initialize hit-test feature
* @param {XRSession} session XRSession instance
*/
public init(session: any) {
session.requestReferenceSpace(XR.REFERENCE_SPACE.VIEWER).then(referenceSpace => {
session.requestHitTestSource({ space: referenceSpace }).then(source => {
this._source = source;
});
});
}
/**
* {@link https://developer.mozilla.org/en-US/docs/Web/API/XRSessionInit XRSessionInit} object for hit-test feature
*/
public getFeatures() {
return XR.FEATURES.HIT_TEST;
}
/**
* Get hit-test results
* @param {XRFrame} frame XRFrame instance
*/
public getResults(frame?: THREE.XRFrame) {
return frame?.getHitTestResults(this._source) ?? [];
}
}
export default HitTest;