@google/model-viewer
Version:
Easily display interactive 3D models on the web and in AR!
70 lines (69 loc) • 2.6 kB
TypeScript
import { EventDispatcher, Object3D, PerspectiveCamera, Raycaster, Scene, WebGLRenderer } from 'three';
import ModelScene from './ModelScene.js';
import { Renderer } from './Renderer.js';
import Reticle from './Reticle.js';
declare const $presentedScene: unique symbol;
declare const $rafId: unique symbol;
declare const $currentSession: unique symbol;
declare const $tick: unique symbol;
declare const $refSpace: unique symbol;
declare const $resolveCleanup: unique symbol;
declare const $outputContext: unique symbol;
declare const $onWebXRFrame: unique symbol;
declare const $postSessionCleanup: unique symbol;
export declare class ARRenderer extends EventDispatcher {
renderer: WebGLRenderer;
parentRenderer: Renderer;
inputContext: WebGLRenderingContext;
camera: PerspectiveCamera;
scene: Scene;
dolly: Object3D;
reticle: Reticle;
raycaster: Raycaster | null;
private [$outputContext];
private [$rafId];
private [$currentSession];
private [$refSpace];
private [$presentedScene];
private [$resolveCleanup];
constructor(parentRenderer: Renderer);
initializeRenderer(): void;
resolveARSession(): Promise<XRSession>;
/**
* The currently presented scene, if any
*/
readonly presentedScene: ModelScene | null;
/**
* Resolves to true if the renderer has detected all the necessary qualities
* to support presentation in AR.
*/
supportsPresentation(): Promise<boolean>;
/**
* Present a scene in AR
*/
present(scene: ModelScene): Promise<void>;
/**
* If currently presenting a scene in AR, stops presentation and exits AR.
*/
stopPresenting(): Promise<void>;
[$postSessionCleanup](): void;
/**
* True if a scene is currently in the process of being presented in AR
*/
readonly isPresenting: boolean;
readonly outputContext: WebGLRenderingContext | null;
placeModel(): Promise<void>;
/**
* It appears that XRSession's `inputsourceschange` event is not implemented
* in Chrome Canary as of m72 for 'screen' inputs, which would be preferable
* since we only need an "select" event, rather than track a pose on every
* frame (like a 6DOF controller). Due to this bug, on every frame, check to
* see if an input exists.
* @see https://bugs.chromium.org/p/chromium/issues/detail?id=913703
* @see https://immersive-web.github.io/webxr/#xrinputsource-interface
*/
processXRInput(frame: XRFrame): void;
[$tick](): void;
[$onWebXRFrame](_time: number, frame: XRFrame): void;
}
export {};