This document provides a summary of the core API for the Five SDK, designed to be easily understood by AI assistants.
FiveThe Five class is the main entry point for the SDK. It manages the rendering, state, and interaction of the 3D scene.
const five = new Five(initArgs?: FiveInitArgs);
| Property | Type | Description |
|---|---|---|
five.state |
State |
The current state (mode, position, etc.) of the instance. |
five.currentMode |
Mode |
Shortcut to get the current display mode. |
five.panoIndex |
number |
Shortcut to get the current panorama index. |
five.work |
Work |
The currently loaded work data. |
five.model |
Model |
The 3D model object. |
five.scene |
THREE.Scene |
The Three.js scene used for non-model elements. |
five.modelScene |
ModelScene |
The Three.js scene used for the model. |
five.camera |
Camera |
The internal camera. |
five.renderer |
THREE.WebGLRenderer |
The WebGL renderer. |
five.needsRender |
boolean |
Set to true to request a render frame in the next loop. |
five.plugins |
Object |
Access to registered plugins. |
| Property | Type | Description |
|---|---|---|
Five.Mode |
Enum |
Available modes: Panorama, Model, Floorplan, Topview, Mapview, VRPanorama, XRPanorama. |
FiveInitArgs)Configuration object passed to the Five constructor.
interface FiveInitArgs {
/** External WebGLRenderer. If provided, internal renderer creation is skipped. */
renderer?: THREE.WebGLRenderer;
/** Width/Height of the viewport relative to container (0-1). */
viewport?: { left: number; bottom: number; width: number; height: number };
/** Canvas background color. Default: 0x181A1C */
backgroundColor?: number | THREE.Color;
/** Canvas background alpha (0-1). Default: 1 */
backgroundAlpha?: number;
/** Enable antialiasing. Default: false */
antialias?: boolean;
/** Auto-play rendering loop. Default: true */
play?: boolean;
/** Enable on-demand rendering to save battery. Default: true */
onlyRenderIfNeeds?: boolean;
/** Max FPS limit. false = unlimited. Default: false */
maxFps?: number | false;
/** Mode transition duration in ms. Default: 1000 */
modeChangeDuration?: number;
/** Enable mouse wheel zoom. Default: true */
enableWheel?: boolean;
/** Initial plugins to load. */
plugins?: FivePlugin[];
/** Dynamic image configuration for optimization. */
imageOptions?: ImageOptions;
/** Dynamic texture configuration for optimization. */
textureOptions?: TextureOptions;
/** Request URL interceptor for auth/CDN. */
requestProxy?: (url: string) => string | Promise<string>;
/** Per-mode configuration (panorama, mapview, floorplan, topview, model). */
panorama?: PanoramaConfig;
mapview?: MapviewConfig;
floorplan?: FloorplanConfig;
topview?: TopviewConfig;
model?: ModelConfig;
}
详细的模式配置参数见 Mode。 图片加载策略见 ImageOptions。 请求代理见 Request Proxy。 完整初始化参数见 Five 和 Parameter。
load(work, state?, options?)Loads a "Work" (dataset) into the Five instance.
LooseWork or Work) containing scene information."inherit", "initial", or a State object.mode: "add" | "replace").详见 Work 和 Multi-Work。
appendTo(element, size?)Mounts the Five canvas to a DOM element.
{ width, height }. Defaults to element size.setState(state, immediately?, userAction?)Updates the current state (position, mode, etc.).
State object to merge.true, skips animation.详见 State。
changeMode(mode, state?, options?)Switches the viewing mode (e.g., from Panorama to Model).
Five.Mode.详见 Mode。
moveToPano(panoIndex, options?)Moves to a specific panorama spot.
{ effect?: MovePanoEffect, duration?: number, effectEasing?: Function }.updateCamera(pose, duration, userAction?)Animates the camera to a target pose without changing pano index.
Pose object (longitude, latitude, fov, etc.).Promise<void> (rejects if interrupted).详见 Camera Animation。
ready(args?)Returns a Promise that resolves when Five is stable (state synced, model loaded, optionally tiles loaded).
{ tile?: boolean } — if tile: true in Panorama mode, waits for tile loading.refresh(size?)Resizes the renderer to fit the container or specified size.
getElement()Returns the <canvas> element used by Five.
project2d(vector, testModel?)Projects a 3D point to 2D screen coordinates.
THREE.Vector3 (World Space).boolean (default false). If true, checks for occlusion.THREE.Vector2 (Screen Space, px) or null.getPixels(options)Get pixel data from the renderer (e.g. for color picking or magnifier).
{ x, y, width, height, pixelRatio?, flipY?, buffer?, skipPanorama?, helperVisible? }Uint8Array (RGBA data).intersectRaycaster(raycaster)(On five.model) Performs raycasting against the scene models.
THREE.Raycaster (supports extended props: firstHitOnly, hitFilter, sortByDistance, floorIndex).THREE.Intersection[] (extended with tile, viewLayer, model fields).详见 Raycast。
addPass(pass) / removePass(pass)Add or remove a post-processing pass to/from the rendering chain.
FivePass instance (e.g. GaussianBlurPass, FlowingLight2DPass).详见 Postprocessing。
updateConfiguration(config)Dynamically update mode configurations after initialization (e.g., panorama, mapview settings).
详见 Mode。
dispose()Destroys the Five instance and releases resources.
The State interface defines the complete status of the Five instance at any moment.
interface State {
mode: Mode; // Current view mode
panoIndex: number; // Current panorama index
workCode: string; // ID of the current work
latitude: number; // Camera latitude (radians)
longitude: number; // Camera longitude (radians)
distance: number; // Camera distance from target
fov: number; // Field of view
offset: THREE.Vector3; // Camera target offset
}
WorkThe main data object containing the scene description.
interface Work {
workCode: string; // Unique identifier
name: string; // Project name
observers: WorkObserver[]; // List of panorama points
model: WorkModel; // 3D model data
initial: WorkInitial; // Initial view state
transform: THREE.Matrix4; // World transform matrix
}
WorkObserver (Panorama Point)Represents a single panorama spot.
interface WorkObserver {
index: number; // Index in the list
floorIndex: number; // Floor number
position: THREE.Vector3; // Position in 3D space
quaternion: THREE.Quaternion; // Rotation relative to model
accessibleNodes: number[]; // Indices of reachable points
images: WorkImage; // Panorama image URLs
active: boolean; // Whether the point is enabled
// Coordinate Methods
getWorldPosition(): THREE.Vector3;
getWorldStandingPosition(): THREE.Vector3;
// UV Conversion Methods
vectorToEquirectangularUv(vector: THREE.Vector3, uvOrigin?: 'top-left' | 'bottom-left'): THREE.Vector2;
equirectangularUvToVector(uv: THREE.Vector2, uvOrigin?: 'top-left' | 'bottom-left'): THREE.Vector3;
vectorToCubemapUv(vector: THREE.Vector3, uvOrigin?: 'top-left' | 'bottom-left'): [CubeFace, THREE.Vector2];
cubemapUvToVector(cubeFace: CubeFace, uv: THREE.Vector2, uvOrigin?: 'top-left' | 'bottom-left'): THREE.Vector3;
}
Five extends Subscribe, allowing event listening via .on(), .once(), and .off().
The SDK provides a modern event system (dot-notation, e.g., gesture.tap) which is recommended over the legacy system (camelCase, e.g., wantsTapGesture).
These events follow a standard naming convention and provide typed event objects.
| Event Name | Description | Payload |
|---|---|---|
gesture.tap |
Triggered on tap/click. Replaces wantsTapGesture. |
GestureEvent |
gesture.dbltap |
Triggered on double tap/click. | GestureEvent |
gesture.pan |
Triggered on pan/drag. | GestureEvent |
gesture.pinch |
Triggered on pinch/zoom. | GestureEvent |
gesture.press |
Triggered on long press. | GestureEvent |
gesture.mousewheel |
Triggered on mouse wheel scroll. | GestureEvent |
gesture.mousemove |
Triggered on mouse move. | GestureEvent |
gesture.momentum |
Triggered on inertia movement after pan. | GestureEvent |
gesture.fire |
Triggered when any gesture event fires. | GestureEvent |
手势事件详解及不同 Mode 下的默认行为见 Gesture。
| Event Name | Description | Payload |
|---|---|---|
mode.change |
Triggered when mode changes. | ModeChangeEvent |
state.change |
Triggered when state changes (frequent). | StateEvent |
camera.update |
Triggered when camera pose updates. | CameraEvent |
| Event Name | Description | Payload |
|---|---|---|
works.load |
Triggered when work data starts loading. | WorksEvent |
works.ready |
Triggered when work data is loaded and controller is ready. | WorksEvent |
models.load |
Triggered when models are loaded. | ModelSceneEvent |
models.refined |
Triggered when all models finish texture refinement. | ModelSceneEvent |
model.load |
Triggered when a single model geometry is loaded. | ModelEvent |
model.tileLoad |
Triggered when a 3D tile is loaded. | ModelTileEvent |
model.tileUnload |
Triggered when a 3D tile is unloaded. | ModelTileEvent |
model.changeShownFloor |
Triggered when floor visibility changes. | ModelEvent |
model.error |
Triggered when model loading fails. | ModelErrorEvent |
pano.prepare |
Triggered before switching to a new pano. ExtendableEvent, supports waitUntil. |
PanoPrepareEvent |
pano.arrived |
Triggered when arrival at a panorama node. | PanoEvent |
pano.moving |
Triggered during pano transition animation. | PanoEvent |
pano.error |
Triggered when pano loading or movement fails. | PanoEvent |
pano.texture.progress |
Triggered when panorama texture loading progresses. | PanoTextureEvent |
render |
Triggered after each render frame. | RenderEvent |
render.prepare |
Triggered before each render frame. | RenderEvent |
error |
Triggered on internal errors. | Error |
事件系统详解见 Event。手势事件详解见 Gesture。
pano.prepare的waitUntil/preventDefault用法见 Event - Event 对象。 模型生命周期事件见 Model 和 Load Progress。
Older events are still supported for compatibility but should be avoided in new code.
| Legacy Event | Recommended Replacement | Notes |
|---|---|---|
wantsTapGesture |
gesture.tap |
|
wantsPanGesture |
gesture.pan |
|
modelLoaded |
models.load |
|
initAnimationEnded |
mode.change |
Check payload for details |
// Recommended: Use the new event system
five.on('gesture.tap', (event) => {
console.log('User tapped at:', event);
});
// Legacy (Avoid):
// five.on('wantsTapGesture', (raycaster) => { ... });