@realsee/five
Version:
Realsee Renderer SDK
168 lines (167 loc) • 5.83 kB
TypeScript
import * as THREE from "three";
import { Camera, CameraPose } from "../core/camera";
import { Scene } from "../core/scene";
import { ModelScene } from "../model";
import { Mode } from "../application/mode";
import { Pano } from "../utils/pano";
import { GestureEvent } from '../utils/event';
import { Works } from "../work";
import { State } from "../types/state";
import { Pose } from "../types/pose";
import { Viewport } from "../types/viewport";
import { ImageOptions } from "../types/imageOptions";
import { MovePanoEffect } from "../types/movePanoEffect";
import { Subscribe } from "../utils/subscribe";
import { ControllerEventTypes } from "./events";
import { Motion } from "../utils/motion";
type CameraMotion = Motion<"longitude" | "latitude" | "fov">;
type PostProcessingType = 'edl' | 'hq' | 'luminance' | null;
interface BaseControllerInitArgs {
fiveId: string;
works: Works;
scene: Scene;
modelScene: ModelScene;
xrCustomObjectsScene: THREE.Scene;
helper: THREE.Group;
camera: Camera;
renderer: THREE.WebGLRenderer;
viewport: Viewport;
element: HTMLElement;
extraElements: HTMLElement[];
imageOptions: ImageOptions;
enableWheel: boolean;
videoTexture: THREE.VideoTexture;
initial: {
/** 初始化状态 */
state: Partial<State>;
currentState: State;
/** 状态切换动画时长 */
duration: number;
/** 动画模式 */
effect: MovePanoEffect;
/** 是否是用户触发的 */
userAction: boolean;
};
}
declare class BaseController extends Subscribe<ControllerEventTypes> implements BaseControllerInitArgs {
mode: Mode;
fiveId: string;
needsRender: boolean;
destroyed: boolean;
cameraMotion: CameraMotion;
userAction: boolean;
/** 资源等待中 */
pending: Set<string>;
scene: Scene;
modelScene: ModelScene;
xrCustomObjectsScene: THREE.Scene;
helper: THREE.Group;
camera: Camera;
renderer: THREE.WebGLRenderer;
viewport: Viewport;
element: HTMLElement;
works: Works;
imageOptions: ImageOptions;
videoTexture: THREE.VideoTexture;
extraElements: HTMLElement[];
enableWheel: boolean;
initial: {
state: Partial<State>;
currentState: State;
duration: number;
effect: MovePanoEffect;
userAction: boolean;
};
currentPano: Pano;
protected panState?: {
x: number;
y: number;
defaultPrevented: boolean;
pointerLength: number;
};
protected pressState?: {
event: GestureEvent;
timeStamp: number;
stop: () => void;
};
protected pinchState?: {
x: number;
y: number;
};
protected mouseWheelState?: {
timer: any;
};
protected mouseMoveState?: {
event: GestureEvent;
timeStamp: number;
};
/** 相机旋转是否在惯性运动 */
protected inMomentumMovement: {
uuid: string;
event?: GestureEvent;
} | null;
protected initAnimationReady: Promise<void>;
protected initAnimationIsReady: boolean;
private eventUnbinds;
static parseArgs(args: BaseControllerInitArgs): Required<BaseControllerInitArgs>;
static initAnimationEndState(args: BaseControllerInitArgs): State;
constructor(args: BaseControllerInitArgs);
/** 动态更新配置 */
updateConfiguration(args: {}): boolean;
/** 析构函数 */
destroy(): void;
/** 是否准备好,即不在用户操作中,并且不再动画中 */
isReady(): boolean;
bindExtraElement(element: HTMLElement): void;
unbindExtraElement(element: HTMLElement): void;
/** 生命周期: 更新模型 */
updateModel(modelScene: ModelScene): void;
/** 生命周期: 更新 Work */
updateWork(works: Works, state: Partial<State>, options: {
duration: number;
effect: MovePanoEffect;
}, userAction: boolean): boolean;
/** 生命周期: 更新当前时间 */
updateTime(time: number, deltaTime: number, ...args: any[]): void;
/** 生命周期: 更新渲染 */
render(): boolean;
/** 转动摄像头 */
updateCamera(pose: Partial<Pose>, duration: number, userAction: boolean): Promise<void>;
/** 通过帧动画转动摄像头 */
updateCameraWithKeyframes(keyframes: {
progress: number;
value: Pose;
key?: string;
}[], duration: number, userAction: boolean): Promise<void>;
/** 获取目标姿态 */
getTargetState(): State;
/** 初始化动画 */
protected initAnimation(): Promise<void>;
/** 改变相机 */
protected setCamera(cameraPose?: Partial<CameraPose>): void;
stopMomentumMovement(): void;
/** 用户 Pan 事件 */
protected onPanGesture(event: GestureEvent): void;
/** 用户 Tap 事件 */
protected onTapGesture(event: GestureEvent): void;
/** 用户 DblTap 事件 */
protected onDblTapGesture(event: GestureEvent): void;
/** 用户 Tap 事件 */
protected onPressGesture(event: GestureEvent): void;
/** 用户 Pinch 事件 */
protected onPinchGesture(event: GestureEvent): void;
/** 用户 MouseWheel 事件 */
protected onMouseWheel(event: GestureEvent): void;
/** 用户 MouseMove 事件 */
protected onMouseMove(event: GestureEvent): void;
/** 计算屏幕坐标位置到屏幕标准空间 x: [-1, 1], y: [-1, 1] */
protected relativeClientPosition(mouseXY: {
x: number;
y: number;
}): THREE.Vector2;
/** 从屏幕标准空间 得到 射线 */
protected createRaycasterFromCamera(coords: THREE.Vector2, camera: Camera): THREE.Raycaster;
/** 用户事件绑定 */
private bindEvents;
}
export { BaseController, CameraMotion, PostProcessingType, BaseControllerInitArgs };