@realsee/five
Version:
Realsee Renderer SDK
140 lines (139 loc) • 5.65 kB
TypeScript
import * as THREE from "three";
import { TextureLoader } from "../texture/loader";
import { BaseController, BaseControllerInitArgs } from "./base";
import { Pose } from "../types/pose";
import { State } from "../types/state";
import { MovePanoEffect } from "../types/movePanoEffect";
import { GestureEvent } from "../utils/event";
import { Works, WorkObserver } from "../work";
import { ModelScene } from "../model";
import { Motion } from "../utils/motion";
import { IntersectMeshInterface } from "../types/intersectMeshInterface";
type LocationMotion = Motion<"x" | "y" | "z" | "distance">;
type PerspToOrthoMotion = Motion<"perspToOrtho">;
type ModelAlphaMotion = Motion<"modelAlpha">;
interface MapviewControllerCustomInitArgs {
/** 默认水平角 */
defaultLongitude?: number;
/** 默认俯仰角 */
defaultLatitude?: number;
/** 默认相机距离 */
defaultDistance?: number;
/** 最大俯仰角 */
maxLatitude?: number | ((fov: number) => number);
/** 最小俯仰角 */
minLatitude?: number | ((fov: number) => number);
/**
* 相机类型
* perspective 透视相机
* orthographic 正交相机
* auto 在俯视为正交相机, 斜视为透视相机(默认)
*/
cameraType?: "perspective" | "orthographic" | "auto";
/**
* 相机电子围栏
*/
cameraFence?: THREE.Box3 | THREE.Sphere | null;
/** 鼠标焦点环自定义创建器 */
intersectMeshCreator?: () => IntersectMeshInterface;
}
declare const defaultMapviewControllerCustomInitArgs: Required<MapviewControllerCustomInitArgs>;
type MapviewControllerInitArgs = BaseControllerInitArgs & MapviewControllerCustomInitArgs;
declare class MapviewController extends BaseController implements Required<MapviewControllerInitArgs> {
defaultLongitude: number;
defaultLatitude: number;
defaultDistance: number;
maxLatitude: number | ((fov: number) => number);
minLatitude: number | ((fov: number) => number);
cameraType: "perspective" | "orthographic" | "auto";
cameraFence: THREE.Box3 | THREE.Sphere | null;
intersectMeshCreator: () => IntersectMeshInterface;
locationMotion: LocationMotion;
modelAlphaMotion: ModelAlphaMotion;
perspToOrthoMotion: PerspToOrthoMotion;
protected panState?: {
x: number;
y: number;
defaultPrevented: boolean;
buttons: number;
target: THREE.Vector3;
pointerLength: number;
};
protected pinchState?: {
x: number;
y: number;
scale: number;
distance: number;
};
protected intersectMesh: IntersectMeshInterface;
protected pendingTextureId: string | null;
protected textureLoader: TextureLoader;
static parseArgs(args: MapviewControllerInitArgs): Required<MapviewControllerInitArgs>;
static distanceFromModel(modelScene: ModelScene, fov: number, aspect: number): number;
static initAnimationEndState(args: MapviewControllerInitArgs): State;
constructor(args: MapviewControllerInitArgs);
updateConfiguration(args: MapviewControllerCustomInitArgs): boolean;
/** 析构函数 */
destroy(): void;
/** 是否准备好,即不在用户操作中,并且不再动画中 */
isReady(): boolean;
/** 生命周期:更新 Work */
updateWork(works: Works, state: Partial<State>, options: {
duration: number;
effect: MovePanoEffect;
}, userAction: boolean): boolean;
/** 生命周期:更新模型 */
updateModel(modelScene: ModelScene): void;
/** 转动摄像头 */
updateCamera(pose: Partial<Pose>, duration: number, userAction: boolean): Promise<void>;
/** 通过帧动画转动摄像头 */
updateCameraWithKeyframes(keyframes: {
progress: number;
value: Pose;
key?: string;
}[], duration: number, userAction: boolean): Promise<void>;
/** 生命周期:时间迭代 */
updateTime(time: number, deltaTime: number): void;
/** 获取目标姿态 */
getTargetState(): State;
/** 初始化动画 */
protected initAnimation(): Promise<void>;
/**
* 方向射线上寻找下一个目标点位
* @param raycaster - 方向射线
* @returns 方向射线上寻找下一个目标点位
*/
protected getForwardObserverOrNot(raycaster: THREE.Raycaster): WorkObserver | null;
/** 计算 屏幕像素 offset 与 转动间的关系 */
protected coordinatesForOffset(offset: {
x: number;
y: number;
}): {
longitude: number;
latitude: number;
};
/** 惯性滚动 */
protected requestMomentumMovement(event: GestureEvent, isFirst: boolean, velocity: {
longitude: number;
latitude: number;
x: number;
y: number;
z: number;
}, duration: number): void;
protected fixFinalState(state: State): void;
/** 触摸 Pan 事件,相机转动 */
protected onPanGesture(event: GestureEvent): void;
/** 触摸 Pinch 事件, 相机缩放 */
protected onPinchGesture(event: GestureEvent): void;
/** 鼠标移动事件 展示交点环 */
protected onMouseMove(event: GestureEvent): void;
/** 鼠标滚轮事件 相机缩放 */
protected onMouseWheel(event: GestureEvent): void;
/** 触摸 点击屏幕 */
protected onTapGesture(event: GestureEvent): void;
/** 触摸 双点屏幕 */
protected onDblTapGesture(event: GestureEvent): void;
/** 隐藏焦点环 */
protected hideIntersectMesh(): void;
}
export { MapviewController, MapviewControllerInitArgs, MapviewControllerCustomInitArgs, defaultMapviewControllerCustomInitArgs, };