@realsee/five
Version:
Realsee Renderer SDK
346 lines (250 loc) • 13.5 kB
Markdown
# Five SDK API Reference
This document provides a summary of the core API for the Five SDK, designed to be easily understood by AI assistants.
## Core Class: `Five`
The `Five` class is the main entry point for the SDK. It manages the rendering, state, and interaction of the 3D scene.
### Constructor
```typescript
const five = new Five(initArgs?: FiveInitArgs);
```
### Properties
| 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. |
### Static Properties
| Property | Type | Description |
| :--- | :--- | :--- |
| `Five.Mode` | `Enum` | Available modes: `Panorama`, `Model`, `Floorplan`, `Topview`, `Mapview`, `VRPanorama`, `XRPanorama`. |
## Initialization Configuration (`FiveInitArgs`)
Configuration object passed to the `Five` constructor.
```typescript
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](./features/mode.md#configuration)。
> 图片加载策略见 [ImageOptions](./features/image-options.md)。
> 请求代理见 [Request Proxy](./features/request-proxy.md)。
> 完整初始化参数见 [Five](./features/five.md) 和 [Parameter](./features/parameter.md)。
## Core Methods
### `load(work, state?, options?)`
Loads a "Work" (dataset) into the Five instance.
- **work**: The data object (`LooseWork` or `Work`) containing scene information.
- **state**: Initial state overrides. `"inherit"`, `"initial"`, or a `State` object.
- **options**: Loading options (e.g., transition duration, `mode: "add" | "replace"`).
> 详见 [Work](./features/work.md) 和 [Multi-Work](./features/multi-work.md)。
### `appendTo(element, size?)`
Mounts the Five canvas to a DOM element.
- **element**: HTMLElement to append to.
- **size**: Optional `{ width, height }`. Defaults to element size.
### `setState(state, immediately?, userAction?)`
Updates the current state (position, mode, etc.).
- **state**: Partial `State` object to merge.
- **immediately**: If `true`, skips animation.
- **userAction**: Marks the change as triggered by user interaction.
> 详见 [State](./features/state.md)。
### `changeMode(mode, state?, options?)`
Switches the viewing mode (e.g., from `Panorama` to `Model`).
- **mode**: Target `Five.Mode`.
- **state**: Target state after mode change.
- **options**: Animation duration and effect.
> 详见 [Mode](./features/mode.md)。
### `moveToPano(panoIndex, options?)`
Moves to a specific panorama spot.
- **panoIndex**: Index of the panorama.
- **options**: `{ effect?: MovePanoEffect, duration?: number, effectEasing?: Function }`.
> 详见 [Move Pano Effect](./features/move-pano-effect.md) 和 [Camera Animation](./features/camera-animation.md)。
### `updateCamera(pose, duration, userAction?)`
Animates the camera to a target pose without changing pano index.
- **pose**: Partial `Pose` object (longitude, latitude, fov, etc.).
- **duration**: Animation duration in ms.
- **returns**: `Promise<void>` (rejects if interrupted).
> 详见 [Camera Animation](./features/camera-animation.md)。
### `ready(args?)`
Returns a Promise that resolves when Five is stable (state synced, model loaded, optionally tiles loaded).
- **args**: `{ 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.
- **vector**: `THREE.Vector3` (World Space).
- **testModel**: `boolean` (default `false`). If `true`, checks for occlusion.
- **returns**: `THREE.Vector2` (Screen Space, px) or `null`.
> 详见 [Screen & Space Projection](./features/screen-project.md)。
### `getPixels(options)`
Get pixel data from the renderer (e.g. for color picking or magnifier).
- **options**: `{ x, y, width, height, pixelRatio?, flipY?, buffer?, skipPanorama?, helperVisible? }`
- **returns**: `Uint8Array` (RGBA data).
> 详见 [Get Screen Pixels](./features/get-screen-pixels.md)。
### `intersectRaycaster(raycaster)`
(On `five.model`) Performs raycasting against the scene models.
- **raycaster**: `THREE.Raycaster` (supports extended props: `firstHitOnly`, `hitFilter`, `sortByDistance`, `floorIndex`).
- **returns**: `THREE.Intersection[]` (extended with `tile`, `viewLayer`, `model` fields).
> 详见 [Raycast](./features/raycast.md)。
### `addPass(pass)` / `removePass(pass)`
Add or remove a post-processing pass to/from the rendering chain.
- **pass**: `FivePass` instance (e.g. `GaussianBlurPass`, `FlowingLight2DPass`).
> 详见 [Postprocessing](./features/postprocessing.md)。
### `updateConfiguration(config)`
Dynamically update mode configurations after initialization (e.g., panorama, mapview settings).
> 详见 [Mode](./features/mode.md#动态修改配置-update-configuration)。
### `dispose()`
Destroys the Five instance and releases resources.
## State Management
The `State` interface defines the complete status of the Five instance at any moment.
```typescript
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
}
```
## Data Structures
> 以下为核心数据结构摘要。完整定义见 [Work](./features/work.md)、[State](./features/state.md)、[Model](./features/model.md)。
### `Work`
The main data object containing the scene description.
```typescript
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.
```typescript
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;
}
```
## Events
`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`).
### Recommended Events (Modern)
These events follow a standard naming convention and provide typed event objects.
#### Interaction & Gestures
| 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](./features/gesture.md)。
#### State & Mode
| 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` |
> 状态管理详见 [State](./features/state.md),模式切换详见 [Mode](./features/mode.md)。
#### Lifecycle & Resources
| 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`. Event includes `options` (modifiable to affect transition), `prevMode`, `prevPano`, and `pano`. | `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](./features/event.md)。手势事件详解见 [Gesture](./features/gesture.md)。
> `pano.prepare` 的 `waitUntil` / `preventDefault` 用法见 [Event - Event 对象](./features/event.md#event-对象)。
> 模型生命周期事件见 [Model](./features/model.md#events) 和 [Load Progress](./features/load-progress.md)。
### Legacy Events (Deprecated)
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 |
### Usage Example
```typescript
// Recommended: Use the new event system
five.on('gesture.tap', (event) => {
console.log('User tapped at:', event);
});
// Legacy (Avoid):
// five.on('wantsTapGesture', (raycaster) => { ... });
```