@realsee/five
Version:
Realsee Renderer SDK
145 lines (107 loc) • 5.04 kB
Markdown
# 全景切换效果 (Move Pano Effect)
- **Summary**: 介绍 `moveToPano` 方法中 `effect` 和 `effectEasing` 参数的作用及使用方式,用于控制全景点位切换时的视觉过渡效果。
- **Schema**: `MovePanoEffect` (枚举字符串), `MovePanoOptions` (接口).
- **Concepts**: Effect Modes (切换模式), Easing Function (缓动函数), Blend Ratio (混合比例).
- **Configuration**: `moveToPano` 的 `options` 参数.
- **Examples**: 基础切换、自定义缓动函数.
## Schema
### MovePanoEffect
> **Definition**: [MovePanoEffect](../../five/types/movePanoEffect.d.ts)
`effect` 参数定义了全景切换的动画模式。
```typescript
type MovePanoEffect =
| "fly" // 飞行效果 (默认):模拟相机在空间中的移动
| "instant" // 瞬间切换:无动画,直接跳变
| "fade" // 淡入淡出:原场景渐隐,新场景渐现 (位置保持不变)
| "montage" // 蒙太奇:通过黑屏过渡 (渐变穿插到黑屏再亮起)
| "spread" // 扩散:新场景从中心向四周扩散
| "zoomin" // 放大:新场景从小放大覆盖
| "zoomout" // 缩小:原场景缩小消失
| "model"; // 模型过渡:切换过程中展示 3D 模型结构
```
### effectEasing
`effectEasing` 是一个函数,用于控制前后全景图的混合进度。
```typescript
// 输入 0-1 的进度值,返回 0-1 的混合比例
type EffectEasing = (progress: number) => number;
```
* **输入 (Input)**: `progress` (0 到 1),表示动画的时间进度。
* **输出 (Output)**: 混合比例 (0 到 1)。
* `0`: 完全显示前一个全景图。
* `1`: 完全显示后一个全景图。
* `0.5`: 两个全景图各显示 50%。
## Concepts
### Effect Modes (切换模式)
* **Fly (飞行)**: 最常用的模式。相机在三维空间中真实移动,给用户强烈的空间位置感。适用于相邻或视线通透的点位切换。
* **Fade (渐变)**: 保持相机位置不变,仅改变图像透明度。适用于距离较远、不通视或空间关系不明确的点位切换,避免产生"穿墙"的违和感。
* **Model (模型)**: 在切换过程中淡入模型的线框或白模,强调空间结构。
### Easing Function (缓动函数)
默认情况下,混合比例与时间进度是线性的 (`y = x`)。通过自定义 `effectEasing`,可以实现非线性的混合效果。例如:
* **快速切入**: 开始时混合很快,后面变慢。
* **延迟切入**: 开始时保持原图较长时间,最后快速切换到新图。
* **特殊场景**: 如“地面-天空”切换,可能希望在特定的时间点才开始显示新图。
## Examples
### 1. 基础用法 (Basic Usage)
使用不同的 `effect` 进行切换。
```typescript
// 1. 飞行模式 (默认)
five.moveToPano(1, {
effect: 'fly',
duration: 1500
});
// 2. 瞬间切换 (无动画)
five.moveToPano(2, {
effect: 'instant'
});
// 3. 淡入淡出 (适用于远距离切换)
five.moveToPano(10, {
effect: 'fade',
duration: 1000
});
```
### 2. 自定义缓动 (Custom Easing)
使用 `effectEasing` 控制混合节奏。
```typescript
// 示例:Ease-In-Quad (先慢后快)
function easeInQuad(x: number): number {
return x * x;
}
five.moveToPano(5, {
effect: 'fly',
duration: 2000,
// 自定义混合曲线
effectEasing: easeInQuad
});
```
### 3. 高级缓动控制 (Advanced Easing)
在某些特殊场景(如从地面点切换到航拍点),我们可能希望前 80% 的时间都显示地面点,最后 20% 才快速过渡到航拍图。
```typescript
five.moveToPano(aerialPanoIndex, {
effect: 'fly',
duration: 3000,
effectEasing: (progress) => {
// 0 - 0.8 期间返回 0 (显示原图)
// 0.8 - 1.0 期间线性过渡到 1
if (progress < 0.8) return 0;
return (progress - 0.8) / 0.2;
}
});
```
## Configuration
`moveToPano` 的第二个参数 `options` 支持以下配置:
| 参数 | 类型 | 说明 | 默认值 |
| :--- | :--- | :--- | :--- |
| `effect` | `MovePanoEffect` | 切换效果模式 | `'fly'` |
| `effectEasing` | `(p: number) => number` | 图片混合缓动函数 | `p => p` (线性) |
| `duration` | `number` | 动画耗时 (ms) | 根据距离自动计算 |
## Common Pitfalls
1. **Effect 适用性**: `fly` 效果虽然炫酷,但在穿过墙体或障碍物时可能会导致视觉上的“穿帮”。此时应优先考虑使用 `fade` 或 `model`。
2. **Easing 范围**: `effectEasing` 函数的返回值应严格控制在 `0` 到 `1` 之间。超出此范围可能会导致渲染异常(如过曝或反色)。
3. **Duration**: 如果 `duration` 设置为 `0`,无论 `effect` 是什么,效果都等同于 `instant`。
## Related
* [Camera Animation](./camera-animation.md): 更多关于相机控制的说明。
* [Five](./five.md): Five 实例及 API。
---
```yaml
tags: [全景切换, 走点效果, 淡入淡出, 飞行, 过渡动画, 缓动, move-pano-effect, camera-animation, pano-switch, fly, fade, easing]
```