@google/model-viewer
Version:
Easily display interactive 3D models on the web and in AR!
158 lines (124 loc) • 3.76 kB
TypeScript
type Constructor<T = object> = {
new (...args: any[]): T,
prototype: T
};
type XRFrameOfReferenceType = 'head-model'|'eye-level'|'stage';
interface XRFrameOfReferenceOptions {
disableStageEmulation?: boolean;
stageEmulationHeight?: number;
}
interface XRCoordinateSystem extends EventTarget {
getTransformTo(other: XRCoordinateSystem): Float32Array;
}
interface XRStageBounds {
readonly geometry: DOMPointReadOnly[];
}
interface XRFrameOfReference extends XRCoordinateSystem {
readonly bounds?: XRStageBounds;
readonly emulatedHeight: number;
onboundschange?: (event: Event) => void;
}
interface XRPresentationContext {
readonly canvas: HTMLCanvasElement;
}
interface XRSessionCreationOptions {
immersive?: boolean;
outputContext: XRPresentationContext;
}
interface XRHitResult {
readonly hitMatrix: Float32Array;
}
interface XR extends EventTarget {
requestDevice(): Promise<XRDevice>;
}
interface XRRigidTransform {
readonly position: DOMPointReadOnly;
readonly orientation: DOMPointReadOnly;
readonly matrix: Float32Array;
}
interface XRSpace extends EventTarget {
getTransformTo(other: XRSpace): XRRigidTransform;
}
type XRReferenceSpaceType = 'stationary'|'bounded'|'unbounded';
interface XRReferenceSpaceOptions {
type: XRReferenceSpaceType;
}
interface XRReferenceSpace extends XRSpace {
originOffset: XRRigidTransform;
}
type XREye = 'left'|'right';
interface XRView {
readonly eye: XREye;
readonly projectionMatrix: Float32Array;
readonly viewMatrix: Float32Array;
readonly transform: XRRigidTransform;
}
interface XRViewerPose {
readonly transform: XRRigidTransform;
readonly views: Array<XRView>
}
interface XRRay {
readonly origin: DOMPointReadOnly;
readonly direction: DOMPointReadOnly;
matrix: Float32Array;
}
interface XRInputPose {
readonly emulatedPosition: boolean;
readonly targetRay: XRRay;
readonly gripTransform: XRRigidTransform;
}
type XRHandedness = ''|'left'|'right';
type XRTargetRayMode = 'gaze'|'tracked-pointer'|'screen';
interface XRInputSource {
readonly handedness: XRHandedness;
readonly targetRayMode: XRTargetRayMode;
}
interface XRFrame {
readonly session: XRSession;
getViewerPose(referenceSpace?: XRReferenceSpace): XRViewerPose;
getInputPose(inputSource: XRInputSource, referenceSpace?: XRReferenceSpace):
XRInputPose;
}
type XRFrameRequestCallback = (time: number, frame: XRFrame) => void;
interface XRSession extends EventTarget {
baseLayer: XRLayer;
requestReferenceSpace(options: XRReferenceSpaceOptions):
Promise<XRReferenceSpace>;
requestHitTest(
origin: Float32Array, direction: Float32Array,
frameOfReference: XRFrameOfReference): Promise<XRHitResult[]>;
getInputSources(): Array<XRInputSource>;
requestAnimationFrame(callback: XRFrameRequestCallback): number;
cancelAnimationFrame(id: number): void;
end(): Promise<void>;
}
interface XRDevice {
supportsSession(sessionOptions: XRSessionCreationOptions): Promise<boolean>;
requestSession(sessionOptions: XRSessionCreationOptions): Promise<XRSession>;
}
interface XRViewport {
readonly x: number;
readonly y: number;
readonly width: number;
readonly height: number;
}
interface XRLayer {}
declare class XRWebGLLayer implements XRLayer {
public framebuffer: WebGLFramebuffer;
constructor(
session: XRSession, gl: WebGLRenderingContext,
options: WebGLContextAttributes)
getViewport(view: XRView): XRViewport
}
interface Window {
XRSession?: Constructor<XRSession>;
XRDevice?: Constructor<XRDevice>;
XR?: Constructor<XR>;
XRHitResult?: Constructor<XRHitResult>;
}
interface Navigator {
xr?: XR;
}
interface WebGLRenderingContext {
setCompatibleXRDevice(device: XRDevice): void;
}