three-editor-ai 0.0.0-stage → 0.0.2
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/declare/addons.d.ts +88 -0
- package/declare/component.d.ts +158 -0
- package/declare/events.d.ts +102 -0
- package/declare/index.d.ts +17 -0
- package/declare/main.d.ts +287 -0
- package/declare/modules.d.ts +593 -0
- package/dist/index.js +10774 -0
- package/index.d.ts +31 -0
- package/package.json +41 -5
- package/README.md +0 -3
|
@@ -0,0 +1,593 @@
|
|
|
1
|
+
import type * as THREE from "three";
|
|
2
|
+
import type { TransformControls } from "three/examples/jsm/controls/TransformControls.js";
|
|
3
|
+
import type { EffectComposer } from "three/examples/jsm/postprocessing/EffectComposer.js";
|
|
4
|
+
import type { Pass } from "three/examples/jsm/postprocessing/Pass.js";
|
|
5
|
+
import type { CSS2DRenderer } from "three/examples/jsm/renderers/CSS2DRenderer.js";
|
|
6
|
+
import type { CSS3DRenderer } from "three/examples/jsm/renderers/CSS3DRenderer.js";
|
|
7
|
+
import type Stats from "three/examples/jsm/libs/stats.module.js";
|
|
8
|
+
import type { GUI } from "lil-gui";
|
|
9
|
+
import type { Vector3Like } from "./main";
|
|
10
|
+
import type { EditorEventApi } from "./events";
|
|
11
|
+
import type { ComponentMetadata } from "./component";
|
|
12
|
+
|
|
13
|
+
/* ------------------------------------------------------------------ *
|
|
14
|
+
* 场景
|
|
15
|
+
* ------------------------------------------------------------------ */
|
|
16
|
+
|
|
17
|
+
/** 帧循环回调,delta / elapsed 为帧间隔 / 累计时间(秒) */
|
|
18
|
+
export type LoopRenderFn = (delta: number, elapsed: number) => void;
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* `THREE.Scene` 的编辑器扩展。
|
|
22
|
+
* `add` / `remove` 被改写:完成后经 `emit` 触发 `scene-add` / `scene-remove`。
|
|
23
|
+
* `remove` 会解开变换控制、连带移除克隆,并释放非克隆体资源。
|
|
24
|
+
* 组件根移除时由 cores 在 `scene-remove` 同步阶段发出 `component-remove`(含组件原型)。
|
|
25
|
+
*/
|
|
26
|
+
export interface EditorScene extends THREE.Scene {
|
|
27
|
+
/** 与编辑器 `emit` 为同一函数 */
|
|
28
|
+
emit: EditorEventApi["emit"];
|
|
29
|
+
/** 默认射线对象,`layers.enableAll()` 已开启 */
|
|
30
|
+
raycaster: THREE.Raycaster;
|
|
31
|
+
|
|
32
|
+
/** 场景上的变换控制器引用,由 `transformControls` 注入 */
|
|
33
|
+
transformControls: EditorTransformControls;
|
|
34
|
+
|
|
35
|
+
/** 每帧执行的回调列表 */
|
|
36
|
+
COMMON_UPDATE_LIST: LoopRenderFn[];
|
|
37
|
+
|
|
38
|
+
/**
|
|
39
|
+
* 环境贴图变化时触发的回调表。
|
|
40
|
+
* key 为材质或模型等宿主,同 key 覆盖不重复。
|
|
41
|
+
*/
|
|
42
|
+
envMapChangeUseList: Map<unknown, () => void>;
|
|
43
|
+
|
|
44
|
+
/** 是否启用环境贴图,赋值时同步 `scene.environment` */
|
|
45
|
+
environmentEnabled: boolean;
|
|
46
|
+
|
|
47
|
+
/** 环境贴图。未设置时为 `undefined`,`resetEnv` 后为 `null` */
|
|
48
|
+
envBackground: THREE.CubeTexture | null | undefined;
|
|
49
|
+
|
|
50
|
+
/** 环境贴图地址。仅 `setEnvBackground` 写入;`resetEnv` 不清除 */
|
|
51
|
+
envBackgroundUrls?: string[] | null;
|
|
52
|
+
|
|
53
|
+
/** 天空盒地址。仅 `setSceneBackground` 写入;`resetEnv` 不清除 */
|
|
54
|
+
backgroundUrls?: string[] | null;
|
|
55
|
+
|
|
56
|
+
/** 天空盒贴图加载完成回调 */
|
|
57
|
+
backgroundLoadCallback?: (texture: THREE.CubeTexture) => void;
|
|
58
|
+
|
|
59
|
+
/** 添加到场景并立即挂到变换控制器上 */
|
|
60
|
+
attach_add(object: THREE.Object3D): void;
|
|
61
|
+
|
|
62
|
+
/** 清空帧列表、雾、除控制器与相机外的所有子物体,并重置环境 */
|
|
63
|
+
reset(): void;
|
|
64
|
+
|
|
65
|
+
/** 执行一帧,由内部渲染循环调用 */
|
|
66
|
+
update(delta: number, elapsed: number): void;
|
|
67
|
+
|
|
68
|
+
/** 注册每帧回调,重复注册同一函数时替换 */
|
|
69
|
+
addLoopRender(fn: LoopRenderFn): void;
|
|
70
|
+
|
|
71
|
+
/** 移除每帧回调 */
|
|
72
|
+
removeLoopRender(fn: LoopRenderFn): void;
|
|
73
|
+
|
|
74
|
+
/** 设置天空盒,`urls` 为正负 XYZ 六个面的贴图地址 */
|
|
75
|
+
setSceneBackground(urls: string[]): void;
|
|
76
|
+
|
|
77
|
+
/** 设置环境贴图,`urls` 为正负 XYZ 六个面的贴图地址 */
|
|
78
|
+
setEnvBackground(urls: string[]): void;
|
|
79
|
+
|
|
80
|
+
/** 释放并清空天空盒与环境贴图对象;`backgroundUrls` / `envBackgroundUrls` 保留 */
|
|
81
|
+
resetEnv(): void;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/** `THREE.PerspectiveCamera`,初始位置 (10, 10, 10) */
|
|
85
|
+
export interface EditorCamera extends THREE.PerspectiveCamera {
|
|
86
|
+
/** 依据容器尺寸重算 aspect 并更新投影矩阵 */
|
|
87
|
+
resize(): void;
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
/** 渲染序列中的一项,可开关以跳过对应的每帧逻辑 */
|
|
91
|
+
export interface RenderListEntry {
|
|
92
|
+
name: string;
|
|
93
|
+
|
|
94
|
+
/** delta / elapsed 为帧间隔 / 累计时间(秒) */
|
|
95
|
+
fn: (delta: number, elapsed: number) => void;
|
|
96
|
+
|
|
97
|
+
enabled: boolean;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
/** `THREE.WebGLRenderer` 的编辑器扩展 */
|
|
101
|
+
export interface EditorRenderer extends THREE.WebGLRenderer {
|
|
102
|
+
/** 渲染序列配置,修改 `enabled` 后需调用 `refreshRenderList()` 生效 */
|
|
103
|
+
renderListCompare: RenderListEntry[];
|
|
104
|
+
|
|
105
|
+
/** 依据 `renderListCompare` 的 enabled 状态重建实际渲染序列 */
|
|
106
|
+
refreshRenderList(): void;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/** `TransformControls` 的编辑器扩展 */
|
|
110
|
+
export interface EditorTransformControls extends TransformControls {
|
|
111
|
+
/** Box3 辅助框。未创建时没有该字段,关闭后为 `null` */
|
|
112
|
+
box3Helper?: THREE.Box3Helper | null;
|
|
113
|
+
|
|
114
|
+
/** 拖拽开始 / 结束回调,参数为 `dragging-changed` 的 `value`。历史模块在初始化时写入,监听里会直接调用 */
|
|
115
|
+
drag_change_callback: (value: boolean) => void;
|
|
116
|
+
|
|
117
|
+
/** 拖拽过程中的回调 */
|
|
118
|
+
dragChangeCallback?: (value: boolean) => void;
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/* ------------------------------------------------------------------ *
|
|
122
|
+
* 后期处理
|
|
123
|
+
* ------------------------------------------------------------------ */
|
|
124
|
+
|
|
125
|
+
/** 描述符安装后生成的 Pass */
|
|
126
|
+
export interface EditorPass extends Pass {
|
|
127
|
+
/** 生成该 Pass 的描述符 */
|
|
128
|
+
originInfo?: EffectDescriptor;
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
/** 安装自定义特效时传入的参数(与 `EditorContext` 场景相关字段同形) */
|
|
132
|
+
export interface EffectInstallArgs {
|
|
133
|
+
scene: EditorScene;
|
|
134
|
+
|
|
135
|
+
camera: EditorCamera;
|
|
136
|
+
|
|
137
|
+
renderer: EditorRenderer;
|
|
138
|
+
|
|
139
|
+
DOM: HTMLElement;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
/**
|
|
143
|
+
* 自定义后期特效描述符。
|
|
144
|
+
* `id`、`description` 与 `install` 必填;`id` 已存在时 `installEffect` 直接返回已有 Pass。
|
|
145
|
+
*/
|
|
146
|
+
export interface EffectDescriptor {
|
|
147
|
+
/** 必填,唯一标识,同时作为 `effectComposer.SHEET[id]` 的键 */
|
|
148
|
+
id: string;
|
|
149
|
+
|
|
150
|
+
/** 面板显示名 */
|
|
151
|
+
name?: string;
|
|
152
|
+
|
|
153
|
+
/** 必填,通道描述,说明用途、可配置内容及行为 */
|
|
154
|
+
description: string;
|
|
155
|
+
|
|
156
|
+
/**
|
|
157
|
+
* 安装前的默认值。提供 `meta.init` 时定义对应字段。
|
|
158
|
+
* `install` 读取此对象写入新建的 Pass;已安装的通道不随它变化。
|
|
159
|
+
*/
|
|
160
|
+
initParams?: Record<string, unknown>;
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* 外层可配置项。`meta.init` 相对 `initParams`,`meta.props` 相对 `install` 返回的 Pass。
|
|
164
|
+
* 内核面板仍使用 `setPanel`。
|
|
165
|
+
*/
|
|
166
|
+
meta?: ComponentMetadata;
|
|
167
|
+
|
|
168
|
+
/** 必填,返回一个 Pass */
|
|
169
|
+
install: (args: EffectInstallArgs) => Pass | null | undefined;
|
|
170
|
+
|
|
171
|
+
/** 卸载时调用(`unInstallEffect`) */
|
|
172
|
+
unInstall?: (args: EffectInstallArgs) => void;
|
|
173
|
+
|
|
174
|
+
/** 存档附加数据 */
|
|
175
|
+
getStorage?: (pass: Pass) => Record<string, unknown> | void;
|
|
176
|
+
|
|
177
|
+
/** 还原附加数据(`enabled` 由内核单独还原) */
|
|
178
|
+
setStorage?: (pass: Pass, storage: unknown) => void;
|
|
179
|
+
|
|
180
|
+
/** 控制面板(`enabled` 开关由内核先添加) */
|
|
181
|
+
setPanel?: (pass: Pass, folder: GUI) => void;
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
/** 单条后期特效存档(`passes` 数组元素) */
|
|
185
|
+
export interface EffectPassStorage {
|
|
186
|
+
id: string;
|
|
187
|
+
|
|
188
|
+
enabled?: boolean;
|
|
189
|
+
|
|
190
|
+
[key: string]: unknown;
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
/** `EffectComposer` 的编辑器扩展 */
|
|
194
|
+
export interface EditorEffectComposer extends EffectComposer {
|
|
195
|
+
/** 已安装的 Pass 表,键为描述符 id */
|
|
196
|
+
SHEET: Record<string, EditorPass>;
|
|
197
|
+
|
|
198
|
+
/** 名单排序用的 id 序列,由 `setPassOrder` 维护 */
|
|
199
|
+
passSortIds?: string[];
|
|
200
|
+
|
|
201
|
+
/** 渲染方式,切换时改写 `effectRender`;缺省 `'effectComposer'` */
|
|
202
|
+
renderWay: "effectComposer" | "renderer";
|
|
203
|
+
|
|
204
|
+
/** 每帧执行的渲染函数,由 `renderWay` 决定 */
|
|
205
|
+
effectRender(): void;
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* 按 id 名单重排 `passes`:无 originInfo 的(如 RenderPass)在前,
|
|
209
|
+
* 名单内已安装的按序,其余有 originInfo 的留在末尾。
|
|
210
|
+
* 传入 `ids` 时同时写入 `passSortIds`。
|
|
211
|
+
*/
|
|
212
|
+
setPassOrder(ids?: string[]): void;
|
|
213
|
+
|
|
214
|
+
/** 还原单个 Pass 的 `enabled` 与描述符 `setStorage` */
|
|
215
|
+
setPassStorage(pass: EditorPass, storage?: EffectPassStorage | null): void;
|
|
216
|
+
|
|
217
|
+
/** 安装特效;已存在同 id 时返回已有 Pass */
|
|
218
|
+
installEffect(effect: EffectDescriptor): EditorPass | undefined;
|
|
219
|
+
|
|
220
|
+
/** 卸载特效:从名单移除、dispose、调用 `unInstall` */
|
|
221
|
+
unInstallEffect(id: string): void;
|
|
222
|
+
|
|
223
|
+
/**
|
|
224
|
+
* 设置轮廓光选中物体(安装 `outlinePass` 后可用)。
|
|
225
|
+
* 不传或空数组表示清空。
|
|
226
|
+
*/
|
|
227
|
+
setOutlineSelects?(meshList?: THREE.Object3D[]): void;
|
|
228
|
+
|
|
229
|
+
/** 读取轮廓光当前选中列表(安装 `outlinePass` 后可用) */
|
|
230
|
+
getOutlineSelects?(): THREE.Object3D[];
|
|
231
|
+
|
|
232
|
+
/**
|
|
233
|
+
* 存档还原时遇到未注册特效 id 的回调。
|
|
234
|
+
* 由 `ThreeEditor.needRegister` 注入。
|
|
235
|
+
*/
|
|
236
|
+
needRegisterEffectCallBack?: (id: string, storage: EffectPassStorage) => void;
|
|
237
|
+
}
|
|
238
|
+
|
|
239
|
+
/* ------------------------------------------------------------------ *
|
|
240
|
+
* CSS 渲染器 / 性能监控
|
|
241
|
+
* ------------------------------------------------------------------ */
|
|
242
|
+
|
|
243
|
+
/** `CSS2DRenderer` 的编辑器扩展 */
|
|
244
|
+
export interface EditorCSS2DRenderer extends CSS2DRenderer {
|
|
245
|
+
resize(): void;
|
|
246
|
+
|
|
247
|
+
reset(): void;
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/** `CSS3DRenderer` 的编辑器扩展 */
|
|
251
|
+
export interface EditorCSS3DRenderer extends CSS3DRenderer {
|
|
252
|
+
resize(): void;
|
|
253
|
+
|
|
254
|
+
reset(): void;
|
|
255
|
+
}
|
|
256
|
+
|
|
257
|
+
/** `Stats` 的编辑器扩展 */
|
|
258
|
+
export interface EditorStats extends Stats {
|
|
259
|
+
/** 出于定位需求在标准 Stats 之外补上的 DOM 引用 */
|
|
260
|
+
domElement: HTMLDivElement;
|
|
261
|
+
|
|
262
|
+
/** 偏移配置,`resize()` 时读取 */
|
|
263
|
+
style: { offsetTop: number; offsetLeft: number };
|
|
264
|
+
|
|
265
|
+
/** 是否在容器中显示,赋值时挂载 / 卸载 DOM */
|
|
266
|
+
showStats: boolean;
|
|
267
|
+
|
|
268
|
+
/** 0 fps,1 ms,2 mb */
|
|
269
|
+
statsMode: number;
|
|
270
|
+
|
|
271
|
+
/** 依据容器尺寸重算位置 */
|
|
272
|
+
resize(): void;
|
|
273
|
+
|
|
274
|
+
/** 设置偏移并立即生效 */
|
|
275
|
+
setOffset(offsetTop: number, offsetLeft: number): void;
|
|
276
|
+
|
|
277
|
+
/** 将 DOM 挂到容器 */
|
|
278
|
+
created(): void;
|
|
279
|
+
|
|
280
|
+
/** 将 DOM 从容器移除 */
|
|
281
|
+
destroy(): void;
|
|
282
|
+
}
|
|
283
|
+
|
|
284
|
+
/* ------------------------------------------------------------------ *
|
|
285
|
+
* 交互管理
|
|
286
|
+
* ------------------------------------------------------------------ */
|
|
287
|
+
|
|
288
|
+
/** 鼠标交互模式 */
|
|
289
|
+
export type HandlerMode = "transform" | "select" | "none";
|
|
290
|
+
|
|
291
|
+
/** 坐标轴辅助配置 */
|
|
292
|
+
export interface AxesHelperState {
|
|
293
|
+
showAxes: boolean;
|
|
294
|
+
|
|
295
|
+
axesLength: number;
|
|
296
|
+
|
|
297
|
+
axesHelper: THREE.AxesHelper | null;
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
/** 网格辅助配置 */
|
|
301
|
+
export interface GridHelperState {
|
|
302
|
+
showGrid: boolean;
|
|
303
|
+
|
|
304
|
+
size: number;
|
|
305
|
+
|
|
306
|
+
divisions: number;
|
|
307
|
+
|
|
308
|
+
colorCenterLine: THREE.ColorRepresentation;
|
|
309
|
+
|
|
310
|
+
colorGrid: THREE.ColorRepresentation;
|
|
311
|
+
|
|
312
|
+
gridHelper: THREE.GridHelper | null;
|
|
313
|
+
}
|
|
314
|
+
|
|
315
|
+
/** Box3 辅助配置 */
|
|
316
|
+
export interface Box3HelperState {
|
|
317
|
+
useBox3: boolean;
|
|
318
|
+
|
|
319
|
+
color: THREE.ColorRepresentation;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/** 辅助工具集合 */
|
|
323
|
+
export interface EditorHelpers {
|
|
324
|
+
axes: AxesHelperState;
|
|
325
|
+
|
|
326
|
+
grid: GridHelperState;
|
|
327
|
+
|
|
328
|
+
box3: Box3HelperState;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/** 历史栈中的一条 PRS 记录 */
|
|
332
|
+
export interface HandlerHistoryRecord {
|
|
333
|
+
object: THREE.Object3D;
|
|
334
|
+
|
|
335
|
+
transform: {
|
|
336
|
+
position: Vector3Like;
|
|
337
|
+
rotation: Vector3Like;
|
|
338
|
+
scale: Vector3Like;
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
|
|
342
|
+
/** 撤销 / 重做栈 */
|
|
343
|
+
export interface HandlerHistory {
|
|
344
|
+
list: HandlerHistoryRecord[];
|
|
345
|
+
|
|
346
|
+
reList: HandlerHistoryRecord[];
|
|
347
|
+
|
|
348
|
+
/** 当前游标,初始为 `-1` */
|
|
349
|
+
index: number;
|
|
350
|
+
|
|
351
|
+
reset(): void;
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
/** 内置右键菜单项 */
|
|
355
|
+
export interface RightClickMenu {
|
|
356
|
+
name: string;
|
|
357
|
+
|
|
358
|
+
key: "selected" | "basicConf" | "materialConf" | "relatedConf" | "removeObject";
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/** 场景点击命中的信息 */
|
|
362
|
+
export interface SceneEventInfo {
|
|
363
|
+
/** 命中的物体(已按 `selectChildLevel` 上溯) */
|
|
364
|
+
object: THREE.Object3D;
|
|
365
|
+
|
|
366
|
+
/** 所属根模型 */
|
|
367
|
+
rootObject: THREE.Object3D;
|
|
368
|
+
|
|
369
|
+
/** 命中点的世界坐标 */
|
|
370
|
+
point: THREE.Vector3;
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
/** 交互、按键与辅助工具的管理对象 */
|
|
374
|
+
export interface EditorHandler {
|
|
375
|
+
/** 交互模式,影响点击行为;缺省 `'transform'` */
|
|
376
|
+
mode: HandlerMode;
|
|
377
|
+
|
|
378
|
+
/** 模式下拉框选项(显示名 → 值) */
|
|
379
|
+
modeList: Record<string, HandlerMode>;
|
|
380
|
+
|
|
381
|
+
/** 是否监听键盘快捷键,赋值时绑定 / 解绑事件 */
|
|
382
|
+
openKeyEnable: boolean;
|
|
383
|
+
|
|
384
|
+
/** 是否启用右键菜单,赋值时绑定 / 解绑事件 */
|
|
385
|
+
rightClickMenusEnable: boolean;
|
|
386
|
+
|
|
387
|
+
/** 是否选中子物体而非根模型 */
|
|
388
|
+
selectChildEnabled: boolean;
|
|
389
|
+
|
|
390
|
+
/** 子物体上溯层级 */
|
|
391
|
+
selectChildLevel: number;
|
|
392
|
+
|
|
393
|
+
stats: EditorStats;
|
|
394
|
+
|
|
395
|
+
helpers: EditorHelpers;
|
|
396
|
+
|
|
397
|
+
handlerHistory: HandlerHistory;
|
|
398
|
+
|
|
399
|
+
/** 最近一次场景点击的信息(首次点击前可能尚未赋值) */
|
|
400
|
+
currentInfo?: SceneEventInfo;
|
|
401
|
+
|
|
402
|
+
/** 由编辑器初始化时注入的右键菜单分发器 */
|
|
403
|
+
setActivePanel?: (event: MouseEvent, menu: RightClickMenu) => void;
|
|
404
|
+
|
|
405
|
+
/** 取消变换控制与轮廓选中 */
|
|
406
|
+
noSelect(): void;
|
|
407
|
+
|
|
408
|
+
/** 按当前 `mode` 选中物体(先 `noSelect`) */
|
|
409
|
+
toSelect(object?: THREE.Object3D | null): void;
|
|
410
|
+
|
|
411
|
+
/** 当前选中:变换控制对象,或轮廓列表首项 */
|
|
412
|
+
getSelect(): THREE.Object3D | undefined;
|
|
413
|
+
|
|
414
|
+
/** 清空选中并重置历史栈 */
|
|
415
|
+
reset(): void;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
/* ------------------------------------------------------------------ *
|
|
419
|
+
* 模块存档
|
|
420
|
+
* ------------------------------------------------------------------ */
|
|
421
|
+
|
|
422
|
+
export interface SceneFogStorage {
|
|
423
|
+
name?: string;
|
|
424
|
+
|
|
425
|
+
type?: "linear" | "exp2";
|
|
426
|
+
|
|
427
|
+
density?: number;
|
|
428
|
+
|
|
429
|
+
color?: number;
|
|
430
|
+
|
|
431
|
+
near?: number;
|
|
432
|
+
|
|
433
|
+
far?: number;
|
|
434
|
+
}
|
|
435
|
+
|
|
436
|
+
export interface SceneStorage {
|
|
437
|
+
background?: { colorSpace?: string };
|
|
438
|
+
|
|
439
|
+
backgroundUrls?: string[] | null;
|
|
440
|
+
|
|
441
|
+
envBackgroundUrls?: string[] | null;
|
|
442
|
+
|
|
443
|
+
backgroundBlurriness?: number;
|
|
444
|
+
|
|
445
|
+
backgroundIntensity?: number;
|
|
446
|
+
|
|
447
|
+
environmentEnabled?: boolean;
|
|
448
|
+
|
|
449
|
+
fog?: SceneFogStorage | null;
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
export interface CameraStorage {
|
|
453
|
+
fov: number;
|
|
454
|
+
|
|
455
|
+
near: number;
|
|
456
|
+
|
|
457
|
+
far: number;
|
|
458
|
+
|
|
459
|
+
zoom: number;
|
|
460
|
+
|
|
461
|
+
/** 取 `camera.layers.mask` */
|
|
462
|
+
layers: number;
|
|
463
|
+
|
|
464
|
+
filmOffset: number;
|
|
465
|
+
|
|
466
|
+
filmGauge: number;
|
|
467
|
+
|
|
468
|
+
position: Vector3Like;
|
|
469
|
+
}
|
|
470
|
+
|
|
471
|
+
export interface RendererStorage {
|
|
472
|
+
outputColorSpace: string;
|
|
473
|
+
|
|
474
|
+
toneMapping: number;
|
|
475
|
+
|
|
476
|
+
toneMappingExposure: number;
|
|
477
|
+
|
|
478
|
+
shadowMap: { enabled: boolean; type: number };
|
|
479
|
+
|
|
480
|
+
color: number;
|
|
481
|
+
|
|
482
|
+
opacity: number;
|
|
483
|
+
|
|
484
|
+
sortObjects: boolean;
|
|
485
|
+
|
|
486
|
+
autoClear: boolean;
|
|
487
|
+
|
|
488
|
+
autoClearColor: boolean;
|
|
489
|
+
|
|
490
|
+
renderListCompare: Array<{ name: string; enabled: boolean }>;
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
export interface ControlsStorage {
|
|
494
|
+
autoRotate: boolean;
|
|
495
|
+
|
|
496
|
+
autoRotateSpeed: number;
|
|
497
|
+
|
|
498
|
+
enableDamping: boolean;
|
|
499
|
+
|
|
500
|
+
dampingFactor: number;
|
|
501
|
+
|
|
502
|
+
minDistance: number;
|
|
503
|
+
|
|
504
|
+
maxDistance: number;
|
|
505
|
+
|
|
506
|
+
minAzimuthAngle: number;
|
|
507
|
+
|
|
508
|
+
maxAzimuthAngle: number;
|
|
509
|
+
|
|
510
|
+
minPolarAngle: number;
|
|
511
|
+
|
|
512
|
+
maxPolarAngle: number;
|
|
513
|
+
|
|
514
|
+
minTargetRadius: number;
|
|
515
|
+
|
|
516
|
+
maxTargetRadius: number;
|
|
517
|
+
|
|
518
|
+
enablePan: boolean;
|
|
519
|
+
|
|
520
|
+
panSpeed: number;
|
|
521
|
+
|
|
522
|
+
enableRotate: boolean;
|
|
523
|
+
|
|
524
|
+
rotateSpeed: number;
|
|
525
|
+
|
|
526
|
+
enableZoom: boolean;
|
|
527
|
+
|
|
528
|
+
zoomSpeed: number;
|
|
529
|
+
|
|
530
|
+
zoomToCursor: boolean;
|
|
531
|
+
|
|
532
|
+
target: Vector3Like;
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
export interface TransformControlsStorage {
|
|
536
|
+
mode: "translate" | "rotate" | "scale";
|
|
537
|
+
|
|
538
|
+
space: "world" | "local";
|
|
539
|
+
|
|
540
|
+
size: number;
|
|
541
|
+
|
|
542
|
+
showX: boolean;
|
|
543
|
+
|
|
544
|
+
showY: boolean;
|
|
545
|
+
|
|
546
|
+
showZ: boolean;
|
|
547
|
+
|
|
548
|
+
translationSnap: number | null;
|
|
549
|
+
|
|
550
|
+
rotationSnap: number | null;
|
|
551
|
+
|
|
552
|
+
scaleSnap: number | null;
|
|
553
|
+
}
|
|
554
|
+
|
|
555
|
+
export interface EffectComposerStorage {
|
|
556
|
+
renderWay: "effectComposer" | "renderer";
|
|
557
|
+
|
|
558
|
+
/** 已安装特效的有序列表(含 id / enabled / 自定义字段)。`getEffectComposerStorage` 总会写入,空列表为 `[]` */
|
|
559
|
+
passes: EffectPassStorage[];
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
export interface StatsStorage {
|
|
563
|
+
showStats: boolean;
|
|
564
|
+
|
|
565
|
+
statsMode: number;
|
|
566
|
+
}
|
|
567
|
+
|
|
568
|
+
export interface HelpersStorage {
|
|
569
|
+
axes: Pick<AxesHelperState, "showAxes" | "axesLength">;
|
|
570
|
+
|
|
571
|
+
grid: Pick<
|
|
572
|
+
GridHelperState,
|
|
573
|
+
"showGrid" | "size" | "divisions" | "colorCenterLine" | "colorGrid"
|
|
574
|
+
>;
|
|
575
|
+
|
|
576
|
+
box3: Box3HelperState;
|
|
577
|
+
}
|
|
578
|
+
|
|
579
|
+
export interface HandlerStorage {
|
|
580
|
+
mode: HandlerMode;
|
|
581
|
+
|
|
582
|
+
openKeyEnable: boolean;
|
|
583
|
+
|
|
584
|
+
rightClickMenusEnable: boolean;
|
|
585
|
+
|
|
586
|
+
selectChildEnabled: boolean;
|
|
587
|
+
|
|
588
|
+
selectChildLevel: number;
|
|
589
|
+
|
|
590
|
+
stats: StatsStorage;
|
|
591
|
+
|
|
592
|
+
helpers: HelpersStorage;
|
|
593
|
+
}
|