@realsee/five 6.8.0 → 6.8.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/ai_guides/features/flowing-light-2d-pass.md +64 -10
- package/ai_guides/features/flowing-light-3d-pass.md +64 -10
- package/docs/assets/hierarchy.js +1 -1
- package/docs/assets/navigation.js +1 -1
- package/docs/assets/search.js +1 -1
- package/docs/classes/five.AdaptiveLuminancePass.html +1 -1
- package/docs/classes/five.BoundingMesh.html +1 -1
- package/docs/classes/five.Camera.html +1 -1
- package/docs/classes/five.EyeDomeLightingPass.html +1 -1
- package/docs/classes/five.Five.html +1 -1
- package/docs/classes/five.FivePass.html +1 -1
- package/docs/classes/five.InternalWebGLRenderer.html +1 -1
- package/docs/classes/five.Model.html +1 -1
- package/docs/classes/five.ModelScene.html +1 -1
- package/docs/classes/five.NetworkSubscribe.html +1 -1
- package/docs/classes/five.PBMContainer.html +1 -1
- package/docs/classes/five.PBMCustomShader.html +1 -1
- package/docs/classes/five.PBMGSObject.html +1 -1
- package/docs/classes/five.PBMGroup.html +1 -1
- package/docs/classes/five.PBMMesh.html +1 -1
- package/docs/classes/five.PBMMeshMaterial.html +1 -1
- package/docs/classes/five.PBMPanoFilter.html +1 -1
- package/docs/classes/five.PBMPointCloud.html +1 -1
- package/docs/classes/five.PBMPointCloudMaterial.html +1 -1
- package/docs/classes/five.PBMSkinnedMesh.html +1 -1
- package/docs/classes/five.PBMUpdateable.html +1 -1
- package/docs/classes/five.PanoCircleMesh.html +1 -1
- package/docs/classes/five.PanoCircleMeshCustom.html +1 -1
- package/docs/classes/five.PanoCircleMeshSolid.html +1 -1
- package/docs/classes/five.Parameter.html +1 -1
- package/docs/classes/five.Scene.html +1 -1
- package/docs/classes/five.Subscribe.html +1 -1
- package/docs/classes/five.Tile3D.html +1 -1
- package/docs/classes/five.TileNode.html +1 -1
- package/docs/classes/five.TrajectoryNode.html +1 -1
- package/docs/classes/five.WorkResolvedObserver.html +1 -1
- package/docs/classes/gltf-loader.DDSLoader.html +1 -1
- package/docs/classes/gltf-loader.DRACOLoader.html +1 -1
- package/docs/classes/gltf-loader.GLTFLoader.html +1 -1
- package/docs/classes/gltf-loader.GLTFObject.html +1 -1
- package/docs/classes/gltf-loader.THREEGLTFLoader.html +1 -1
- package/docs/classes/line.Line.html +1 -1
- package/docs/classes/line.LineGeometry.html +1 -1
- package/docs/classes/line.LineMaterial.html +1 -1
- package/docs/classes/line.LineSegmentsGeometry.html +1 -1
- package/docs/classes/line.THREE_Line2.html +1 -1
- package/docs/classes/line.THREE_LineSegments2.html +1 -1
- package/docs/classes/plugins.BasePlugin.Controller.html +1 -1
- package/docs/classes/plugins.CSS2DObject.html +10 -0
- package/docs/classes/plugins.CSS2DRenderer.html +7 -0
- package/docs/classes/plugins.CSS3DObject.html +1 -1
- package/docs/classes/plugins.CSS3DSprite.html +1 -1
- package/docs/classes/plugins.InstancedPrefabBufferGeometry.html +18 -0
- package/docs/classes/plugins.Object3DHelperController.html +1 -1
- package/docs/classes/plugins.PointBufferGeometry.html +12 -0
- package/docs/classes/plugins.PrefabBufferGeometry.html +24 -0
- package/docs/classes/plugins.RoundedBoxGeometry.html +1 -1
- package/docs/classes/sticker.Sticker.html +1 -1
- package/docs/classes/vfx.Airflow.html +1 -1
- package/docs/classes/vfx.Flame.html +1 -1
- package/docs/classes/vfx.Particle.html +1 -1
- package/docs/classes/vfx.ParticleGPU.html +1 -1
- package/docs/classes/vfx.SpotLight.html +1 -1
- package/docs/documents/features_flowing-light-2d-pass.html +28 -15
- package/docs/documents/features_flowing-light-3d-pass.html +27 -14
- package/docs/functions/plugins.CSS2DPlugin.html +1 -0
- package/docs/functions/react.getPlugin.html +2 -0
- package/docs/functions/react.setPlugin.html +2 -0
- package/docs/functions/react.useFivePlugin.html +9 -0
- package/docs/functions/react.withFive.html +1 -1
- package/docs/hierarchy.html +1 -1
- package/docs/interfaces/five.AddableObject.html +1 -1
- package/docs/interfaces/five.AjaxOptions.html +1 -1
- package/docs/interfaces/five.BaseEvent.html +1 -1
- package/docs/interfaces/five.BaseExtendableEvent.html +1 -1
- package/docs/interfaces/five.EventCallback.html +1 -1
- package/docs/interfaces/five.GestureEvent.html +13 -13
- package/docs/interfaces/five.GesturePointer.html +9 -9
- package/docs/interfaces/five.ImageOptions.html +1 -1
- package/docs/interfaces/five.IntersectEvent.html +1 -1
- package/docs/interfaces/five.IntersectMesh.html +1 -1
- package/docs/interfaces/five.IntersectMeshInterface.html +1 -1
- package/docs/interfaces/five.Intersection.html +1 -1
- package/docs/interfaces/five.LooseWorkWithExtrinsics.html +1 -1
- package/docs/interfaces/five.ModeChangeEvent.html +2 -2
- package/docs/interfaces/five.ModelControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.ModelEvent.html +3 -3
- package/docs/interfaces/five.ModelSceneEvent.html +2 -2
- package/docs/interfaces/five.ModelTileEvent.html +3 -3
- package/docs/interfaces/five.MovePanoOptions.html +1 -1
- package/docs/interfaces/five.NetworkAbortError.html +1 -1
- package/docs/interfaces/five.NetworkFirbiddenError.html +1 -1
- package/docs/interfaces/five.NetworkOptions.html +1 -1
- package/docs/interfaces/five.NetworkProxyError.html +1 -1
- package/docs/interfaces/five.NetworkResourceEvent.html +2 -2
- package/docs/interfaces/five.NetworkResponseError.html +1 -1
- package/docs/interfaces/five.NetworkTimeoutError.html +1 -1
- package/docs/interfaces/five.ObjectEvent.html +2 -2
- package/docs/interfaces/five.PBMMaterial.html +1 -1
- package/docs/interfaces/five.PBMMeshMaterialParameters.html +1 -1
- package/docs/interfaces/five.PBMPointCloudMaterialParameters.html +1 -1
- package/docs/interfaces/five.PanoCircleMeshInterface.html +1 -1
- package/docs/interfaces/five.PanoEvent.html +1 -1
- package/docs/interfaces/five.PanoPrepareEvent.html +8 -4
- package/docs/interfaces/five.PanoTextureEvent.html +5 -5
- package/docs/interfaces/five.PanoramaControllerCustomInitArgs.html +9 -9
- package/docs/interfaces/five.PanoramaLikeControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.ParameterMaterialValue.html +1 -1
- package/docs/interfaces/five.ParameterTilesetValue.html +1 -1
- package/docs/interfaces/five.ParameterValue.html +1 -1
- package/docs/interfaces/five.Pose.html +1 -1
- package/docs/interfaces/five.RenderEvent.html +2 -2
- package/docs/interfaces/five.ResolvedParameterValue.html +1 -1
- package/docs/interfaces/five.State.html +1 -1
- package/docs/interfaces/five.StateEvent.html +1 -1
- package/docs/interfaces/five.TextureOptions.html +1 -1
- package/docs/interfaces/five.TopviewControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.VRPanoramaControllerCustomInitArgs.html +9 -9
- package/docs/interfaces/five.ViewLayer.html +1 -1
- package/docs/interfaces/five.WorkCubeImage.html +1 -1
- package/docs/interfaces/five.WorkImage.html +1 -1
- package/docs/interfaces/five.WorkObserver.html +1 -1
- package/docs/interfaces/five.WorkObserverProto.html +1 -1
- package/docs/interfaces/five.WorkTile.html +1 -1
- package/docs/interfaces/five.WorksEvent.html +3 -3
- package/docs/interfaces/five.XRControllerEvent.html +4 -4
- package/docs/interfaces/five.XRControllerState.html +4 -4
- package/docs/interfaces/five.XRGestureEvent.html +7 -7
- package/docs/interfaces/five.XRPanoramaControllerCustomInitArgs.html +9 -9
- package/docs/interfaces/five.XRSessionEvent.html +3 -3
- package/docs/interfaces/plugins.BackgroundPluginController.html +1 -1
- package/docs/interfaces/plugins.BackgroundPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.BasePlugin.State.html +1 -1
- package/docs/interfaces/plugins.CSS2DPluginController.html +49 -0
- package/docs/interfaces/plugins.CSS2DPluginType.Config.html +2 -0
- package/docs/interfaces/plugins.CSS2DPluginType.CreateCSS2DObjectType.html +8 -0
- package/docs/interfaces/plugins.CSS2DPluginType.EventMap.html +10 -0
- package/docs/interfaces/plugins.CSS2DPluginType.Params.html +4 -0
- package/docs/interfaces/plugins.CSS2DPluginType.State.html +8 -0
- package/docs/interfaces/plugins.CSS2DRendererParameters.html +2 -0
- package/docs/interfaces/plugins.CSS3DPluginController.html +12 -12
- package/docs/interfaces/plugins.CSS3DPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.CSS3DPluginType.State.html +1 -1
- package/docs/interfaces/plugins.DynamicPathLinePluginController.html +1 -1
- package/docs/interfaces/plugins.DynamicPathLinePluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.DynamicPathLinePluginType.State.html +1 -1
- package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationController.html +1 -1
- package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.State.html +1 -1
- package/docs/interfaces/plugins.ItemMaskController.html +1 -1
- package/docs/interfaces/plugins.ItemMaskPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.ItemMaskPluginType.State.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.BaseController.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.BaseHelper.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.BoundingBoxController.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.MoveController.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.MoveHelperAbstract.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.RotateController.html +1 -1
- package/docs/interfaces/plugins.Object3DHelperPluginType.RotateHelperAbstract.html +1 -1
- package/docs/interfaces/plugins.OrientationPluginController.html +1 -1
- package/docs/interfaces/plugins.OrientationPluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.OrientationPluginType.State.html +1 -1
- package/docs/interfaces/plugins.PanoAnimeController.html +1 -1
- package/docs/interfaces/plugins.PanoAnimePluginType.EventMap.html +1 -1
- package/docs/interfaces/plugins.PanoAnimePluginType.State.html +1 -1
- package/docs/interfaces/plugins.PluginTemplateType.EventMap.html +1 -1
- package/docs/interfaces/plugins.PluginTemplateType.State.html +1 -1
- package/docs/interfaces/plugins.TrajectoryController.html +1 -1
- package/docs/interfaces/react.FiveAppProps.html +11 -0
- package/docs/interfaces/react.FiveInjectionTypes.html +1 -1
- package/docs/interfaces/react.UseFivePluginOptions.html +5 -0
- package/docs/interfaces/react.UseFivePluginOptionsWithCreate.html +5 -0
- package/docs/modules/plugins.CSS2DPluginType.html +1 -0
- package/docs/modules/plugins.html +1 -1
- package/docs/modules/react.html +1 -1
- package/docs/types/five.ParseOptions.html +1 -1
- package/docs/types/plugins.BasePlugin.EventMap.html +1 -1
- package/docs/types/plugins.CSS2DPluginType.PluginData.html +1 -0
- package/docs/types/plugins.CSS2DPluginType.ServerData.html +1 -0
- package/docs/variables/react.FiveApp.html +3 -0
- package/docs/variables/react.FiveAutoCanvas.html +3 -0
- package/five/controllers/panorama.d.ts +2 -2
- package/five/controllers/xrPanorama.d.ts +4 -2
- package/five/index.js +23 -23
- package/five/index.mjs +563 -549
- package/five/renderer/postprocessing/passes/flowing-light-2d-pass.d.ts +6 -1
- package/five/renderer/postprocessing/passes/flowing-light-3d-pass.d.ts +3 -1
- package/five/utils/event.d.ts +5 -1
- package/gltf-loader/index.js +3 -3
- package/gltf-loader/index.mjs +3 -3
- package/line/index.js +3 -3
- package/line/index.mjs +3 -3
- package/package.json +1 -1
- package/plugins/CSS2DPlugin/Controller.d.ts +59 -0
- package/plugins/CSS2DPlugin/index.d.ts +5 -0
- package/plugins/CSS2DPlugin/typing.d.ts +30 -0
- package/plugins/index.d.ts +5 -0
- package/plugins/index.js +24 -4
- package/plugins/index.mjs +871 -588
- package/plugins/thirdParty/CSS2DRenderer.d.ts +37 -0
- package/plugins/thirdParty/instancedPrefabBufferGeometry.d.ts +32 -0
- package/plugins/thirdParty/pointBufferGeometry.d.ts +22 -0
- package/plugins/thirdParty/prefabBufferGeometry.d.ts +38 -0
- package/react/autoCanvas.d.ts +9 -0
- package/react/fiveApp.d.ts +22 -0
- package/react/hooks/useFivePlugin.d.ts +22 -0
- package/react/index.d.ts +4 -0
- package/react/index.js +3 -3
- package/react/index.mjs +292 -175
- package/react/withFive.d.ts +1 -1
- package/shader-lib/index.js +2 -2
- package/shader-lib/index.mjs +2 -2
- package/sticker/index.js +3 -3
- package/sticker/index.mjs +3 -3
- package/umd/five-gltf-loader.js +3 -3
- package/umd/five-line.js +3 -3
- package/umd/five-plugins.js +24 -4
- package/umd/five-react.js +3 -3
- package/umd/five-shader-lib.js +2 -2
- package/umd/five-sticker.js +3 -3
- package/umd/five-vfx.js +2 -2
- package/umd/five-vue.js +2 -2
- package/umd/five.js +8 -8
- package/vfx/index.js +2 -2
- package/vfx/index.mjs +2 -2
- package/vue/index.js +2 -2
- package/vue/index.mjs +2 -2
- package/work-downloader/index.js +2 -2
- package/work-downloader/index.mjs +2 -2
|
@@ -24,7 +24,7 @@ type Line = {
|
|
|
24
24
|
color: THREE.Color; // 光带颜色
|
|
25
25
|
opacity?: number; // 光带不透明度(0-1)
|
|
26
26
|
duration?: number; // 动画时长(毫秒)
|
|
27
|
-
|
|
27
|
+
startTime?: number; // 线条开始时间(毫秒),默认使用当前内部时间
|
|
28
28
|
lineWidth?: number; // 线宽(归一化单位)
|
|
29
29
|
tailLengthRatio?: number; // 尾巴长度比例(0-1),默认 0.2
|
|
30
30
|
};
|
|
@@ -32,10 +32,16 @@ type Line = {
|
|
|
32
32
|
export class FlowingLight2DPass extends FivePass {
|
|
33
33
|
constructor(camera: Camera);
|
|
34
34
|
|
|
35
|
-
//
|
|
35
|
+
// 批量设置路径列表(替换所有现有线条)
|
|
36
36
|
public setLines(lines: Line[]): void;
|
|
37
37
|
|
|
38
|
-
//
|
|
38
|
+
// 追加一条或多条线,返回生成的 id 数组
|
|
39
|
+
public addLine(...lines: Line[]): string[];
|
|
40
|
+
|
|
41
|
+
// 按 id 移除一条或多条线,返回实际移除的数量
|
|
42
|
+
public removeLine(...ids: string[]): number;
|
|
43
|
+
|
|
44
|
+
// 修改单条线的参数(通过 id),支持部分更新
|
|
39
45
|
public setLine(params: { id: string } & Partial<Omit<Line, 'id'>>): void;
|
|
40
46
|
|
|
41
47
|
public render(
|
|
@@ -92,7 +98,7 @@ export class FlowingLight2DPass extends FivePass {
|
|
|
92
98
|
| `color` | `THREE.Color` | ✓ | - | 光带颜色(RGB)。 |
|
|
93
99
|
| `opacity` | `number` | | `1.0` | 光带不透明度(0-1)。控制与背景的混合强度。 |
|
|
94
100
|
| `duration` | `number` | | `1000` | 动画周期(毫秒)。光头从路径起点完成一个周期的时长。 |
|
|
95
|
-
| `
|
|
101
|
+
| `startTime` | `number` | | 当前内部时间 | 线条开始时间(毫秒)。控制线条动画从何时开始播放,可用于多条线错开起始时间。 |
|
|
96
102
|
| `lineWidth` | `number` | | `0.01` | 线宽(归一化单位)。控制光带在屏幕上的宽度。 |
|
|
97
103
|
| `tailLengthRatio` | `number` | | `0.2` | 尾巴长度比例(0-1)。控制流光尾巴相对于路径总长的比例。 |
|
|
98
104
|
|
|
@@ -104,9 +110,10 @@ export class FlowingLight2DPass extends FivePass {
|
|
|
104
110
|
初始化 Pass,需传入相机以获取屏幕分辨率。
|
|
105
111
|
|
|
106
112
|
### `setLines(lines: Line[])`
|
|
107
|
-
|
|
113
|
+
批量设置路径列表,替换所有现有线条。可随时调用以修改或新增路径。
|
|
108
114
|
|
|
109
115
|
**自动生成 ID**: 如果 line 没有提供 `id`,会自动生成 UUID。
|
|
116
|
+
**自动设置 startTime**: 如果 line 没有提供 `startTime`,会使用当前内部时间。
|
|
110
117
|
|
|
111
118
|
**示例**:
|
|
112
119
|
```ts
|
|
@@ -121,12 +128,59 @@ const pathLine: Line = {
|
|
|
121
128
|
color: new THREE.Color(0x00c2ff),
|
|
122
129
|
opacity: 0.8,
|
|
123
130
|
duration: 2000,
|
|
124
|
-
|
|
131
|
+
startTime: 500,
|
|
125
132
|
lineWidth: 0.01,
|
|
126
133
|
};
|
|
127
134
|
pass.setLines([pathLine]);
|
|
128
135
|
```
|
|
129
136
|
|
|
137
|
+
### `addLine(...lines: Line[]): string[]`
|
|
138
|
+
追加一条或多条线到现有列表中,不影响已有线条。返回新增线条的 id 数组。
|
|
139
|
+
|
|
140
|
+
**示例**:
|
|
141
|
+
```ts
|
|
142
|
+
// 追加单条线
|
|
143
|
+
const [id1] = pass.addLine({
|
|
144
|
+
points: [
|
|
145
|
+
new THREE.Vector2(0.1, 0.1),
|
|
146
|
+
new THREE.Vector2(0.9, 0.9),
|
|
147
|
+
],
|
|
148
|
+
totalLength: 1.13,
|
|
149
|
+
color: new THREE.Color(0xff0000),
|
|
150
|
+
duration: 2000,
|
|
151
|
+
});
|
|
152
|
+
|
|
153
|
+
// 追加多条线
|
|
154
|
+
const ids = pass.addLine(
|
|
155
|
+
{
|
|
156
|
+
points: [...],
|
|
157
|
+
totalLength: 0.8,
|
|
158
|
+
color: new THREE.Color(0x00ff00),
|
|
159
|
+
duration: 1500,
|
|
160
|
+
},
|
|
161
|
+
{
|
|
162
|
+
points: [...],
|
|
163
|
+
totalLength: 1.2,
|
|
164
|
+
color: new THREE.Color(0x0000ff),
|
|
165
|
+
duration: 1800,
|
|
166
|
+
},
|
|
167
|
+
);
|
|
168
|
+
// ids = ['uuid-1', 'uuid-2']
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
### `removeLine(...ids: string[]): number`
|
|
172
|
+
按 id 移除一条或多条线,返回实际移除的数量。如果 id 不存在,会在控制台输出警告。
|
|
173
|
+
|
|
174
|
+
**示例**:
|
|
175
|
+
```ts
|
|
176
|
+
// 移除单条线
|
|
177
|
+
pass.removeLine(id1);
|
|
178
|
+
|
|
179
|
+
// 移除多条线
|
|
180
|
+
const removedCount = pass.removeLine(id1, id2, id3);
|
|
181
|
+
console.log(`移除了 ${removedCount} 条线`);
|
|
182
|
+
```
|
|
183
|
+
|
|
130
184
|
### `setLine(params: { id: string } & Partial<Omit<Line, 'id'>>)`
|
|
131
185
|
通过 `id` 修改单条线的参数。支持部分更新,只更新传入的字段。
|
|
132
186
|
|
|
@@ -250,7 +304,7 @@ const paths = [
|
|
|
250
304
|
color: new THREE.Color(0x0066ff),
|
|
251
305
|
opacity: 0.7,
|
|
252
306
|
duration: 2000,
|
|
253
|
-
|
|
307
|
+
startTime: 500,
|
|
254
308
|
lineWidth: 0.015,
|
|
255
309
|
},
|
|
256
310
|
];
|
|
@@ -326,7 +380,7 @@ const rectPath = {
|
|
|
326
380
|
color: new THREE.Color(1.0, 1.0, 1.0),
|
|
327
381
|
opacity: 1.0,
|
|
328
382
|
duration: 4000,
|
|
329
|
-
|
|
383
|
+
startTime: 2000,
|
|
330
384
|
lineWidth: 0.01,
|
|
331
385
|
};
|
|
332
386
|
|
|
@@ -350,7 +404,7 @@ const paths = Array.from({ length: 10 }, (_, i) => ({
|
|
|
350
404
|
totalLength: 0.8,
|
|
351
405
|
color: new THREE.Color(Math.random() * 0xffffff),
|
|
352
406
|
duration: 2000 + i * 100,
|
|
353
|
-
|
|
407
|
+
startTime: i * 200,
|
|
354
408
|
lineWidth: 0.01,
|
|
355
409
|
}));
|
|
356
410
|
|
|
@@ -378,7 +432,7 @@ pass.setLines(paths);
|
|
|
378
432
|
| 修改类型 | 性能 | 说明 |
|
|
379
433
|
|---------|------|------|
|
|
380
434
|
| 只修改颜色/透明度 | ⚡️ 极快 (~100x) | 只更新 instanceColor attribute |
|
|
381
|
-
| 只修改 duration/
|
|
435
|
+
| 只修改 duration/startTime | ⚡️ 极快 (~100x) | 只更新 instanceMeta attribute |
|
|
382
436
|
| 只修改 lineWidth | ⚡️ 极快 (~100x) | 只更新 instanceData attribute |
|
|
383
437
|
| 修改 points (相同数量) | ⚡️ 快 (~50x) | 只更新 instanceStart/End attributes |
|
|
384
438
|
| 修改 points (不同数量) | ⚠️ 慢 | 重建整个 mesh |
|
|
@@ -24,7 +24,7 @@ type Line = {
|
|
|
24
24
|
color: THREE.Color; // 光带颜色
|
|
25
25
|
opacity?: number; // 光带不透明度(0-1)
|
|
26
26
|
duration?: number; // 动画周期(毫秒)
|
|
27
|
-
|
|
27
|
+
startTime?: number; // 线条开始时间(毫秒),默认使用当前内部时间
|
|
28
28
|
lineWidth?: number; // 线宽(像素)
|
|
29
29
|
tailLengthRatio?: number; // 尾巴长度比例(0-1),默认 0.2
|
|
30
30
|
};
|
|
@@ -32,10 +32,16 @@ type Line = {
|
|
|
32
32
|
export class FlowingLight3DPass extends FivePass {
|
|
33
33
|
constructor(camera: Camera);
|
|
34
34
|
|
|
35
|
-
//
|
|
35
|
+
// 批量设置路径列表(替换所有现有线条)
|
|
36
36
|
public setLines(lines: Line[]): void;
|
|
37
37
|
|
|
38
|
-
//
|
|
38
|
+
// 追加一条或多条线,返回生成的 id 数组
|
|
39
|
+
public addLine(...lines: Line[]): string[];
|
|
40
|
+
|
|
41
|
+
// 按 id 移除一条或多条线,返回实际移除的数量
|
|
42
|
+
public removeLine(...ids: string[]): number;
|
|
43
|
+
|
|
44
|
+
// 修改单条线的参数(通过 id),支持部分更新
|
|
39
45
|
public setLine(params: { id: string } & Partial<Omit<Line, 'id'>>): void;
|
|
40
46
|
|
|
41
47
|
public render(
|
|
@@ -84,7 +90,7 @@ Pass 自动同步相机的投影矩阵和视图矩阵,无需手动管理。支
|
|
|
84
90
|
| `color` | `THREE.Color` | ✓ | - | 光带颜色(RGB)。 |
|
|
85
91
|
| `opacity` | `number` | | `1.0` | 光带不透明度(0-1)。控制与背景的混合强度。 |
|
|
86
92
|
| `duration` | `number` | | `1000` | 动画周期(毫秒)。光头完成一个循环所需时长。 |
|
|
87
|
-
| `
|
|
93
|
+
| `startTime` | `number` | | 当前内部时间 | 线条开始时间(毫秒)。控制线条动画从何时开始播放,可用于多条线错开起始时间。 |
|
|
88
94
|
| `lineWidth` | `number` | | `3.0` | 线宽(像素)。控制光带在屏幕上的宽度。 |
|
|
89
95
|
| `tailLengthRatio` | `number` | | `0.2` | 尾巴长度比例(0-1)。控制流光尾巴相对于路径总长的比例。 |
|
|
90
96
|
|
|
@@ -96,9 +102,10 @@ Pass 自动同步相机的投影矩阵和视图矩阵,无需手动管理。支
|
|
|
96
102
|
初始化 Pass,需传入相机以获取投影矩阵和视图矩阵。
|
|
97
103
|
|
|
98
104
|
### `setLines(lines: Line[])`
|
|
99
|
-
|
|
105
|
+
批量设置路径列表,替换所有现有线条。支持运行时动态更改。
|
|
100
106
|
|
|
101
107
|
**自动生成 ID**: 如果 line 没有提供 `id`,会自动生成 UUID。
|
|
108
|
+
**自动设置 startTime**: 如果 line 没有提供 `startTime`,会使用当前内部时间。
|
|
102
109
|
|
|
103
110
|
**示例**:
|
|
104
111
|
```ts
|
|
@@ -113,12 +120,59 @@ const pathLine: Line = {
|
|
|
113
120
|
color: new THREE.Color(0xff6600),
|
|
114
121
|
opacity: 0.85,
|
|
115
122
|
duration: 3000,
|
|
116
|
-
|
|
123
|
+
startTime: 500,
|
|
117
124
|
lineWidth: 4.0,
|
|
118
125
|
};
|
|
119
126
|
pass.setLines([pathLine]);
|
|
120
127
|
```
|
|
121
128
|
|
|
129
|
+
### `addLine(...lines: Line[]): string[]`
|
|
130
|
+
追加一条或多条线到现有列表中,不影响已有线条。返回新增线条的 id 数组。
|
|
131
|
+
|
|
132
|
+
**示例**:
|
|
133
|
+
```ts
|
|
134
|
+
// 追加单条线
|
|
135
|
+
const [id1] = pass.addLine({
|
|
136
|
+
points: [
|
|
137
|
+
new THREE.Vector3(0, 0, 0),
|
|
138
|
+
new THREE.Vector3(10, 5, 5),
|
|
139
|
+
],
|
|
140
|
+
totalLength: 12,
|
|
141
|
+
color: new THREE.Color(0xff0000),
|
|
142
|
+
duration: 2000,
|
|
143
|
+
});
|
|
144
|
+
|
|
145
|
+
// 追加多条线
|
|
146
|
+
const ids = pass.addLine(
|
|
147
|
+
{
|
|
148
|
+
points: [...],
|
|
149
|
+
totalLength: 8,
|
|
150
|
+
color: new THREE.Color(0x00ff00),
|
|
151
|
+
duration: 1500,
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
points: [...],
|
|
155
|
+
totalLength: 15,
|
|
156
|
+
color: new THREE.Color(0x0000ff),
|
|
157
|
+
duration: 1800,
|
|
158
|
+
},
|
|
159
|
+
);
|
|
160
|
+
// ids = ['uuid-1', 'uuid-2']
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### `removeLine(...ids: string[]): number`
|
|
164
|
+
按 id 移除一条或多条线,返回实际移除的数量。如果 id 不存在,会在控制台输出警告。
|
|
165
|
+
|
|
166
|
+
**示例**:
|
|
167
|
+
```ts
|
|
168
|
+
// 移除单条线
|
|
169
|
+
pass.removeLine(id1);
|
|
170
|
+
|
|
171
|
+
// 移除多条线
|
|
172
|
+
const removedCount = pass.removeLine(id1, id2, id3);
|
|
173
|
+
console.log(`移除了 ${removedCount} 条线`);
|
|
174
|
+
```
|
|
175
|
+
|
|
122
176
|
### `setLine(params: { id: string } & Partial<Omit<Line, 'id'>>)`
|
|
123
177
|
通过 `id` 修改单条线的参数。支持部分更新,只更新传入的字段。
|
|
124
178
|
|
|
@@ -242,7 +296,7 @@ const paths = [
|
|
|
242
296
|
totalLength: 12,
|
|
243
297
|
color: new THREE.Color(0x00ff00),
|
|
244
298
|
duration: 2500,
|
|
245
|
-
|
|
299
|
+
startTime: 500,
|
|
246
300
|
lineWidth: 4.0,
|
|
247
301
|
},
|
|
248
302
|
{
|
|
@@ -253,7 +307,7 @@ const paths = [
|
|
|
253
307
|
totalLength: 11,
|
|
254
308
|
color: new THREE.Color(0x0000ff),
|
|
255
309
|
duration: 2200,
|
|
256
|
-
|
|
310
|
+
startTime: 1000,
|
|
257
311
|
lineWidth: 2.5,
|
|
258
312
|
},
|
|
259
313
|
];
|
|
@@ -332,7 +386,7 @@ const paths = Array.from({ length: 10 }, (_, i) => ({
|
|
|
332
386
|
totalLength: 7,
|
|
333
387
|
color: new THREE.Color(Math.random() * 0xffffff),
|
|
334
388
|
duration: 2000 + i * 100,
|
|
335
|
-
|
|
389
|
+
startTime: i * 200,
|
|
336
390
|
lineWidth: 3.0,
|
|
337
391
|
}));
|
|
338
392
|
|
|
@@ -361,7 +415,7 @@ pass.setLines(paths);
|
|
|
361
415
|
| 修改类型 | 性能 | 说明 |
|
|
362
416
|
|---------|------|------|
|
|
363
417
|
| 只修改颜色/透明度 | ⚡️ 极快 (~100x) | 只更新 instanceColor attribute |
|
|
364
|
-
| 只修改 duration/
|
|
418
|
+
| 只修改 duration/startTime | ⚡️ 极快 (~100x) | 只更新 instanceMeta attribute |
|
|
365
419
|
| 只修改 lineWidth | ⚡️ 极快 (~100x) | 只更新 instanceData attribute |
|
|
366
420
|
| 修改 points (相同数量) | ⚡️ 快 (~50x) | 只更新 instanceStart/End attributes |
|
|
367
421
|
| 修改 points (不同数量) | ⚠️ 慢 | 重建整个 mesh |
|
package/docs/assets/hierarchy.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
window.hierarchyData = "
|
|
1
|
+
window.hierarchyData = "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"
|
|
@@ -1 +1 @@
|
|
|
1
|
-
window.navigationData = "
|
|
1
|
+
window.navigationData = "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"
|