@chocozhang/three-model-render 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +609 -0
- package/dist/camera/index.d.ts +133 -0
- package/dist/camera/index.js +291 -0
- package/dist/camera/index.js.map +1 -0
- package/dist/camera/index.mjs +265 -0
- package/dist/camera/index.mjs.map +1 -0
- package/dist/core/index.d.ts +102 -0
- package/dist/core/index.js +455 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/index.mjs +432 -0
- package/dist/core/index.mjs.map +1 -0
- package/dist/effect/index.d.ts +214 -0
- package/dist/effect/index.js +749 -0
- package/dist/effect/index.js.map +1 -0
- package/dist/effect/index.mjs +728 -0
- package/dist/effect/index.mjs.map +1 -0
- package/dist/index.d.ts +852 -0
- package/dist/index.js +3268 -0
- package/dist/index.js.map +1 -0
- package/dist/index.mjs +3223 -0
- package/dist/index.mjs.map +1 -0
- package/dist/interaction/index.d.ts +160 -0
- package/dist/interaction/index.js +661 -0
- package/dist/interaction/index.js.map +1 -0
- package/dist/interaction/index.mjs +637 -0
- package/dist/interaction/index.mjs.map +1 -0
- package/dist/loader/index.d.ts +175 -0
- package/dist/loader/index.js +786 -0
- package/dist/loader/index.js.map +1 -0
- package/dist/loader/index.mjs +758 -0
- package/dist/loader/index.mjs.map +1 -0
- package/dist/setup/index.d.ts +47 -0
- package/dist/setup/index.js +199 -0
- package/dist/setup/index.js.map +1 -0
- package/dist/setup/index.mjs +178 -0
- package/dist/setup/index.mjs.map +1 -0
- package/dist/ui/index.d.ts +36 -0
- package/dist/ui/index.js +292 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/ui/index.mjs +271 -0
- package/dist/ui/index.mjs.map +1 -0
- package/package.json +98 -0
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
import * as THREE from 'three';
|
|
2
|
+
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls';
|
|
3
|
+
|
|
4
|
+
interface FollowOptions {
|
|
5
|
+
duration?: number;
|
|
6
|
+
padding?: number;
|
|
7
|
+
minDistance?: number;
|
|
8
|
+
maxDistance?: number;
|
|
9
|
+
controls?: {
|
|
10
|
+
target?: THREE.Vector3;
|
|
11
|
+
update?: () => void;
|
|
12
|
+
} | null;
|
|
13
|
+
azimuth?: number;
|
|
14
|
+
elevation?: number;
|
|
15
|
+
easing?: 'linear' | 'easeInOut' | 'easeOut' | 'easeIn';
|
|
16
|
+
onProgress?: (progress: number) => void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 推荐角度枚举,便于快速选取常见视角
|
|
20
|
+
*/
|
|
21
|
+
declare const FOLLOW_ANGLES: {
|
|
22
|
+
/** 等距斜视(默认视角)- 适合建筑、机械设备展示 */
|
|
23
|
+
readonly ISOMETRIC: {
|
|
24
|
+
readonly azimuth: number;
|
|
25
|
+
readonly elevation: number;
|
|
26
|
+
};
|
|
27
|
+
/** 正前视角 - 适合正面展示、UI 对齐 */
|
|
28
|
+
readonly FRONT: {
|
|
29
|
+
readonly azimuth: 0;
|
|
30
|
+
readonly elevation: 0;
|
|
31
|
+
};
|
|
32
|
+
/** 右侧视角 - 适合机械剖面、侧视检查 */
|
|
33
|
+
readonly RIGHT: {
|
|
34
|
+
readonly azimuth: number;
|
|
35
|
+
readonly elevation: 0;
|
|
36
|
+
};
|
|
37
|
+
/** 左侧视角 */
|
|
38
|
+
readonly LEFT: {
|
|
39
|
+
readonly azimuth: number;
|
|
40
|
+
readonly elevation: 0;
|
|
41
|
+
};
|
|
42
|
+
/** 后视角 */
|
|
43
|
+
readonly BACK: {
|
|
44
|
+
readonly azimuth: number;
|
|
45
|
+
readonly elevation: 0;
|
|
46
|
+
};
|
|
47
|
+
/** 顶视图 - 适合地图、平面布局展示 */
|
|
48
|
+
readonly TOP: {
|
|
49
|
+
readonly azimuth: 0;
|
|
50
|
+
readonly elevation: number;
|
|
51
|
+
};
|
|
52
|
+
/** 低角度俯视 - 适合车辆、人物等近地物体 */
|
|
53
|
+
readonly LOW_ANGLE: {
|
|
54
|
+
readonly azimuth: number;
|
|
55
|
+
readonly elevation: number;
|
|
56
|
+
};
|
|
57
|
+
/** 高角度俯视 - 适合鸟瞰、全景浏览 */
|
|
58
|
+
readonly HIGH_ANGLE: {
|
|
59
|
+
readonly azimuth: number;
|
|
60
|
+
readonly elevation: number;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* 自动将相机移到目标的斜上角位置,并保证目标在可视范围内(平滑过渡)- 优化版
|
|
65
|
+
*
|
|
66
|
+
* ✨ 优化内容:
|
|
67
|
+
* - 支持多种缓动函数
|
|
68
|
+
* - 添加进度回调
|
|
69
|
+
* - 支持取消动画
|
|
70
|
+
* - WeakMap 跟踪防止泄漏
|
|
71
|
+
* - 完善错误处理
|
|
72
|
+
*/
|
|
73
|
+
declare function followModels(camera: THREE.Camera, targets: THREE.Object3D | THREE.Object3D[] | null | undefined, options?: FollowOptions): Promise<void>;
|
|
74
|
+
/**
|
|
75
|
+
* ✨ 取消相机的跟随动画
|
|
76
|
+
*/
|
|
77
|
+
declare function cancelFollow(camera: THREE.Camera): void;
|
|
78
|
+
|
|
79
|
+
/**
|
|
80
|
+
* 视角类型
|
|
81
|
+
*/
|
|
82
|
+
type ViewPosition = 'front' | 'back' | 'left' | 'right' | 'top' | 'bottom' | 'iso';
|
|
83
|
+
/**
|
|
84
|
+
* 视角配置选项
|
|
85
|
+
*/
|
|
86
|
+
interface SetViewOptions {
|
|
87
|
+
distanceFactor?: number;
|
|
88
|
+
duration?: number;
|
|
89
|
+
easing?: 'linear' | 'easeInOut' | 'easeOut' | 'easeIn';
|
|
90
|
+
onProgress?: (progress: number) => void;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 平滑切换相机到模型的最佳视角 - 优化版
|
|
94
|
+
*
|
|
95
|
+
* ✨ 优化内容:
|
|
96
|
+
* - 复用 followModels 逻辑,避免代码重复
|
|
97
|
+
* - 支持更多视角
|
|
98
|
+
* - 配置选项增强
|
|
99
|
+
* - 返回 Promise 支持链式调用
|
|
100
|
+
* - 支持取消动画
|
|
101
|
+
*
|
|
102
|
+
* @param camera THREE.PerspectiveCamera 相机实例
|
|
103
|
+
* @param controls OrbitControls 控制器实例
|
|
104
|
+
* @param targetObj THREE.Object3D 模型对象
|
|
105
|
+
* @param position 视角位置
|
|
106
|
+
* @param options 配置选项
|
|
107
|
+
* @returns Promise<void>
|
|
108
|
+
*/
|
|
109
|
+
declare function setView(camera: THREE.PerspectiveCamera, controls: OrbitControls, targetObj: THREE.Object3D, position?: ViewPosition, options?: SetViewOptions): Promise<void>;
|
|
110
|
+
/**
|
|
111
|
+
* ✨ 取消视角切换动画
|
|
112
|
+
*/
|
|
113
|
+
declare function cancelSetView(camera: THREE.PerspectiveCamera): void;
|
|
114
|
+
/**
|
|
115
|
+
* ✨ 预设视角快捷方法
|
|
116
|
+
*/
|
|
117
|
+
declare const ViewPresets: {
|
|
118
|
+
/**
|
|
119
|
+
* 前视图
|
|
120
|
+
*/
|
|
121
|
+
front: (camera: THREE.PerspectiveCamera, controls: OrbitControls, target: THREE.Object3D, options?: SetViewOptions) => Promise<void>;
|
|
122
|
+
/**
|
|
123
|
+
* 等距视图
|
|
124
|
+
*/
|
|
125
|
+
isometric: (camera: THREE.PerspectiveCamera, controls: OrbitControls, target: THREE.Object3D, options?: SetViewOptions) => Promise<void>;
|
|
126
|
+
/**
|
|
127
|
+
* 顶视图
|
|
128
|
+
*/
|
|
129
|
+
top: (camera: THREE.PerspectiveCamera, controls: OrbitControls, target: THREE.Object3D, options?: SetViewOptions) => Promise<void>;
|
|
130
|
+
};
|
|
131
|
+
|
|
132
|
+
export { FOLLOW_ANGLES, ViewPresets, cancelFollow, cancelSetView, followModels, setView };
|
|
133
|
+
export type { FollowOptions, SetViewOptions, ViewPosition };
|
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var THREE = require('three');
|
|
4
|
+
|
|
5
|
+
function _interopNamespaceDefault(e) {
|
|
6
|
+
var n = Object.create(null);
|
|
7
|
+
if (e) {
|
|
8
|
+
Object.keys(e).forEach(function (k) {
|
|
9
|
+
if (k !== 'default') {
|
|
10
|
+
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
11
|
+
Object.defineProperty(n, k, d.get ? d : {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
get: function () { return e[k]; }
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
n.default = e;
|
|
19
|
+
return Object.freeze(n);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
var THREE__namespace = /*#__PURE__*/_interopNamespaceDefault(THREE);
|
|
23
|
+
|
|
24
|
+
// src/utils/followModels.ts - 优化版
|
|
25
|
+
// ✨ 使用 WeakMap 跟踪动画,支持取消
|
|
26
|
+
const _animationMap = new WeakMap();
|
|
27
|
+
/**
|
|
28
|
+
* 推荐角度枚举,便于快速选取常见视角
|
|
29
|
+
*/
|
|
30
|
+
const FOLLOW_ANGLES = {
|
|
31
|
+
/** 等距斜视(默认视角)- 适合建筑、机械设备展示 */
|
|
32
|
+
ISOMETRIC: { azimuth: Math.PI / 4, elevation: Math.PI / 4 },
|
|
33
|
+
/** 正前视角 - 适合正面展示、UI 对齐 */
|
|
34
|
+
FRONT: { azimuth: 0, elevation: 0 },
|
|
35
|
+
/** 右侧视角 - 适合机械剖面、侧视检查 */
|
|
36
|
+
RIGHT: { azimuth: Math.PI / 2, elevation: 0 },
|
|
37
|
+
/** 左侧视角 */
|
|
38
|
+
LEFT: { azimuth: -Math.PI / 2, elevation: 0 },
|
|
39
|
+
/** 后视角 */
|
|
40
|
+
BACK: { azimuth: Math.PI, elevation: 0 },
|
|
41
|
+
/** 顶视图 - 适合地图、平面布局展示 */
|
|
42
|
+
TOP: { azimuth: 0, elevation: Math.PI / 2 },
|
|
43
|
+
/** 低角度俯视 - 适合车辆、人物等近地物体 */
|
|
44
|
+
LOW_ANGLE: { azimuth: Math.PI / 4, elevation: Math.PI / 6 },
|
|
45
|
+
/** 高角度俯视 - 适合鸟瞰、全景浏览 */
|
|
46
|
+
HIGH_ANGLE: { azimuth: Math.PI / 4, elevation: Math.PI / 3 }
|
|
47
|
+
};
|
|
48
|
+
/**
|
|
49
|
+
* 缓动函数集合
|
|
50
|
+
*/
|
|
51
|
+
const EASING_FUNCTIONS = {
|
|
52
|
+
linear: (t) => t,
|
|
53
|
+
easeInOut: (t) => t < 0.5 ? 2 * t * t : 1 - Math.pow(-2 * t + 2, 2) / 2,
|
|
54
|
+
easeOut: (t) => 1 - Math.pow(1 - t, 3),
|
|
55
|
+
easeIn: (t) => t * t * t
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* 自动将相机移到目标的斜上角位置,并保证目标在可视范围内(平滑过渡)- 优化版
|
|
59
|
+
*
|
|
60
|
+
* ✨ 优化内容:
|
|
61
|
+
* - 支持多种缓动函数
|
|
62
|
+
* - 添加进度回调
|
|
63
|
+
* - 支持取消动画
|
|
64
|
+
* - WeakMap 跟踪防止泄漏
|
|
65
|
+
* - 完善错误处理
|
|
66
|
+
*/
|
|
67
|
+
function followModels(camera, targets, options = {}) {
|
|
68
|
+
var _a, _b, _c, _d, _e, _f;
|
|
69
|
+
// ✨ 取消之前的动画
|
|
70
|
+
cancelFollow(camera);
|
|
71
|
+
// ✨ 边界检查
|
|
72
|
+
const arr = [];
|
|
73
|
+
if (!targets)
|
|
74
|
+
return Promise.resolve();
|
|
75
|
+
if (Array.isArray(targets))
|
|
76
|
+
arr.push(...targets.filter(Boolean));
|
|
77
|
+
else
|
|
78
|
+
arr.push(targets);
|
|
79
|
+
if (arr.length === 0) {
|
|
80
|
+
console.warn('followModels: 目标对象为空');
|
|
81
|
+
return Promise.resolve();
|
|
82
|
+
}
|
|
83
|
+
try {
|
|
84
|
+
const box = new THREE__namespace.Box3();
|
|
85
|
+
arr.forEach((o) => box.expandByObject(o));
|
|
86
|
+
// ✨ 检查包围盒有效性
|
|
87
|
+
if (!isFinite(box.min.x) || !isFinite(box.max.x)) {
|
|
88
|
+
console.warn('followModels: 包围盒计算失败');
|
|
89
|
+
return Promise.resolve();
|
|
90
|
+
}
|
|
91
|
+
const sphere = new THREE__namespace.Sphere();
|
|
92
|
+
box.getBoundingSphere(sphere);
|
|
93
|
+
const center = sphere.center.clone();
|
|
94
|
+
const radiusBase = Math.max(0.001, sphere.radius);
|
|
95
|
+
const duration = (_a = options.duration) !== null && _a !== void 0 ? _a : 700;
|
|
96
|
+
const padding = (_b = options.padding) !== null && _b !== void 0 ? _b : 1.0;
|
|
97
|
+
const minDistance = options.minDistance;
|
|
98
|
+
const maxDistance = options.maxDistance;
|
|
99
|
+
const controls = (_c = options.controls) !== null && _c !== void 0 ? _c : null;
|
|
100
|
+
const azimuth = (_d = options.azimuth) !== null && _d !== void 0 ? _d : Math.PI / 4;
|
|
101
|
+
const elevation = (_e = options.elevation) !== null && _e !== void 0 ? _e : Math.PI / 4;
|
|
102
|
+
const easing = (_f = options.easing) !== null && _f !== void 0 ? _f : 'easeOut';
|
|
103
|
+
const onProgress = options.onProgress;
|
|
104
|
+
// ✨ 获取缓动函数
|
|
105
|
+
const easingFn = EASING_FUNCTIONS[easing] || EASING_FUNCTIONS.easeOut;
|
|
106
|
+
let distance = 10;
|
|
107
|
+
if (camera.isPerspectiveCamera) {
|
|
108
|
+
const cam = camera;
|
|
109
|
+
const halfV = THREE__namespace.MathUtils.degToRad(cam.fov * 0.5);
|
|
110
|
+
const halfH = Math.atan(Math.tan(halfV) * cam.aspect);
|
|
111
|
+
const halfMin = Math.min(halfV, halfH);
|
|
112
|
+
distance = (radiusBase * padding) / Math.sin(halfMin);
|
|
113
|
+
if (minDistance != null)
|
|
114
|
+
distance = Math.max(distance, minDistance);
|
|
115
|
+
if (maxDistance != null)
|
|
116
|
+
distance = Math.min(distance, maxDistance);
|
|
117
|
+
}
|
|
118
|
+
else if (camera.isOrthographicCamera) {
|
|
119
|
+
distance = camera.position.distanceTo(center);
|
|
120
|
+
}
|
|
121
|
+
else {
|
|
122
|
+
distance = camera.position.distanceTo(center);
|
|
123
|
+
}
|
|
124
|
+
// 根据 azimuth / elevation 计算方向
|
|
125
|
+
const hx = Math.sin(azimuth);
|
|
126
|
+
const hz = Math.cos(azimuth);
|
|
127
|
+
const dir = new THREE__namespace.Vector3(hx * Math.cos(elevation), Math.sin(elevation), hz * Math.cos(elevation)).normalize();
|
|
128
|
+
const desiredPos = center.clone().add(dir.multiplyScalar(distance));
|
|
129
|
+
const startPos = camera.position.clone();
|
|
130
|
+
const startTarget = controls && controls.target
|
|
131
|
+
? controls.target.clone()
|
|
132
|
+
: camera.position.clone().add(camera.getWorldDirection(new THREE__namespace.Vector3()).multiplyScalar(1));
|
|
133
|
+
const endTarget = center.clone();
|
|
134
|
+
const startTime = performance.now();
|
|
135
|
+
return new Promise((resolve) => {
|
|
136
|
+
const step = (now) => {
|
|
137
|
+
var _a;
|
|
138
|
+
const elapsed = now - startTime;
|
|
139
|
+
const t = Math.min(1, duration > 0 ? elapsed / duration : 1);
|
|
140
|
+
const k = easingFn(t);
|
|
141
|
+
camera.position.lerpVectors(startPos, desiredPos, k);
|
|
142
|
+
if (controls && controls.target) {
|
|
143
|
+
const newTarget = new THREE__namespace.Vector3().lerpVectors(startTarget, endTarget, k);
|
|
144
|
+
controls.target.copy(newTarget);
|
|
145
|
+
if (typeof controls.update === 'function')
|
|
146
|
+
controls.update();
|
|
147
|
+
}
|
|
148
|
+
else {
|
|
149
|
+
camera.lookAt(endTarget);
|
|
150
|
+
}
|
|
151
|
+
(_a = camera.updateProjectionMatrix) === null || _a === void 0 ? void 0 : _a.call(camera);
|
|
152
|
+
// ✨ 调用进度回调
|
|
153
|
+
if (onProgress) {
|
|
154
|
+
try {
|
|
155
|
+
onProgress(t);
|
|
156
|
+
}
|
|
157
|
+
catch (error) {
|
|
158
|
+
console.error('followModels: 进度回调错误', error);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if (t < 1) {
|
|
162
|
+
const rafId = requestAnimationFrame(step);
|
|
163
|
+
_animationMap.set(camera, rafId);
|
|
164
|
+
}
|
|
165
|
+
else {
|
|
166
|
+
_animationMap.delete(camera);
|
|
167
|
+
camera.position.copy(desiredPos);
|
|
168
|
+
if (controls && controls.target) {
|
|
169
|
+
controls.target.copy(endTarget);
|
|
170
|
+
if (typeof controls.update === 'function')
|
|
171
|
+
controls.update();
|
|
172
|
+
}
|
|
173
|
+
else {
|
|
174
|
+
camera.lookAt(endTarget);
|
|
175
|
+
}
|
|
176
|
+
resolve();
|
|
177
|
+
}
|
|
178
|
+
};
|
|
179
|
+
const rafId = requestAnimationFrame(step);
|
|
180
|
+
_animationMap.set(camera, rafId);
|
|
181
|
+
});
|
|
182
|
+
}
|
|
183
|
+
catch (error) {
|
|
184
|
+
console.error('followModels: 执行失败', error);
|
|
185
|
+
return Promise.reject(error);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* ✨ 取消相机的跟随动画
|
|
190
|
+
*/
|
|
191
|
+
function cancelFollow(camera) {
|
|
192
|
+
const rafId = _animationMap.get(camera);
|
|
193
|
+
if (rafId !== undefined) {
|
|
194
|
+
cancelAnimationFrame(rafId);
|
|
195
|
+
_animationMap.delete(camera);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
// src/utils/setView.ts - 优化版
|
|
200
|
+
/**
|
|
201
|
+
* 平滑切换相机到模型的最佳视角 - 优化版
|
|
202
|
+
*
|
|
203
|
+
* ✨ 优化内容:
|
|
204
|
+
* - 复用 followModels 逻辑,避免代码重复
|
|
205
|
+
* - 支持更多视角
|
|
206
|
+
* - 配置选项增强
|
|
207
|
+
* - 返回 Promise 支持链式调用
|
|
208
|
+
* - 支持取消动画
|
|
209
|
+
*
|
|
210
|
+
* @param camera THREE.PerspectiveCamera 相机实例
|
|
211
|
+
* @param controls OrbitControls 控制器实例
|
|
212
|
+
* @param targetObj THREE.Object3D 模型对象
|
|
213
|
+
* @param position 视角位置
|
|
214
|
+
* @param options 配置选项
|
|
215
|
+
* @returns Promise<void>
|
|
216
|
+
*/
|
|
217
|
+
function setView(camera, controls, targetObj, position = 'front', options = {}) {
|
|
218
|
+
const { distanceFactor = 0.8, duration = 1000, easing = 'easeInOut', onProgress } = options;
|
|
219
|
+
// ✨ 边界检查
|
|
220
|
+
if (!targetObj) {
|
|
221
|
+
console.warn('setView: 目标对象为空');
|
|
222
|
+
return Promise.reject(new Error('Target object is required'));
|
|
223
|
+
}
|
|
224
|
+
try {
|
|
225
|
+
// 计算包围盒
|
|
226
|
+
const box = new THREE__namespace.Box3().setFromObject(targetObj);
|
|
227
|
+
if (!isFinite(box.min.x)) {
|
|
228
|
+
console.warn('setView: 包围盒计算失败');
|
|
229
|
+
return Promise.reject(new Error('Invalid bounding box'));
|
|
230
|
+
}
|
|
231
|
+
const center = box.getCenter(new THREE__namespace.Vector3());
|
|
232
|
+
const size = box.getSize(new THREE__namespace.Vector3());
|
|
233
|
+
const maxSize = Math.max(size.x, size.y, size.z);
|
|
234
|
+
// ✨ 使用映射表简化视角计算
|
|
235
|
+
const viewAngles = {
|
|
236
|
+
'front': { azimuth: 0, elevation: 0 },
|
|
237
|
+
'back': { azimuth: Math.PI, elevation: 0 },
|
|
238
|
+
'left': { azimuth: -Math.PI / 2, elevation: 0 },
|
|
239
|
+
'right': { azimuth: Math.PI / 2, elevation: 0 },
|
|
240
|
+
'top': { azimuth: 0, elevation: Math.PI / 2 },
|
|
241
|
+
'bottom': { azimuth: 0, elevation: -Math.PI / 2 },
|
|
242
|
+
'iso': { azimuth: Math.PI / 4, elevation: Math.PI / 4 }
|
|
243
|
+
};
|
|
244
|
+
const angle = viewAngles[position] || viewAngles.front;
|
|
245
|
+
// ✨ 复用 followModels,避免代码重复
|
|
246
|
+
return followModels(camera, targetObj, {
|
|
247
|
+
duration,
|
|
248
|
+
padding: distanceFactor,
|
|
249
|
+
controls,
|
|
250
|
+
azimuth: angle.azimuth,
|
|
251
|
+
elevation: angle.elevation,
|
|
252
|
+
easing,
|
|
253
|
+
onProgress
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
catch (error) {
|
|
257
|
+
console.error('setView: 执行失败', error);
|
|
258
|
+
return Promise.reject(error);
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* ✨ 取消视角切换动画
|
|
263
|
+
*/
|
|
264
|
+
function cancelSetView(camera) {
|
|
265
|
+
cancelFollow(camera);
|
|
266
|
+
}
|
|
267
|
+
/**
|
|
268
|
+
* ✨ 预设视角快捷方法
|
|
269
|
+
*/
|
|
270
|
+
const ViewPresets = {
|
|
271
|
+
/**
|
|
272
|
+
* 前视图
|
|
273
|
+
*/
|
|
274
|
+
front: (camera, controls, target, options) => setView(camera, controls, target, 'front', options),
|
|
275
|
+
/**
|
|
276
|
+
* 等距视图
|
|
277
|
+
*/
|
|
278
|
+
isometric: (camera, controls, target, options) => setView(camera, controls, target, 'iso', options),
|
|
279
|
+
/**
|
|
280
|
+
* 顶视图
|
|
281
|
+
*/
|
|
282
|
+
top: (camera, controls, target, options) => setView(camera, controls, target, 'top', options)
|
|
283
|
+
};
|
|
284
|
+
|
|
285
|
+
exports.FOLLOW_ANGLES = FOLLOW_ANGLES;
|
|
286
|
+
exports.ViewPresets = ViewPresets;
|
|
287
|
+
exports.cancelFollow = cancelFollow;
|
|
288
|
+
exports.cancelSetView = cancelSetView;
|
|
289
|
+
exports.followModels = followModels;
|
|
290
|
+
exports.setView = setView;
|
|
291
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/camera/followModels.ts","../../src/camera/setView.ts"],"sourcesContent":[null,null],"names":["THREE"],"mappings":"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"}
|