import '../../globals.js';
/**
 * MobiusScreenView extends PhET's ScreenView to include functionality specific to 3D model-to-view and view-to-model
 * transformations using THREE.js. The MobiusScreenView renders 3D content in an isometric projection and handles the
 * layout and rendering processes.
 *
 * @author Agustín Vallejo (PhET Interactive Simulations)
 * @author Michael Kauzmann (PhET Interactive Simulations)
 */
import Bounds2 from '../../dot/js/Bounds2.js';
import Vector2 from '../../dot/js/Vector2.js';
import Vector3 from '../../dot/js/Vector3.js';
import ScreenView, { ScreenViewOptions } from '../../joist/js/ScreenView.js';
import ThreeIsometricNode, { ThreeIsometricNodeOptions } from './ThreeIsometricNode.js';
export type THREEModelViewTransform = {
    modelToViewPoint: (modelPoint: Vector3) => Vector2;
    modelToViewDelta: (point1: Vector3, point2: Vector3) => Vector2;
    viewToModelPoint: (point: Vector2, modelZ?: number) => Vector3;
    viewToModelDelta: (viewPoint1: Vector2, modelZ1: number, viewPoint2: Vector2, modelZ2: number) => Vector3;
};
type SelfOptions = {
    sceneNodeOptions?: ThreeIsometricNodeOptions;
};
export type MobiusScreenViewOptions = SelfOptions & ScreenViewOptions;
export default class MobiusScreenView extends ScreenView implements THREEModelViewTransform {
    protected readonly supportsWebGL: boolean;
    protected readonly sceneNode: ThreeIsometricNode;
    private contextLossDialog;
    constructor(providedOptions: MobiusScreenViewOptions);
    /**
     * Projects a 3d model point to a 2d view point (in the screen view's coordinate frame).
     * see https://github.com/phetsims/density-buoyancy-common/issues/142
     */
    modelToViewPoint(point: Vector3): Vector2;
    /**
     Get the difference in screen view coordinates between two model points. Both points are needed because of the 3d nature of the model   */
    modelToViewDelta(point1: Vector3, point2: Vector3): Vector2;
    /**
     * Project a 2d global screen coordinate into 3d global coordinate frame. Default to z distance of 0 (center of masses/pool)
     */
    viewToModelPoint(point: Vector2, modelZ?: number): Vector3;
    /**
     * Get the difference in screen view coordinates from the first to the second provided screen points, in model
     * coordinates. Both points are needed because of the 3d nature of the model. Please note that the delta can have
     * negative values.
     */
    viewToModelDelta(viewPoint1: Vector2, modelZ1: number, viewPoint2: Vector2, modelZ2: number): Vector3;
    layout(viewBounds: Bounds2): void;
    renderSceneNode(): void;
    /**
     * Steps forward in time.
     */
    step(dt: number): void;
    /**
     * Shows a warning with a link to more information about PhET simulation webgl compatibility.
     */
    static showWebGLWarning(screenView: ScreenView): void;
}
export {};
//# sourceMappingURL=MobiusScreenView.d.ts.map