UNPKG

@realsee/five

Version:

Realsee Renderer SDK

132 lines (107 loc) • 5.07 kB
# Panorama Tile - **Summary**: 全景模式下的瓦片加载策略,支持多分辨率层级(LOD)和视锥体裁剪,以优化全景浏览的性能和清晰度。 - **Schema**: WorkTile 接口及相关配置参数。 - **Concepts**: LOD (Level of Detail), Frustum Culling, Tile URL Generation. - **Configuration**: tileLevelForFov, tileMaxRequest, imageOptions. - **Examples**: 瓦片数据结构查看与 Five 初始化配置。 ## Schema > **Definition**: [WorkImage](../../five/work/work.d.ts), [ImageOptions](../../five/types/imageOptions.d.ts) ### WorkObserver.images 点位全景图数据结构,包含瓦片列表。 ```typescript interface WorkImage { /** 分辨率列表 */ sizeList: readonly number[]; /** 瓦片信息列表,按 level 排序 */ tiles: readonly WorkTile[]; // ... 其他基础图片 URL } ``` ### ImageOptions 全景图及瓦片的图片处理配置。 ```typescript interface ImageOptions { /** 图片尺寸参数 (例如 512, 1024...) */ size?: number; /** 图片质量参数 (0-100) */ quality?: number; /** 图片格式参数 */ format?: "jpg" | "jpeg" | "png" | "heif" | "heic" | "webp" | "avif"; /** URL 转换函数 */ transform?: (url: string, options: ImageURLOptions) => string; } ``` ## Concepts ### Tile Parsing (瓦片解析) 在 `Five` 加载 `Work` 数据时,`WorkParser` 会解析 `panorama.size_list` (或 `panorama.tiles`) 字段。 - **Level 计算**: `level = log2(size / 512)`。 - **URL 生成**: - 如果 `size > baseSize` (通常是初始全景图大小),URL 中的 `/cube_{size}/` 部分会被动态替换(通过 `replaceImageSize` 函数)。 - 如果 `size <= baseSize`,直接使用基础全景图 URL,并设置 `scale`。 - **排序**: 解析后的 `tiles` 数组会按 `level` 升序排列。 ### sizeList - **类型**: `readonly number[]` - **说明**: 包含所有可用的分辨率(以像素为单位)。 - **示例**: `[2048, 6144]` 表示该点位全景图有两个层级,分别是 2048px 和 6144px。 - **图片路径**: 每个层级的图片路径都是 `cube_{size}`,`{size}` 是层级分辨率,必须与 `sizeList` 中的值对应。并必须存在 2048px 层级的图片。 ### Level of Detail (LOD) & Loading Strategy `PanoramaController` 使用 `Tiling` 类来管理瓦片加载: - **LOD 选择**: 根据当前的视场角 (`FOV`) 和视图大小 (`viewSize`),计算所需的最佳瓦片层级。默认策略会优先保证画面清晰度,同时考虑网络开销。 - **视锥体裁剪 (Frustum Culling)**: 仅加载当前相机视锥体可见范围内的瓦片面。 - **并发控制**: 通过 `tileMaxRequest` 限制同时进行的网络请求数量,避免阻塞。 ## Configuration 在初始化 `Five` 时,可以通过 `panorama` 配置参数来配置瓦片加载行为。 | Parameter | Type | Default | Description | | :--- | :--- | :--- | :--- | | `tileLevelForFov` | `(fov: number, viewSize: Vector2) => number` \| `false` | `undefined` | 自定义函数,用于根据当前 FOV 和视图尺寸决定加载哪个层级的瓦片。返回 `level` 数值。如果设置为 `false`,则禁用动态瓦片加载。默认使用内部策略。 | | `tileMaxRequest` | `number` | `3` | 最大的瓦片图片并发请求数。增加此值可能加快加载速度,但也可能导致网络拥塞。 | | `imageOptions` | `ImageOptions` | `undefined` | 全景图及瓦片的图片处理配置。可用于全局控制图片的加载格式(如强制使用 WebP)、质量压缩比例或通过 `transform` 函数自定义图片 URL。 | ## Examples ### 查看瓦片数据结构 ```typescript import { Five } from "@realsee/five"; const five = new Five(); five.on("loaded", () => { const observer = five.work.observers[0]; if (observer && observer.images && observer.images.tiles) { console.log("Available Tiles:", observer.images.tiles); observer.images.tiles.forEach(tile => { console.log(`Level: ${tile.level}, Size: ${tile.size}, Scale: ${tile.scale}`); }); } }); ``` ### 配置瓦片加载策略与图片参数 ```typescript import { Five } from "@realsee/five"; const five = new Five({ // 自定义瓦片层级选择策略 tileLevelForFov: (fov, viewSize) => { // 简单示例:FOV 小于 60 度时强制使用 Level 2,否则使用 Level 1 if (fov < 60) { return 2; } return 1; }, // 限制并发请求数 tileMaxRequest: 6, // 图片加载配置 imageOptions: { // 强制请求 WebP 格式的图片 format: "webp", // 图片质量设置为 80% quality: 80, // (可选) 自定义 URL 转换逻辑 // transform: (url, options) => { // return url + `?x-oss-process=image/format,webp/quality,q_80`; // } } }); ``` ## Related - [Mode](./mode.md): 了解不同模态下 Work 数据的表现。 - [ImageOptions](./image-options.md): 了解图片加载配置选项。 --- ```yaml tags: [全景瓦片, 高清全景, 分片加载, 瓦片, 全景图, 分辨率, 按需加载, pano-tile, observer, LOD, tile] ```