@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.
Files changed (216) hide show
  1. package/ai_guides/features/flowing-light-2d-pass.md +64 -10
  2. package/ai_guides/features/flowing-light-3d-pass.md +64 -10
  3. package/docs/assets/hierarchy.js +1 -1
  4. package/docs/assets/navigation.js +1 -1
  5. package/docs/assets/search.js +1 -1
  6. package/docs/classes/five.AdaptiveLuminancePass.html +1 -1
  7. package/docs/classes/five.BoundingMesh.html +1 -1
  8. package/docs/classes/five.Camera.html +1 -1
  9. package/docs/classes/five.EyeDomeLightingPass.html +1 -1
  10. package/docs/classes/five.Five.html +1 -1
  11. package/docs/classes/five.FivePass.html +1 -1
  12. package/docs/classes/five.InternalWebGLRenderer.html +1 -1
  13. package/docs/classes/five.Model.html +1 -1
  14. package/docs/classes/five.ModelScene.html +1 -1
  15. package/docs/classes/five.NetworkSubscribe.html +1 -1
  16. package/docs/classes/five.PBMContainer.html +1 -1
  17. package/docs/classes/five.PBMCustomShader.html +1 -1
  18. package/docs/classes/five.PBMGSObject.html +1 -1
  19. package/docs/classes/five.PBMGroup.html +1 -1
  20. package/docs/classes/five.PBMMesh.html +1 -1
  21. package/docs/classes/five.PBMMeshMaterial.html +1 -1
  22. package/docs/classes/five.PBMPanoFilter.html +1 -1
  23. package/docs/classes/five.PBMPointCloud.html +1 -1
  24. package/docs/classes/five.PBMPointCloudMaterial.html +1 -1
  25. package/docs/classes/five.PBMSkinnedMesh.html +1 -1
  26. package/docs/classes/five.PBMUpdateable.html +1 -1
  27. package/docs/classes/five.PanoCircleMesh.html +1 -1
  28. package/docs/classes/five.PanoCircleMeshCustom.html +1 -1
  29. package/docs/classes/five.PanoCircleMeshSolid.html +1 -1
  30. package/docs/classes/five.Parameter.html +1 -1
  31. package/docs/classes/five.Scene.html +1 -1
  32. package/docs/classes/five.Subscribe.html +1 -1
  33. package/docs/classes/five.Tile3D.html +1 -1
  34. package/docs/classes/five.TileNode.html +1 -1
  35. package/docs/classes/five.TrajectoryNode.html +1 -1
  36. package/docs/classes/five.WorkResolvedObserver.html +1 -1
  37. package/docs/classes/gltf-loader.DDSLoader.html +1 -1
  38. package/docs/classes/gltf-loader.DRACOLoader.html +1 -1
  39. package/docs/classes/gltf-loader.GLTFLoader.html +1 -1
  40. package/docs/classes/gltf-loader.GLTFObject.html +1 -1
  41. package/docs/classes/gltf-loader.THREEGLTFLoader.html +1 -1
  42. package/docs/classes/line.Line.html +1 -1
  43. package/docs/classes/line.LineGeometry.html +1 -1
  44. package/docs/classes/line.LineMaterial.html +1 -1
  45. package/docs/classes/line.LineSegmentsGeometry.html +1 -1
  46. package/docs/classes/line.THREE_Line2.html +1 -1
  47. package/docs/classes/line.THREE_LineSegments2.html +1 -1
  48. package/docs/classes/plugins.BasePlugin.Controller.html +1 -1
  49. package/docs/classes/plugins.CSS2DObject.html +10 -0
  50. package/docs/classes/plugins.CSS2DRenderer.html +7 -0
  51. package/docs/classes/plugins.CSS3DObject.html +1 -1
  52. package/docs/classes/plugins.CSS3DSprite.html +1 -1
  53. package/docs/classes/plugins.Object3DHelperController.html +1 -1
  54. package/docs/classes/plugins.RoundedBoxGeometry.html +1 -1
  55. package/docs/classes/sticker.Sticker.html +1 -1
  56. package/docs/classes/vfx.Airflow.html +1 -1
  57. package/docs/classes/vfx.Flame.html +1 -1
  58. package/docs/classes/vfx.Particle.html +1 -1
  59. package/docs/classes/vfx.ParticleGPU.html +1 -1
  60. package/docs/classes/vfx.SpotLight.html +1 -1
  61. package/docs/documents/features_flowing-light-2d-pass.html +28 -15
  62. package/docs/documents/features_flowing-light-3d-pass.html +27 -14
  63. package/docs/functions/plugins.CSS2DPlugin.html +1 -0
  64. package/docs/functions/react.getPlugin.html +2 -0
  65. package/docs/functions/react.setPlugin.html +2 -0
  66. package/docs/functions/react.useFivePlugin.html +8 -0
  67. package/docs/functions/react.withFive.html +1 -1
  68. package/docs/hierarchy.html +1 -1
  69. package/docs/interfaces/five.AddableObject.html +1 -1
  70. package/docs/interfaces/five.AjaxOptions.html +1 -1
  71. package/docs/interfaces/five.BaseEvent.html +1 -1
  72. package/docs/interfaces/five.BaseExtendableEvent.html +1 -1
  73. package/docs/interfaces/five.EventCallback.html +1 -1
  74. package/docs/interfaces/five.GestureEvent.html +1 -1
  75. package/docs/interfaces/five.ImageOptions.html +1 -1
  76. package/docs/interfaces/five.IntersectEvent.html +1 -1
  77. package/docs/interfaces/five.IntersectMesh.html +1 -1
  78. package/docs/interfaces/five.IntersectMeshInterface.html +1 -1
  79. package/docs/interfaces/five.Intersection.html +1 -1
  80. package/docs/interfaces/five.LooseWorkWithExtrinsics.html +1 -1
  81. package/docs/interfaces/five.ModeChangeEvent.html +1 -1
  82. package/docs/interfaces/five.ModelControllerCustomInitArgs.html +1 -1
  83. package/docs/interfaces/five.ModelEvent.html +1 -1
  84. package/docs/interfaces/five.ModelSceneEvent.html +1 -1
  85. package/docs/interfaces/five.ModelTileEvent.html +1 -1
  86. package/docs/interfaces/five.MovePanoOptions.html +1 -1
  87. package/docs/interfaces/five.NetworkAbortError.html +1 -1
  88. package/docs/interfaces/five.NetworkFirbiddenError.html +1 -1
  89. package/docs/interfaces/five.NetworkOptions.html +1 -1
  90. package/docs/interfaces/five.NetworkProxyError.html +1 -1
  91. package/docs/interfaces/five.NetworkResourceEvent.html +1 -1
  92. package/docs/interfaces/five.NetworkResponseError.html +1 -1
  93. package/docs/interfaces/five.NetworkTimeoutError.html +1 -1
  94. package/docs/interfaces/five.ObjectEvent.html +1 -1
  95. package/docs/interfaces/five.PBMMaterial.html +1 -1
  96. package/docs/interfaces/five.PBMMeshMaterialParameters.html +1 -1
  97. package/docs/interfaces/five.PBMPointCloudMaterialParameters.html +1 -1
  98. package/docs/interfaces/five.PanoCircleMeshInterface.html +1 -1
  99. package/docs/interfaces/five.PanoEvent.html +1 -1
  100. package/docs/interfaces/five.PanoPrepareEvent.html +1 -1
  101. package/docs/interfaces/five.PanoTextureEvent.html +1 -1
  102. package/docs/interfaces/five.PanoramaControllerCustomInitArgs.html +1 -1
  103. package/docs/interfaces/five.PanoramaLikeControllerCustomInitArgs.html +1 -1
  104. package/docs/interfaces/five.ParameterMaterialValue.html +1 -1
  105. package/docs/interfaces/five.ParameterTilesetValue.html +1 -1
  106. package/docs/interfaces/five.ParameterValue.html +1 -1
  107. package/docs/interfaces/five.Pose.html +1 -1
  108. package/docs/interfaces/five.RenderEvent.html +1 -1
  109. package/docs/interfaces/five.ResolvedParameterValue.html +1 -1
  110. package/docs/interfaces/five.State.html +1 -1
  111. package/docs/interfaces/five.StateEvent.html +1 -1
  112. package/docs/interfaces/five.TextureOptions.html +1 -1
  113. package/docs/interfaces/five.TopviewControllerCustomInitArgs.html +1 -1
  114. package/docs/interfaces/five.VRPanoramaControllerCustomInitArgs.html +1 -1
  115. package/docs/interfaces/five.ViewLayer.html +1 -1
  116. package/docs/interfaces/five.WorkCubeImage.html +1 -1
  117. package/docs/interfaces/five.WorkImage.html +1 -1
  118. package/docs/interfaces/five.WorkObserver.html +1 -1
  119. package/docs/interfaces/five.WorkObserverProto.html +1 -1
  120. package/docs/interfaces/five.WorkTile.html +1 -1
  121. package/docs/interfaces/five.WorksEvent.html +1 -1
  122. package/docs/interfaces/five.XRControllerEvent.html +1 -1
  123. package/docs/interfaces/five.XRGestureEvent.html +1 -1
  124. package/docs/interfaces/five.XRPanoramaControllerCustomInitArgs.html +1 -1
  125. package/docs/interfaces/five.XRSessionEvent.html +1 -1
  126. package/docs/interfaces/plugins.BackgroundPluginController.html +1 -1
  127. package/docs/interfaces/plugins.BackgroundPluginType.EventMap.html +1 -1
  128. package/docs/interfaces/plugins.BasePlugin.State.html +1 -1
  129. package/docs/interfaces/plugins.CSS2DPluginController.html +49 -0
  130. package/docs/interfaces/plugins.CSS2DPluginType.Config.html +2 -0
  131. package/docs/interfaces/plugins.CSS2DPluginType.CreateCSS2DObjectType.html +8 -0
  132. package/docs/interfaces/plugins.CSS2DPluginType.EventMap.html +10 -0
  133. package/docs/interfaces/plugins.CSS2DPluginType.Params.html +4 -0
  134. package/docs/interfaces/plugins.CSS2DPluginType.State.html +8 -0
  135. package/docs/interfaces/plugins.CSS2DRendererParameters.html +2 -0
  136. package/docs/interfaces/plugins.CSS3DPluginController.html +12 -12
  137. package/docs/interfaces/plugins.CSS3DPluginType.EventMap.html +1 -1
  138. package/docs/interfaces/plugins.CSS3DPluginType.State.html +1 -1
  139. package/docs/interfaces/plugins.DynamicPathLinePluginController.html +1 -1
  140. package/docs/interfaces/plugins.DynamicPathLinePluginType.EventMap.html +1 -1
  141. package/docs/interfaces/plugins.DynamicPathLinePluginType.State.html +1 -1
  142. package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationController.html +1 -1
  143. package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.EventMap.html +1 -1
  144. package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.State.html +1 -1
  145. package/docs/interfaces/plugins.ItemMaskController.html +1 -1
  146. package/docs/interfaces/plugins.ItemMaskPluginType.EventMap.html +1 -1
  147. package/docs/interfaces/plugins.ItemMaskPluginType.State.html +1 -1
  148. package/docs/interfaces/plugins.Object3DHelperPluginType.BaseController.html +1 -1
  149. package/docs/interfaces/plugins.Object3DHelperPluginType.BaseHelper.html +1 -1
  150. package/docs/interfaces/plugins.Object3DHelperPluginType.BoundingBoxController.html +1 -1
  151. package/docs/interfaces/plugins.Object3DHelperPluginType.MoveController.html +1 -1
  152. package/docs/interfaces/plugins.Object3DHelperPluginType.MoveHelperAbstract.html +1 -1
  153. package/docs/interfaces/plugins.Object3DHelperPluginType.RotateController.html +1 -1
  154. package/docs/interfaces/plugins.Object3DHelperPluginType.RotateHelperAbstract.html +1 -1
  155. package/docs/interfaces/plugins.OrientationPluginController.html +1 -1
  156. package/docs/interfaces/plugins.OrientationPluginType.EventMap.html +1 -1
  157. package/docs/interfaces/plugins.OrientationPluginType.State.html +1 -1
  158. package/docs/interfaces/plugins.PanoAnimeController.html +1 -1
  159. package/docs/interfaces/plugins.PanoAnimePluginType.EventMap.html +1 -1
  160. package/docs/interfaces/plugins.PanoAnimePluginType.State.html +1 -1
  161. package/docs/interfaces/plugins.PluginTemplateType.EventMap.html +1 -1
  162. package/docs/interfaces/plugins.PluginTemplateType.State.html +1 -1
  163. package/docs/interfaces/plugins.TrajectoryController.html +1 -1
  164. package/docs/interfaces/react.FiveAppProps.html +11 -0
  165. package/docs/interfaces/react.FiveInjectionTypes.html +1 -1
  166. package/docs/modules/plugins.CSS2DPluginType.html +1 -0
  167. package/docs/modules/plugins.html +1 -1
  168. package/docs/modules/react.html +1 -1
  169. package/docs/types/five.ParseOptions.html +1 -1
  170. package/docs/types/plugins.BasePlugin.EventMap.html +1 -1
  171. package/docs/types/plugins.CSS2DPluginType.PluginData.html +1 -0
  172. package/docs/types/plugins.CSS2DPluginType.ServerData.html +1 -0
  173. package/docs/variables/react.FiveApp.html +3 -0
  174. package/docs/variables/react.FiveAutoCanvas.html +3 -0
  175. package/five/index.js +5 -5
  176. package/five/index.mjs +65 -65
  177. package/five/renderer/postprocessing/passes/flowing-light-2d-pass.d.ts +6 -1
  178. package/five/renderer/postprocessing/passes/flowing-light-3d-pass.d.ts +3 -1
  179. package/gltf-loader/index.js +3 -3
  180. package/gltf-loader/index.mjs +3 -3
  181. package/line/index.js +3 -3
  182. package/line/index.mjs +3 -3
  183. package/package.json +1 -1
  184. package/plugins/CSS2DPlugin/Controller.d.ts +59 -0
  185. package/plugins/CSS2DPlugin/index.d.ts +5 -0
  186. package/plugins/CSS2DPlugin/typing.d.ts +30 -0
  187. package/plugins/index.d.ts +2 -0
  188. package/plugins/index.js +24 -4
  189. package/plugins/index.mjs +557 -393
  190. package/plugins/thirdParty/CSS2DRenderer.d.ts +37 -0
  191. package/react/autoCanvas.d.ts +9 -0
  192. package/react/fiveApp.d.ts +22 -0
  193. package/react/hooks/useFivePlugin.d.ts +26 -0
  194. package/react/index.d.ts +4 -0
  195. package/react/index.js +3 -3
  196. package/react/index.mjs +291 -175
  197. package/react/withFive.d.ts +1 -1
  198. package/shader-lib/index.js +2 -2
  199. package/shader-lib/index.mjs +2 -2
  200. package/sticker/index.js +3 -3
  201. package/sticker/index.mjs +3 -3
  202. package/umd/five-gltf-loader.js +3 -3
  203. package/umd/five-line.js +3 -3
  204. package/umd/five-plugins.js +24 -4
  205. package/umd/five-react.js +3 -3
  206. package/umd/five-shader-lib.js +2 -2
  207. package/umd/five-sticker.js +3 -3
  208. package/umd/five-vfx.js +2 -2
  209. package/umd/five-vue.js +2 -2
  210. package/umd/five.js +5 -5
  211. package/vfx/index.js +2 -2
  212. package/vfx/index.mjs +2 -2
  213. package/vue/index.js +2 -2
  214. package/vue/index.mjs +2 -2
  215. package/work-downloader/index.js +2 -2
  216. 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
- delay?: number; // 动画延迟(毫秒)
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
- // 修改单条线的参数(通过 id)
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
- | `delay` | `number` | | `0` | 动画延迟(毫秒)。延迟后才开始播放动画。 |
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
- delay: 500,
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
- delay: 500,
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
- delay: 2000,
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
- delay: i * 200,
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/delay | ⚡️ 极快 (~100x) | 只更新 instanceMeta attribute |
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
- delay?: number; // 动画延迟(毫秒)
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
- // 修改单条线的参数(通过 id)
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
- | `delay` | `number` | | `0` | 动画延迟(毫秒)。延迟后才开始播放动画。 |
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
- delay: 500,
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
- delay: 500,
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
- delay: 1000,
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
- delay: i * 200,
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/delay | ⚡️ 极快 (~100x) | 只更新 instanceMeta attribute |
418
+ | 只修改 duration/startTime | ⚡️ 极快 (~100x) | 只更新 instanceMeta attribute |
365
419
  | 只修改 lineWidth | ⚡️ 极快 (~100x) | 只更新 instanceData attribute |
366
420
  | 修改 points (相同数量) | ⚡️ 快 (~50x) | 只更新 instanceStart/End attributes |
367
421
  | 修改 points (不同数量) | ⚠️ 慢 | 重建整个 mesh |
@@ -1 +1 @@
1
- window.hierarchyData = "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"
1
+ window.hierarchyData = "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"
@@ -1 +1 @@
1
- window.navigationData = "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"
1
+ window.navigationData = "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"