@realsee/five 6.8.0 → 6.8.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/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.Object3DHelperController.html +1 -1
- 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 +8 -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 +1 -1
- 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 +1 -1
- package/docs/interfaces/five.ModelControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.ModelEvent.html +1 -1
- package/docs/interfaces/five.ModelSceneEvent.html +1 -1
- package/docs/interfaces/five.ModelTileEvent.html +1 -1
- 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 +1 -1
- package/docs/interfaces/five.NetworkResponseError.html +1 -1
- package/docs/interfaces/five.NetworkTimeoutError.html +1 -1
- package/docs/interfaces/five.ObjectEvent.html +1 -1
- 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 +1 -1
- package/docs/interfaces/five.PanoTextureEvent.html +1 -1
- package/docs/interfaces/five.PanoramaControllerCustomInitArgs.html +1 -1
- 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 +1 -1
- 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 +1 -1
- 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 +1 -1
- package/docs/interfaces/five.XRControllerEvent.html +1 -1
- package/docs/interfaces/five.XRGestureEvent.html +1 -1
- package/docs/interfaces/five.XRPanoramaControllerCustomInitArgs.html +1 -1
- package/docs/interfaces/five.XRSessionEvent.html +1 -1
- 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/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/index.js +5 -5
- package/five/index.mjs +65 -65
- 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/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 +2 -0
- package/plugins/index.js +24 -4
- package/plugins/index.mjs +557 -393
- package/plugins/thirdParty/CSS2DRenderer.d.ts +37 -0
- package/react/autoCanvas.d.ts +9 -0
- package/react/fiveApp.d.ts +22 -0
- package/react/hooks/useFivePlugin.d.ts +26 -0
- package/react/index.d.ts +4 -0
- package/react/index.js +3 -3
- package/react/index.mjs +291 -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 +5 -5
- 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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"
|