@realsee/five
Version:
Realsee Renderer SDK
145 lines (144 loc) • 6.58 kB
TypeScript
import * as THREE from "three";
import { NetworkResponse, NetWorkMeta } from "../utils/ajax";
import { ModelScene, PBMPanoPicture } from "../model";
import { Works, WorkObserver } from "../work";
import { type EasingFunction } from "../utils/easing";
import { Pano, PanoId } from "../utils/pano";
import { TextureLoader } from "../texture/loader";
import { MovePanoOptions } from "../types/movePanoOptions";
import { MovePanoEffect } from "../types/movePanoEffect";
import { BaseControllerInitArgs } from "./base";
import { PanoramaLikeController, PanoramaLikeControllerCustomInitArgs } from "./panoramaLike";
import { State } from "../types/state";
import { GestureEvent } from "../utils/event";
import { PanoCircleMeshInterface } from "../types/panoCircleMeshInterface";
import { Motion } from "../utils/motion";
import { Tiling } from "../core/tiling";
import { PanoVideo } from "../core/panoVideo";
declare const defaultEffectEase: EasingFunction;
type PanoResource = {
panoId: PanoId;
effect: MovePanoEffect;
effectEasing: EasingFunction;
panoPicture: PBMPanoPicture | null;
position: THREE.Vector3;
fixCameraTransform: THREE.Matrix4;
};
type LocationMotion = Motion<"count" | "distance">;
type PerspToOrthoMotion = Motion<"perspToOrtho">;
type ModelAlphaMotion = Motion<"modelAlpha">;
declare const adjustPanoCircleMeshVectors: THREE.Vector3[];
interface PanoramaControllerCustomInitArgs extends PanoramaLikeControllerCustomInitArgs {
/** 最远可移动观察点距离 */
maxAccessibleDistance?: number;
/**
* 点击地面观察点标识的判定范围
* @description
* 如果在判定范围内则确定去到目标点,
* 否则寻找点击位置方向最适合的点(可能会走到一个离相机更近的点)。
*/
panoTapTriggerRadius?: number;
/** 地面观察点标识自定义创建器 */
panoCircleMeshCreator?: (observer: WorkObserver, options: {
aerialObserverMinHeight: number;
}) => PanoCircleMeshInterface;
/** 基于模型调整 地面观察点 的位置 */
adjustPanoCircleMeshPositionBasedOnModel?: boolean;
/**
* 全景瓦片登记
* @param fov - 当前 fov
* @param viewSize - 当前绘制区域大小
* @returns 返回瓦片等级
*/
tileLevelForFov?: false | ((fov: number, viewSize: THREE.Vector2) => number);
/** 全景进入渐变时长 单位秒 */
tileAppearDuration?: number;
/** 全景瓦片并发数 */
tileMaxRequest?: number;
/** 是否使用深度信息干预全景图着色 */
flyEffectUseDepthBuffer?: boolean;
}
declare const defaultPanoramaControllerCustomInitArgs: Required<PanoramaControllerCustomInitArgs>;
type PanoramaControllerInitArgs = BaseControllerInitArgs & PanoramaControllerCustomInitArgs;
declare class PanoramaController extends PanoramaLikeController implements Required<PanoramaControllerInitArgs> {
maxAccessibleDistance: number;
panoTapTriggerRadius: number;
panoCircleMeshCreator: (observer: WorkObserver, options: {
aerialObserverMinHeight: number;
}) => PanoCircleMeshInterface;
adjustPanoCircleMeshPositionBasedOnModel: boolean;
adjustPanoCircleMeshPositionFix: Map<PanoId, THREE.Vector4>;
tileLevelForFov: false | ((fov: number, viewSize: THREE.Vector2) => number);
tileAppearDuration: number;
tileMaxRequest: number;
flyEffectUseDepthBuffer: boolean;
locationMotion: LocationMotion;
perspToOrthoMotion: PerspToOrthoMotion;
modelAlphaMotion: ModelAlphaMotion;
tiling: Tiling;
protected textureLoader: TextureLoader;
protected panoMeshes: Map<PanoId, PanoCircleMeshInterface>;
protected initAnimationed: boolean;
protected accessibleObserverFloorCheckCount: number;
protected pano0DepthCubeRenderTarget?: THREE.WebGLCubeRenderTarget;
protected pano1DepthCubeRenderTarget?: THREE.WebGLCubeRenderTarget;
protected pendingPanoTask?: {
panoId: PanoId;
hash: string;
onLoad(colorResponse: NetworkResponse<THREE.Texture, NetWorkMeta[]>): void;
onError(error: Error): void;
};
protected panoVideo: PanoVideo;
protected panoResources: {
[key: string]: PanoResource;
};
protected panoPictureObserverMap: WeakMap<PBMPanoPicture, WorkObserver>;
static parseArgs(args: PanoramaControllerInitArgs): Required<PanoramaControllerInitArgs>;
static initAnimationEndState(args: PanoramaControllerInitArgs): State;
constructor(args: PanoramaControllerInitArgs);
get tileLevel(): number;
updateConfiguration(args: PanoramaControllerCustomInitArgs): boolean;
/** controller 销毁 */
destroy(): void;
/** 是否准备好,即不在用户操作中,并且不再动画中 */
isReady(): boolean;
isTileReady(): boolean;
/** 动态更新 work */
updateWork(works: Works, state: Partial<State>, options: {
duration: number;
effect: MovePanoEffect;
}, userAction: boolean): boolean;
/** 更新模型 */
updateModel(modelScene: ModelScene): void;
/** 时间迭代 */
updateTime(time: number, deltaTime: number, ...args: any[]): void;
/** 获取目标姿态 */
getTargetState(): State;
/** 移动点位 */
moveToPano(pano: Pano, options: MovePanoOptions, userAction: boolean): void;
/** 初始化动画 */
protected initAnimation(): Promise<void>;
/**
* 获取 locationMotion.keyframe 中存储的 panoResource
* @param keyframe
* @returns
*/
protected panoResourceFromLocationMotionKeyframe(keyframe: LocationMotion["keyframes"][number]): PanoResource;
/**
* 计算 locationMotion.keyframes 中的整体距离总合的长度
* @param keyframes
* @returns
*/
protected locationMotionKeyframesLength(keyframes: LocationMotion["keyframes"]): number;
/** 移动相机 */
protected doMoveToPano(pano: Pano, panoResource: PanoResource, options?: MovePanoOptions): void;
/**
* 方向射线上寻找下一个目标点位
* @param raycaster - 方向射线
* @returns 方向射线上寻找下一个目标点位
*/
protected getForwardObserverOrNot(camera: THREE.Camera, raycaster?: THREE.Raycaster): WorkObserver | null;
/** 触摸 点击屏幕 */
protected onTapGesture(event: GestureEvent): void;
}
export { LocationMotion, ModelAlphaMotion, PerspToOrthoMotion, PanoramaController, PanoramaControllerInitArgs, PanoramaControllerCustomInitArgs, defaultPanoramaControllerCustomInitArgs, defaultEffectEase, adjustPanoCircleMeshVectors, };