@realsee/five 6.9.0-alpha.0 → 6.9.0-alpha.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 (266) hide show
  1. package/ai_guides/3dgs-current-branch-changes.md +237 -0
  2. package/docs/assets/hierarchy.js +1 -1
  3. package/docs/assets/highlight.css +18 -18
  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 +4 -4
  11. package/docs/classes/five.FivePass.html +1 -1
  12. package/docs/classes/five.FlowingFireworks3DPass.html +30 -0
  13. package/docs/classes/five.FlowingLight2DPass.html +1 -1
  14. package/docs/classes/five.FlowingLight3DPass.html +1 -1
  15. package/docs/classes/five.GaussianBlurPass.html +1 -1
  16. package/docs/classes/five.InternalWebGLRenderer.html +1 -1
  17. package/docs/classes/five.Model.html +2 -2
  18. package/docs/classes/five.ModelScene.html +1 -1
  19. package/docs/classes/five.NetworkSubscribe.html +2 -2
  20. package/docs/classes/five.PBMContainer.html +1 -1
  21. package/docs/classes/five.PBMCustomShader.html +2 -2
  22. package/docs/classes/five.PBMGSObject.html +7 -7
  23. package/docs/classes/five.PBMGroup.html +1 -1
  24. package/docs/classes/five.PBMMesh.html +1 -1
  25. package/docs/classes/five.PBMMeshMaterial.html +1 -1
  26. package/docs/classes/five.PBMPanoFilter.html +2 -2
  27. package/docs/classes/five.PBMPointCloud.html +1 -1
  28. package/docs/classes/five.PBMPointCloudMaterial.html +1 -1
  29. package/docs/classes/five.PBMSkinnedMesh.html +1 -1
  30. package/docs/classes/five.PBMUpdateable.html +2 -2
  31. package/docs/classes/five.PanoCircleMesh.html +1 -1
  32. package/docs/classes/five.PanoCircleMeshCustom.html +1 -1
  33. package/docs/classes/five.PanoCircleMeshSolid.html +1 -1
  34. package/docs/classes/five.Parameter.html +1 -1
  35. package/docs/classes/five.Scene.html +1 -1
  36. package/docs/classes/five.Subscribe.html +2 -2
  37. package/docs/classes/five.Tile3D.html +1 -1
  38. package/docs/classes/five.TileNode.html +1 -1
  39. package/docs/classes/five.TrajectoryNode.html +1 -1
  40. package/docs/classes/five.WorkResolvedObserver.html +2 -2
  41. package/docs/classes/gltf-loader.DDSLoader.html +1 -1
  42. package/docs/classes/gltf-loader.DRACOLoader.html +1 -1
  43. package/docs/classes/gltf-loader.GLTFLoader.html +2 -2
  44. package/docs/classes/gltf-loader.GLTFObject.html +1 -1
  45. package/docs/classes/gltf-loader.THREEGLTFLoader.html +1 -1
  46. package/docs/classes/line.Line.html +1 -1
  47. package/docs/classes/line.LineGeometry.html +1 -1
  48. package/docs/classes/line.LineMaterial.html +1 -1
  49. package/docs/classes/line.LineSegmentsGeometry.html +1 -1
  50. package/docs/classes/line.THREE_Line2.html +1 -1
  51. package/docs/classes/line.THREE_LineSegments2.html +1 -1
  52. package/docs/classes/plugins.BasePlugin.Controller.html +1 -1
  53. package/docs/classes/plugins.CSS2DObject.html +1 -1
  54. package/docs/classes/plugins.CSS3DObject.html +1 -1
  55. package/docs/classes/plugins.CSS3DSprite.html +1 -1
  56. package/docs/classes/plugins.InstancedPrefabBufferGeometry.html +1 -1
  57. package/docs/classes/plugins.Object3DHelperController.html +1 -1
  58. package/docs/classes/plugins.PointBufferGeometry.html +1 -1
  59. package/docs/classes/plugins.PrefabBufferGeometry.html +1 -1
  60. package/docs/classes/plugins.RoundedBoxGeometry.html +1 -1
  61. package/docs/classes/react.Store.html +1 -1
  62. package/docs/classes/sticker.Sticker.html +2 -2
  63. package/docs/classes/vfx.Airflow.html +1 -1
  64. package/docs/classes/vfx.Flame.html +1 -1
  65. package/docs/classes/vfx.Particle.html +1 -1
  66. package/docs/classes/vfx.ParticleGPU.html +1 -1
  67. package/docs/classes/vfx.SpotLight.html +1 -1
  68. package/docs/documents/3dgs-current-branch-changes.html +205 -0
  69. package/docs/documents/api.html +6 -6
  70. package/docs/documents/features_3dtile.html +4 -4
  71. package/docs/documents/features_camera-animation.html +10 -10
  72. package/docs/documents/features_clipper.html +3 -3
  73. package/docs/documents/features_coordinate-system.html +3 -3
  74. package/docs/documents/features_event.html +10 -10
  75. package/docs/documents/features_five.html +4 -4
  76. package/docs/documents/features_flowing-fireworks-3d-pass.html +7 -7
  77. package/docs/documents/features_flowing-light-2d-pass.html +11 -11
  78. package/docs/documents/features_flowing-light-3d-pass.html +11 -11
  79. package/docs/documents/features_gaussian-blur-pass.html +6 -6
  80. package/docs/documents/features_gesture.html +6 -6
  81. package/docs/documents/features_get-screen-pixels.html +4 -4
  82. package/docs/documents/features_image-options.html +5 -5
  83. package/docs/documents/features_load-external-model.html +8 -8
  84. package/docs/documents/features_load-progress.html +7 -7
  85. package/docs/documents/features_material.html +3 -3
  86. package/docs/documents/features_mode.html +11 -11
  87. package/docs/documents/features_model.html +4 -4
  88. package/docs/documents/features_move-pano-effect.html +5 -5
  89. package/docs/documents/features_multi-work.html +5 -5
  90. package/docs/documents/features_pano-filter.html +3 -3
  91. package/docs/documents/features_pano-tile.html +4 -4
  92. package/docs/documents/features_pano-uv.html +4 -4
  93. package/docs/documents/features_parameter.html +7 -7
  94. package/docs/documents/features_plugin.html +4 -4
  95. package/docs/documents/features_postprocessing.html +5 -5
  96. package/docs/documents/features_raycast.html +4 -4
  97. package/docs/documents/features_request-proxy.html +4 -4
  98. package/docs/documents/features_screen-project.html +3 -3
  99. package/docs/documents/features_state.html +4 -4
  100. package/docs/documents/features_view-layer.html +4 -4
  101. package/docs/documents/features_work.html +5 -5
  102. package/docs/documents/quick-start.html +2 -2
  103. package/docs/documents/release_notes_6.6.html +4 -4
  104. package/docs/documents/release_notes_6.7.html +14 -14
  105. package/docs/documents/release_notes_6.8.html +4 -4
  106. package/docs/functions/react.useFiveAction.html +6 -6
  107. package/docs/functions/react.useFiveCurrentObserver.html +1 -1
  108. package/docs/functions/react.useFiveCurrentState.html +1 -1
  109. package/docs/functions/react.useFiveEventCallback.html +1 -1
  110. package/docs/functions/react.useFiveFloor.html +1 -1
  111. package/docs/functions/react.useFiveHelper.html +1 -1
  112. package/docs/functions/react.useFiveModelIntersectRaycaster.html +2 -2
  113. package/docs/functions/react.useFiveProject2d.html +2 -2
  114. package/docs/functions/react.useFiveSceneEffect.html +1 -1
  115. package/docs/functions/react.useFiveWork.html +2 -2
  116. package/docs/functions/vue.useFiveAction.html +8 -8
  117. package/docs/functions/vue.useFiveCurrentObserver.html +1 -1
  118. package/docs/functions/vue.useFiveCurrentState.html +1 -1
  119. package/docs/functions/vue.useFiveEventCallback.html +1 -1
  120. package/docs/functions/vue.useFiveFloor.html +1 -1
  121. package/docs/functions/vue.useFiveHelper.html +1 -1
  122. package/docs/functions/vue.useFiveModelIntersectRaycaster.html +2 -2
  123. package/docs/functions/vue.useFiveProject2d.html +2 -2
  124. package/docs/functions/vue.useFiveState.html +1 -1
  125. package/docs/functions/vue.useFiveWorks.html +2 -2
  126. package/docs/hierarchy.html +1 -1
  127. package/docs/interfaces/five.AddableObject.html +1 -1
  128. package/docs/interfaces/five.AjaxOptions.html +1 -1
  129. package/docs/interfaces/five.BaseEvent.html +1 -1
  130. package/docs/interfaces/five.BaseExtendableEvent.html +1 -1
  131. package/docs/interfaces/five.EventCallback.html +1 -1
  132. package/docs/interfaces/five.FiveInitArgs.html +2 -2
  133. package/docs/interfaces/five.GestureEvent.html +1 -1
  134. package/docs/interfaces/five.ImageOptions.html +1 -1
  135. package/docs/interfaces/five.IntersectEvent.html +1 -1
  136. package/docs/interfaces/five.IntersectMesh.html +1 -1
  137. package/docs/interfaces/five.IntersectMeshInterface.html +1 -1
  138. package/docs/interfaces/five.Intersection.html +1 -1
  139. package/docs/interfaces/five.LooseWorkWithExtrinsics.html +1 -1
  140. package/docs/interfaces/five.ModeChangeEvent.html +1 -1
  141. package/docs/interfaces/five.ModelControllerCustomInitArgs.html +1 -1
  142. package/docs/interfaces/five.ModelEvent.html +1 -1
  143. package/docs/interfaces/five.ModelSceneEvent.html +1 -1
  144. package/docs/interfaces/five.ModelTileEvent.html +1 -1
  145. package/docs/interfaces/five.MovePanoOptions.html +1 -1
  146. package/docs/interfaces/five.NetworkAbortError.html +1 -1
  147. package/docs/interfaces/five.NetworkFirbiddenError.html +1 -1
  148. package/docs/interfaces/five.NetworkOptions.html +1 -1
  149. package/docs/interfaces/five.NetworkProxyError.html +1 -1
  150. package/docs/interfaces/five.NetworkResourceEvent.html +1 -1
  151. package/docs/interfaces/five.NetworkResponseError.html +1 -1
  152. package/docs/interfaces/five.NetworkTimeoutError.html +1 -1
  153. package/docs/interfaces/five.ObjectEvent.html +1 -1
  154. package/docs/interfaces/five.PBMMaterial.html +1 -1
  155. package/docs/interfaces/five.PBMMeshMaterialParameters.html +1 -1
  156. package/docs/interfaces/five.PBMPointCloudMaterialParameters.html +1 -1
  157. package/docs/interfaces/five.PanoCircleMeshInterface.html +1 -1
  158. package/docs/interfaces/five.PanoEvent.html +1 -1
  159. package/docs/interfaces/five.PanoPrepareEvent.html +1 -1
  160. package/docs/interfaces/five.PanoTextureEvent.html +1 -1
  161. package/docs/interfaces/five.PanoramaControllerCustomInitArgs.html +1 -1
  162. package/docs/interfaces/five.PanoramaLikeControllerCustomInitArgs.html +1 -1
  163. package/docs/interfaces/five.ParameterMaterialValue.html +1 -1
  164. package/docs/interfaces/five.ParameterTilesetValue.html +1 -1
  165. package/docs/interfaces/five.ParameterValue.html +1 -1
  166. package/docs/interfaces/five.Pose.html +1 -1
  167. package/docs/interfaces/five.RenderEvent.html +1 -1
  168. package/docs/interfaces/five.ResolvedParameterValue.html +1 -1
  169. package/docs/interfaces/five.State.html +1 -1
  170. package/docs/interfaces/five.StateEvent.html +1 -1
  171. package/docs/interfaces/five.TextureOptions.html +1 -1
  172. package/docs/interfaces/five.TopviewControllerCustomInitArgs.html +1 -1
  173. package/docs/interfaces/five.VRPanoramaControllerCustomInitArgs.html +1 -1
  174. package/docs/interfaces/five.ViewLayer.html +1 -1
  175. package/docs/interfaces/five.WorkCubeImage.html +1 -1
  176. package/docs/interfaces/five.WorkImage.html +1 -1
  177. package/docs/interfaces/five.WorkObserver.html +2 -2
  178. package/docs/interfaces/five.WorkObserverProto.html +1 -1
  179. package/docs/interfaces/five.WorkTile.html +1 -1
  180. package/docs/interfaces/five.WorksEvent.html +1 -1
  181. package/docs/interfaces/five.XRControllerEvent.html +1 -1
  182. package/docs/interfaces/five.XRGestureEvent.html +1 -1
  183. package/docs/interfaces/five.XRPanoramaControllerCustomInitArgs.html +1 -1
  184. package/docs/interfaces/five.XRSessionEvent.html +1 -1
  185. package/docs/interfaces/plugins.BackgroundPluginController.html +1 -1
  186. package/docs/interfaces/plugins.BackgroundPluginType.EventMap.html +1 -1
  187. package/docs/interfaces/plugins.BasePlugin.State.html +1 -1
  188. package/docs/interfaces/plugins.CSS2DPluginController.html +1 -1
  189. package/docs/interfaces/plugins.CSS2DPluginType.EventMap.html +1 -1
  190. package/docs/interfaces/plugins.CSS2DPluginType.State.html +1 -1
  191. package/docs/interfaces/plugins.CSS3DPluginController.html +1 -1
  192. package/docs/interfaces/plugins.CSS3DPluginType.EventMap.html +1 -1
  193. package/docs/interfaces/plugins.CSS3DPluginType.State.html +1 -1
  194. package/docs/interfaces/plugins.DynamicPathLinePluginController.html +1 -1
  195. package/docs/interfaces/plugins.DynamicPathLinePluginType.EventMap.html +1 -1
  196. package/docs/interfaces/plugins.DynamicPathLinePluginType.State.html +1 -1
  197. package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationController.html +1 -1
  198. package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.EventMap.html +1 -1
  199. package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.State.html +1 -1
  200. package/docs/interfaces/plugins.ItemMaskController.html +1 -1
  201. package/docs/interfaces/plugins.ItemMaskPluginType.EventMap.html +1 -1
  202. package/docs/interfaces/plugins.ItemMaskPluginType.State.html +1 -1
  203. package/docs/interfaces/plugins.Object3DHelperPluginType.BaseController.html +1 -1
  204. package/docs/interfaces/plugins.Object3DHelperPluginType.BaseHelper.html +1 -1
  205. package/docs/interfaces/plugins.Object3DHelperPluginType.BoundingBoxController.html +1 -1
  206. package/docs/interfaces/plugins.Object3DHelperPluginType.MoveController.html +1 -1
  207. package/docs/interfaces/plugins.Object3DHelperPluginType.MoveHelperAbstract.html +1 -1
  208. package/docs/interfaces/plugins.Object3DHelperPluginType.RotateController.html +1 -1
  209. package/docs/interfaces/plugins.Object3DHelperPluginType.RotateHelperAbstract.html +1 -1
  210. package/docs/interfaces/plugins.OrientationPluginController.html +1 -1
  211. package/docs/interfaces/plugins.OrientationPluginType.EventMap.html +1 -1
  212. package/docs/interfaces/plugins.OrientationPluginType.State.html +1 -1
  213. package/docs/interfaces/plugins.PanoAnimeController.html +1 -1
  214. package/docs/interfaces/plugins.PanoAnimePluginType.EventMap.html +1 -1
  215. package/docs/interfaces/plugins.PanoAnimePluginType.State.html +1 -1
  216. package/docs/interfaces/plugins.PluginTemplateType.EventMap.html +1 -1
  217. package/docs/interfaces/plugins.PluginTemplateType.State.html +1 -1
  218. package/docs/interfaces/plugins.TrajectoryController.html +1 -1
  219. package/docs/interfaces/react.FiveInjectionTypes.html +2 -2
  220. package/docs/interfaces/react.UseFivePluginOptions.html +1 -1
  221. package/docs/interfaces/react.UseFivePluginOptionsWithCreate.html +1 -1
  222. package/docs/modules/five.html +1 -1
  223. package/docs/modules.html +1 -1
  224. package/docs/types/five.FlowingFireworks3DPassLine.html +16 -0
  225. package/docs/types/five.ParseOptions.html +1 -1
  226. package/docs/types/plugins.BasePlugin.EventMap.html +1 -1
  227. package/docs/variables/react.FiveCanvas.html +1 -1
  228. package/docs/variables/react.useFiveScene.html +1 -1
  229. package/docs/variables/vue.FiveCanvas.html +1 -1
  230. package/docs/variables/vue.FiveProvider.html +1 -1
  231. package/five/index.js +177 -106
  232. package/five/index.mjs +795 -639
  233. package/five/model/objects/pbmGaussianSplattingObject.d.ts +5 -5
  234. package/five/renderer/index.d.ts +1 -1
  235. package/five/renderer/postprocessing/index.d.ts +1 -1
  236. package/five/renderer/postprocessing/passes/flowing-fireworks-3d-pass.d.ts +4 -5
  237. package/gltf-loader/index.js +3 -3
  238. package/gltf-loader/index.mjs +3 -3
  239. package/line/index.js +3 -3
  240. package/line/index.mjs +3 -3
  241. package/package.json +1 -1
  242. package/{pbmGaussianSplattingObject-B2uXNUOB.cjs → pbmGaussianSplattingObject-C6i7CUTu.cjs} +3 -3
  243. package/{pbmGaussianSplattingObject-yJQySQfR.js → pbmGaussianSplattingObject-CaE6q4r-.js} +16 -20
  244. package/plugins/index.js +2 -2
  245. package/plugins/index.mjs +2 -2
  246. package/react/index.js +2 -2
  247. package/react/index.mjs +2 -2
  248. package/shader-lib/index.js +2 -2
  249. package/shader-lib/index.mjs +2 -2
  250. package/sticker/index.js +3 -3
  251. package/sticker/index.mjs +3 -3
  252. package/umd/five-gltf-loader.js +3 -3
  253. package/umd/five-line.js +3 -3
  254. package/umd/five-plugins.js +2 -2
  255. package/umd/five-react.js +2 -2
  256. package/umd/five-shader-lib.js +2 -2
  257. package/umd/five-sticker.js +3 -3
  258. package/umd/five-vfx.js +2 -2
  259. package/umd/five-vue.js +2 -2
  260. package/umd/five.js +151 -80
  261. package/vfx/index.js +2 -2
  262. package/vfx/index.mjs +2 -2
  263. package/vue/index.js +2 -2
  264. package/vue/index.mjs +2 -2
  265. package/work-downloader/index.js +2 -2
  266. package/work-downloader/index.mjs +2 -2
@@ -11,7 +11,7 @@
11
11
  <p><strong>Definition</strong>: <a href="../../five/renderer/postprocessing/passes/flowing-light-2d-pass.d.ts">FlowingLight2DPass</a></p>
12
12
  </blockquote>
13
13
  <p><code>FlowingLight2DPass</code> 是 <code>FivePass</code> 的子类,核心接口如下:</p>
14
- <pre><code class="ts"><span class="hl-10">import</span><span class="hl-1"> </span><span class="hl-3">*</span><span class="hl-1"> </span><span class="hl-10">as</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1"> </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-9">&#39;three&#39;</span><span class="hl-1">;</span><br/><span class="hl-10">import</span><span class="hl-1"> { </span><span class="hl-6">FivePass</span><span class="hl-1"> } </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-9">&#39;./pass&#39;</span><span class="hl-1">;</span><br/><span class="hl-10">import</span><span class="hl-1"> { </span><span class="hl-10">type</span><span class="hl-1"> </span><span class="hl-6">Camera</span><span class="hl-1"> } </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-9">&#39;../../../core/camera&#39;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">type</span><span class="hl-1"> </span><span class="hl-7">Line</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-6">id</span><span class="hl-1">?: </span><span class="hl-7">string</span><span class="hl-1">; </span><span class="hl-8">// 可选的唯一标识符,不传则自动生成 UUID</span><br/><span class="hl-1"> </span><span class="hl-6">points</span><span class="hl-1">: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">Vector2</span><span class="hl-1">[]; </span><span class="hl-8">// 归一化坐标路径点 [0, 1]</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength</span><span class="hl-1">: </span><span class="hl-7">number</span><span class="hl-1">; </span><span class="hl-8">// 路径总长度(归一化单位)</span><br/><span class="hl-1"> </span><span class="hl-6">color</span><span class="hl-1">: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">Color</span><span class="hl-1">; </span><span class="hl-8">// 光带颜色</span><br/><span class="hl-1"> </span><span class="hl-6">opacity</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1">; </span><span class="hl-8">// 光带不透明度(0-1)</span><br/><span class="hl-1"> </span><span class="hl-6">duration</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1">; </span><span class="hl-8">// 动画时长(毫秒)</span><br/><span class="hl-1"> </span><span class="hl-6">startTime</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1">; </span><span class="hl-8">// 线条开始时间(毫秒),默认使用当前内部时间</span><br/><span class="hl-1"> </span><span class="hl-6">lineWidth</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1">; </span><span class="hl-8">// 线宽(归一化单位)</span><br/><span class="hl-1"> </span><span class="hl-6">tailLengthRatio</span><span class="hl-1">?: </span><span class="hl-7">number</span><span class="hl-1">; </span><span class="hl-8">// 尾巴长度比例(0-1),默认 0.2</span><br/><span class="hl-1">};</span><br/><br/><span class="hl-10">export</span><span class="hl-1"> </span><span class="hl-3">class</span><span class="hl-1"> </span><span class="hl-7">FlowingLight2DPass</span><span class="hl-1"> </span><span class="hl-3">extends</span><span class="hl-1"> </span><span class="hl-7">FivePass</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-3">constructor</span><span class="hl-1">(</span><span class="hl-6">camera</span><span class="hl-1">: </span><span class="hl-7">Camera</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-8">// 批量设置路径列表(替换所有现有线条)</span><br/><span class="hl-1"> </span><span class="hl-3">public</span><span class="hl-1"> </span><span class="hl-5">setLines</span><span class="hl-1">(</span><span class="hl-6">lines</span><span class="hl-1">: </span><span class="hl-7">Line</span><span class="hl-1">[]): </span><span class="hl-7">void</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-8">// 追加一条或多条线,返回生成的 id 数组</span><br/><span class="hl-1"> </span><span class="hl-3">public</span><span class="hl-1"> </span><span class="hl-5">addLine</span><span class="hl-1">(...</span><span class="hl-6">lines</span><span class="hl-1">: </span><span class="hl-7">Line</span><span class="hl-1">[]): </span><span class="hl-7">string</span><span class="hl-1">[];</span><br/><br/><span class="hl-1"> </span><span class="hl-8">// 按 id 移除一条或多条线,返回实际移除的数量</span><br/><span class="hl-1"> </span><span class="hl-3">public</span><span class="hl-1"> </span><span class="hl-5">removeLine</span><span class="hl-1">(...</span><span class="hl-6">ids</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1">[]): </span><span class="hl-7">number</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-8">// 修改单条线的参数(通过 id),支持部分更新</span><br/><span class="hl-1"> </span><span class="hl-3">public</span><span class="hl-1"> </span><span class="hl-5">setLine</span><span class="hl-1">(</span><span class="hl-6">params</span><span class="hl-1">: { </span><span class="hl-6">id</span><span class="hl-1">: </span><span class="hl-7">string</span><span class="hl-1"> } &amp; </span><span class="hl-7">Partial</span><span class="hl-1">&lt;</span><span class="hl-7">Omit</span><span class="hl-1">&lt;</span><span class="hl-7">Line</span><span class="hl-1">, </span><span class="hl-9">&#39;id&#39;</span><span class="hl-1">&gt;&gt;): </span><span class="hl-7">void</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-3">public</span><span class="hl-1"> </span><span class="hl-5">render</span><span class="hl-1">(</span><br/><span class="hl-1"> </span><span class="hl-6">renderer</span><span class="hl-1">: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">WebGLRenderer</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">writeBuffer</span><span class="hl-1">: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">WebGLRenderTarget</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">readBuffer</span><span class="hl-1">: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">WebGLRenderTarget</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">deltaTime</span><span class="hl-1">: </span><span class="hl-7">number</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">maskActive</span><span class="hl-1">?: </span><span class="hl-7">boolean</span><span class="hl-1">,</span><br/><span class="hl-1"> ): </span><span class="hl-7">void</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-3">public</span><span class="hl-1"> </span><span class="hl-5">dispose</span><span class="hl-1">(): </span><span class="hl-7">void</span><span class="hl-1">;</span><br/><span class="hl-1">}</span>
14
+ <pre><code class="ts"><span class="hl-11">import</span><span class="hl-1"> </span><span class="hl-8">*</span><span class="hl-1"> </span><span class="hl-11">as</span><span class="hl-1"> </span><span class="hl-5">THREE</span><span class="hl-1"> </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">&#39;three&#39;</span><span class="hl-1">;</span><br/><span class="hl-11">import</span><span class="hl-1"> { </span><span class="hl-5">FivePass</span><span class="hl-1"> } </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">&#39;./pass&#39;</span><span class="hl-1">;</span><br/><span class="hl-11">import</span><span class="hl-1"> { </span><span class="hl-11">type</span><span class="hl-1"> </span><span class="hl-5">Camera</span><span class="hl-1"> } </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">&#39;../../../core/camera&#39;</span><span class="hl-1">;</span><br/><br/><span class="hl-8">type</span><span class="hl-1"> </span><span class="hl-9">Line</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">id</span><span class="hl-1">?: </span><span class="hl-9">string</span><span class="hl-1">; </span><span class="hl-7">// 可选的唯一标识符,不传则自动生成 UUID</span><br/><span class="hl-1"> </span><span class="hl-5">points</span><span class="hl-1">: </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">Vector2</span><span class="hl-1">[]; </span><span class="hl-7">// 归一化坐标路径点 [0, 1]</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength</span><span class="hl-1">: </span><span class="hl-9">number</span><span class="hl-1">; </span><span class="hl-7">// 路径总长度(归一化单位)</span><br/><span class="hl-1"> </span><span class="hl-5">color</span><span class="hl-1">: </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">Color</span><span class="hl-1">; </span><span class="hl-7">// 光带颜色</span><br/><span class="hl-1"> </span><span class="hl-5">opacity</span><span class="hl-1">?: </span><span class="hl-9">number</span><span class="hl-1">; </span><span class="hl-7">// 光带不透明度(0-1)</span><br/><span class="hl-1"> </span><span class="hl-5">duration</span><span class="hl-1">?: </span><span class="hl-9">number</span><span class="hl-1">; </span><span class="hl-7">// 动画时长(毫秒)</span><br/><span class="hl-1"> </span><span class="hl-5">startTime</span><span class="hl-1">?: </span><span class="hl-9">number</span><span class="hl-1">; </span><span class="hl-7">// 线条开始时间(毫秒),默认使用当前内部时间</span><br/><span class="hl-1"> </span><span class="hl-5">lineWidth</span><span class="hl-1">?: </span><span class="hl-9">number</span><span class="hl-1">; </span><span class="hl-7">// 线宽(归一化单位)</span><br/><span class="hl-1"> </span><span class="hl-5">tailLengthRatio</span><span class="hl-1">?: </span><span class="hl-9">number</span><span class="hl-1">; </span><span class="hl-7">// 尾巴长度比例(0-1),默认 0.2</span><br/><span class="hl-1">};</span><br/><br/><span class="hl-11">export</span><span class="hl-1"> </span><span class="hl-8">class</span><span class="hl-1"> </span><span class="hl-9">FlowingLight2DPass</span><span class="hl-1"> </span><span class="hl-8">extends</span><span class="hl-1"> </span><span class="hl-9">FivePass</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-8">constructor</span><span class="hl-1">(</span><span class="hl-5">camera</span><span class="hl-1">: </span><span class="hl-9">Camera</span><span class="hl-1">);</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 批量设置路径列表(替换所有现有线条)</span><br/><span class="hl-1"> </span><span class="hl-8">public</span><span class="hl-1"> </span><span class="hl-4">setLines</span><span class="hl-1">(</span><span class="hl-5">lines</span><span class="hl-1">: </span><span class="hl-9">Line</span><span class="hl-1">[]): </span><span class="hl-9">void</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 追加一条或多条线,返回生成的 id 数组</span><br/><span class="hl-1"> </span><span class="hl-8">public</span><span class="hl-1"> </span><span class="hl-4">addLine</span><span class="hl-1">(...</span><span class="hl-5">lines</span><span class="hl-1">: </span><span class="hl-9">Line</span><span class="hl-1">[]): </span><span class="hl-9">string</span><span class="hl-1">[];</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 按 id 移除一条或多条线,返回实际移除的数量</span><br/><span class="hl-1"> </span><span class="hl-8">public</span><span class="hl-1"> </span><span class="hl-4">removeLine</span><span class="hl-1">(...</span><span class="hl-5">ids</span><span class="hl-1">: </span><span class="hl-9">string</span><span class="hl-1">[]): </span><span class="hl-9">number</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-7">// 修改单条线的参数(通过 id),支持部分更新</span><br/><span class="hl-1"> </span><span class="hl-8">public</span><span class="hl-1"> </span><span class="hl-4">setLine</span><span class="hl-1">(</span><span class="hl-5">params</span><span class="hl-1">: { </span><span class="hl-5">id</span><span class="hl-1">: </span><span class="hl-9">string</span><span class="hl-1"> } &amp; </span><span class="hl-9">Partial</span><span class="hl-1">&lt;</span><span class="hl-9">Omit</span><span class="hl-1">&lt;</span><span class="hl-9">Line</span><span class="hl-1">, </span><span class="hl-10">&#39;id&#39;</span><span class="hl-1">&gt;&gt;): </span><span class="hl-9">void</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-8">public</span><span class="hl-1"> </span><span class="hl-4">render</span><span class="hl-1">(</span><br/><span class="hl-1"> </span><span class="hl-5">renderer</span><span class="hl-1">: </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">WebGLRenderer</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">writeBuffer</span><span class="hl-1">: </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">WebGLRenderTarget</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">readBuffer</span><span class="hl-1">: </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">WebGLRenderTarget</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">deltaTime</span><span class="hl-1">: </span><span class="hl-9">number</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">maskActive</span><span class="hl-1">?: </span><span class="hl-9">boolean</span><span class="hl-1">,</span><br/><span class="hl-1"> ): </span><span class="hl-9">void</span><span class="hl-1">;</span><br/><br/><span class="hl-1"> </span><span class="hl-8">public</span><span class="hl-1"> </span><span class="hl-4">dispose</span><span class="hl-1">(): </span><span class="hl-9">void</span><span class="hl-1">;</span><br/><span class="hl-1">}</span>
15
15
  </code><button type="button">Copy</button></pre>
16
16
 
17
17
  <h2 id="concepts" class="tsd-anchor-link">Concepts<a href="#concepts" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
@@ -132,19 +132,19 @@
132
132
  <p><strong>自动生成 ID</strong>: 如果 line 没有提供 <code>id</code>,会自动生成 UUID。
133
133
  <strong>自动设置 startTime</strong>: 如果 line 没有提供 <code>startTime</code>,会使用当前内部时间。</p>
134
134
  <p><strong>示例</strong>:</p>
135
- <pre><code class="ts"><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">pathLine</span><span class="hl-1">: </span><span class="hl-7">Line</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-6">id:</span><span class="hl-1"> </span><span class="hl-9">&#39;my-line-1&#39;</span><span class="hl-1">, </span><span class="hl-8">// 可选,不传则自动生成</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.3</span><span class="hl-1">, </span><span class="hl-11">0.7</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.7</span><span class="hl-1">, </span><span class="hl-11">0.7</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.7</span><span class="hl-1">, </span><span class="hl-11">0.3</span><span class="hl-1">),</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength:</span><span class="hl-1"> </span><span class="hl-11">0.8</span><span class="hl-1">, </span><span class="hl-8">// 归一化单位</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-11">0x00c2ff</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">opacity:</span><span class="hl-1"> </span><span class="hl-11">0.8</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">duration:</span><span class="hl-1"> </span><span class="hl-11">2000</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">startTime:</span><span class="hl-1"> </span><span class="hl-11">500</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">lineWidth:</span><span class="hl-1"> </span><span class="hl-11">0.01</span><span class="hl-1">,</span><br/><span class="hl-1">};</span><br/><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">setLines</span><span class="hl-1">([</span><span class="hl-6">pathLine</span><span class="hl-1">]);</span>
135
+ <pre><code class="ts"><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">pathLine</span><span class="hl-1">: </span><span class="hl-9">Line</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">id:</span><span class="hl-1"> </span><span class="hl-10">&#39;my-line-1&#39;</span><span class="hl-1">, </span><span class="hl-7">// 可选,不传则自动生成</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.3</span><span class="hl-1">, </span><span class="hl-3">0.7</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.7</span><span class="hl-1">, </span><span class="hl-3">0.7</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.7</span><span class="hl-1">, </span><span class="hl-3">0.3</span><span class="hl-1">),</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength:</span><span class="hl-1"> </span><span class="hl-3">0.8</span><span class="hl-1">, </span><span class="hl-7">// 归一化单位</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-3">0x00c2ff</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">opacity:</span><span class="hl-1"> </span><span class="hl-3">0.8</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">duration:</span><span class="hl-1"> </span><span class="hl-3">2000</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">startTime:</span><span class="hl-1"> </span><span class="hl-3">500</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-3">0.01</span><span class="hl-1">,</span><br/><span class="hl-1">};</span><br/><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">setLines</span><span class="hl-1">([</span><span class="hl-5">pathLine</span><span class="hl-1">]);</span>
136
136
  </code><button type="button">Copy</button></pre>
137
137
 
138
138
  <h3 id="_-2" class="tsd-anchor-link"><code>addLine(...lines: Line[]): string[]</code><a href="#_-2" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
139
139
  <p>追加一条或多条线到现有列表中,不影响已有线条。返回新增线条的 id 数组。</p>
140
140
  <p><strong>示例</strong>:</p>
141
- <pre><code class="ts"><span class="hl-8">// 追加单条线</span><br/><span class="hl-3">const</span><span class="hl-1"> [</span><span class="hl-4">id1</span><span class="hl-1">] = </span><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">addLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.1</span><span class="hl-1">, </span><span class="hl-11">0.1</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.9</span><span class="hl-1">, </span><span class="hl-11">0.9</span><span class="hl-1">),</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength:</span><span class="hl-1"> </span><span class="hl-11">1.13</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-11">0xff0000</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">duration:</span><span class="hl-1"> </span><span class="hl-11">2000</span><span class="hl-1">,</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-8">// 追加多条线</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">ids</span><span class="hl-1"> = </span><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">addLine</span><span class="hl-1">(</span><br/><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> [...],</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength:</span><span class="hl-1"> </span><span class="hl-11">0.8</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-11">0x00ff00</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">duration:</span><span class="hl-1"> </span><span class="hl-11">1500</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> [...],</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength:</span><span class="hl-1"> </span><span class="hl-11">1.2</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-11">0x0000ff</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">duration:</span><span class="hl-1"> </span><span class="hl-11">1800</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">);</span><br/><span class="hl-8">// ids = [&#39;uuid-1&#39;, &#39;uuid-2&#39;]</span>
141
+ <pre><code class="ts"><span class="hl-7">// 追加单条线</span><br/><span class="hl-8">const</span><span class="hl-1"> [</span><span class="hl-6">id1</span><span class="hl-1">] = </span><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">addLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.1</span><span class="hl-1">, </span><span class="hl-3">0.1</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.9</span><span class="hl-1">, </span><span class="hl-3">0.9</span><span class="hl-1">),</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength:</span><span class="hl-1"> </span><span class="hl-3">1.13</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-3">0xff0000</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">duration:</span><span class="hl-1"> </span><span class="hl-3">2000</span><span class="hl-1">,</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-7">// 追加多条线</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">ids</span><span class="hl-1"> = </span><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">addLine</span><span class="hl-1">(</span><br/><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> [...],</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength:</span><span class="hl-1"> </span><span class="hl-3">0.8</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-3">0x00ff00</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">duration:</span><span class="hl-1"> </span><span class="hl-3">1500</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> [...],</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength:</span><span class="hl-1"> </span><span class="hl-3">1.2</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-3">0x0000ff</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">duration:</span><span class="hl-1"> </span><span class="hl-3">1800</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">);</span><br/><span class="hl-7">// ids = [&#39;uuid-1&#39;, &#39;uuid-2&#39;]</span>
142
142
  </code><button type="button">Copy</button></pre>
143
143
 
144
144
  <h3 id="_-3" class="tsd-anchor-link"><code>removeLine(...ids: string[]): number</code><a href="#_-3" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
145
145
  <p>按 id 移除一条或多条线,返回实际移除的数量。如果 id 不存在,会在控制台输出警告。</p>
146
146
  <p><strong>示例</strong>:</p>
147
- <pre><code class="ts"><span class="hl-8">// 移除单条线</span><br/><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">removeLine</span><span class="hl-1">(</span><span class="hl-6">id1</span><span class="hl-1">);</span><br/><br/><span class="hl-8">// 移除多条线</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">removedCount</span><span class="hl-1"> = </span><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">removeLine</span><span class="hl-1">(</span><span class="hl-6">id1</span><span class="hl-1">, </span><span class="hl-6">id2</span><span class="hl-1">, </span><span class="hl-6">id3</span><span class="hl-1">);</span><br/><span class="hl-6">console</span><span class="hl-1">.</span><span class="hl-5">log</span><span class="hl-1">(</span><span class="hl-9">`移除了 </span><span class="hl-3">${</span><span class="hl-6">removedCount</span><span class="hl-3">}</span><span class="hl-9"> 条线`</span><span class="hl-1">);</span>
147
+ <pre><code class="ts"><span class="hl-7">// 移除单条线</span><br/><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">removeLine</span><span class="hl-1">(</span><span class="hl-5">id1</span><span class="hl-1">);</span><br/><br/><span class="hl-7">// 移除多条线</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">removedCount</span><span class="hl-1"> = </span><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">removeLine</span><span class="hl-1">(</span><span class="hl-5">id1</span><span class="hl-1">, </span><span class="hl-5">id2</span><span class="hl-1">, </span><span class="hl-5">id3</span><span class="hl-1">);</span><br/><span class="hl-5">console</span><span class="hl-1">.</span><span class="hl-4">log</span><span class="hl-1">(</span><span class="hl-10">`移除了 </span><span class="hl-8">${</span><span class="hl-5">removedCount</span><span class="hl-8">}</span><span class="hl-10"> 条线`</span><span class="hl-1">);</span>
148
148
  </code><button type="button">Copy</button></pre>
149
149
 
150
150
  <h3 id="_-4" class="tsd-anchor-link"><code>setLine(params: { id: string } &amp; Partial&lt;Omit&lt;Line, 'id'&gt;&gt;)</code><a href="#_-4" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
@@ -155,7 +155,7 @@
155
155
  <li>如果 <code>points</code> 数量改变,会重建整个 mesh,性能开销较大</li>
156
156
  </ul>
157
157
  <p><strong>示例</strong>:</p>
158
- <pre><code class="ts"><span class="hl-8">// 只修改颜色 - 高性能</span><br/><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">id:</span><span class="hl-1"> </span><span class="hl-9">&#39;my-line-1&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-11">0xff0000</span><span class="hl-1">),</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-8">// 修改多个属性 - 高性能</span><br/><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">id:</span><span class="hl-1"> </span><span class="hl-9">&#39;my-line-1&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-11">0x00ff00</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">opacity:</span><span class="hl-1"> </span><span class="hl-11">0.5</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">duration:</span><span class="hl-1"> </span><span class="hl-11">3000</span><span class="hl-1">,</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-8">// 修改 points (相同数量) - 高性能</span><br/><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">id:</span><span class="hl-1"> </span><span class="hl-9">&#39;my-line-1&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.2</span><span class="hl-1">, </span><span class="hl-11">0.2</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.8</span><span class="hl-1">, </span><span class="hl-11">0.8</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.8</span><span class="hl-1">, </span><span class="hl-11">0.2</span><span class="hl-1">),</span><br/><span class="hl-1"> ], </span><span class="hl-8">// 仍是 3 个点</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength:</span><span class="hl-1"> </span><span class="hl-11">1.2</span><span class="hl-1">,</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-8">// 修改 points (不同数量) - 会重建 mesh</span><br/><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">id:</span><span class="hl-1"> </span><span class="hl-9">&#39;my-line-1&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.2</span><span class="hl-1">, </span><span class="hl-11">0.2</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.8</span><span class="hl-1">, </span><span class="hl-11">0.8</span><span class="hl-1">),</span><br/><span class="hl-1"> ], </span><span class="hl-8">// 从 3 个点变为 2 个点</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength:</span><span class="hl-1"> </span><span class="hl-11">0.85</span><span class="hl-1">,</span><br/><span class="hl-1">});</span>
158
+ <pre><code class="ts"><span class="hl-7">// 只修改颜色 - 高性能</span><br/><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">id:</span><span class="hl-1"> </span><span class="hl-10">&#39;my-line-1&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-3">0xff0000</span><span class="hl-1">),</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-7">// 修改多个属性 - 高性能</span><br/><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">id:</span><span class="hl-1"> </span><span class="hl-10">&#39;my-line-1&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-3">0x00ff00</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">opacity:</span><span class="hl-1"> </span><span class="hl-3">0.5</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">duration:</span><span class="hl-1"> </span><span class="hl-3">3000</span><span class="hl-1">,</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-7">// 修改 points (相同数量) - 高性能</span><br/><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">id:</span><span class="hl-1"> </span><span class="hl-10">&#39;my-line-1&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.2</span><span class="hl-1">, </span><span class="hl-3">0.2</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.8</span><span class="hl-1">, </span><span class="hl-3">0.8</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.8</span><span class="hl-1">, </span><span class="hl-3">0.2</span><span class="hl-1">),</span><br/><span class="hl-1"> ], </span><span class="hl-7">// 仍是 3 个点</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength:</span><span class="hl-1"> </span><span class="hl-3">1.2</span><span class="hl-1">,</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-7">// 修改 points (不同数量) - 会重建 mesh</span><br/><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">id:</span><span class="hl-1"> </span><span class="hl-10">&#39;my-line-1&#39;</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.2</span><span class="hl-1">, </span><span class="hl-3">0.2</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.8</span><span class="hl-1">, </span><span class="hl-3">0.8</span><span class="hl-1">),</span><br/><span class="hl-1"> ], </span><span class="hl-7">// 从 3 个点变为 2 个点</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength:</span><span class="hl-1"> </span><span class="hl-3">0.85</span><span class="hl-1">,</span><br/><span class="hl-1">});</span>
159
159
  </code><button type="button">Copy</button></pre>
160
160
 
161
161
  <p><strong>注意事项</strong>:</p>
@@ -170,23 +170,23 @@
170
170
  <p>释放 InstancedMesh、着色材质和渲染目标资源,避免内存泄漏。销毁 Pass 时必须调用。</p>
171
171
  <h2 id="examples" class="tsd-anchor-link">Examples<a href="#examples" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
172
172
  <h3 id="快速上手-quick-example" class="tsd-anchor-link">快速上手 (Quick Example)<a href="#快速上手-quick-example" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
173
- <pre><code class="typescript"><span class="hl-10">import</span><span class="hl-1"> { </span><span class="hl-6">Five</span><span class="hl-1"> } </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-9">&#39;@realsee/five&#39;</span><span class="hl-1">;</span><br/><span class="hl-10">import</span><span class="hl-1"> { </span><span class="hl-6">FlowingLight2DPass</span><span class="hl-1"> } </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-9">&#39;../../lib/five/renderer/postprocessing&#39;</span><span class="hl-1">;</span><br/><span class="hl-10">import</span><span class="hl-1"> </span><span class="hl-3">*</span><span class="hl-1"> </span><span class="hl-10">as</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1"> </span><span class="hl-10">from</span><span class="hl-1"> </span><span class="hl-9">&#39;three&#39;</span><span class="hl-1">;</span><br/><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">five</span><span class="hl-1"> = </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-5">Five</span><span class="hl-1">();</span><br/><br/><span class="hl-8">// 创建 2D 流光通道</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">flowing2D</span><span class="hl-1"> = </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-5">FlowingLight2DPass</span><span class="hl-1">(</span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">camera</span><span class="hl-1">);</span><br/><br/><span class="hl-8">// 定义一条屏幕空间的路径(归一化坐标)</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">path</span><span class="hl-1"> = [</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.2</span><span class="hl-1">, </span><span class="hl-11">0.2</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.5</span><span class="hl-1">, </span><span class="hl-11">0.8</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.8</span><span class="hl-1">, </span><span class="hl-11">0.2</span><span class="hl-1">),</span><br/><span class="hl-1">];</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">totalLen</span><span class="hl-1"> = </span><span class="hl-11">1.2</span><span class="hl-1">; </span><span class="hl-8">// 归一化单位</span><br/><br/><span class="hl-6">flowing2D</span><span class="hl-1">.</span><span class="hl-5">setLines</span><span class="hl-1">([{</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> </span><span class="hl-6">path</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength:</span><span class="hl-1"> </span><span class="hl-6">totalLen</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-11">0x00ff00</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">opacity:</span><span class="hl-1"> </span><span class="hl-11">0.9</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">duration:</span><span class="hl-1"> </span><span class="hl-11">2000</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">lineWidth:</span><span class="hl-1"> </span><span class="hl-11">0.01</span><span class="hl-1">,</span><br/><span class="hl-1">}]);</span><br/><br/><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">addPass</span><span class="hl-1">(</span><span class="hl-6">flowing2D</span><span class="hl-1">);</span><br/><br/><span class="hl-3">function</span><span class="hl-1"> </span><span class="hl-5">animate</span><span class="hl-1">() {</span><br/><span class="hl-1"> </span><span class="hl-5">requestAnimationFrame</span><span class="hl-1">(</span><span class="hl-6">animate</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">render</span><span class="hl-1">();</span><br/><span class="hl-1">}</span><br/><span class="hl-5">animate</span><span class="hl-1">();</span>
173
+ <pre><code class="typescript"><span class="hl-11">import</span><span class="hl-1"> { </span><span class="hl-5">Five</span><span class="hl-1"> } </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">&#39;@realsee/five&#39;</span><span class="hl-1">;</span><br/><span class="hl-11">import</span><span class="hl-1"> { </span><span class="hl-5">FlowingLight2DPass</span><span class="hl-1"> } </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">&#39;../../lib/five/renderer/postprocessing&#39;</span><span class="hl-1">;</span><br/><span class="hl-11">import</span><span class="hl-1"> </span><span class="hl-8">*</span><span class="hl-1"> </span><span class="hl-11">as</span><span class="hl-1"> </span><span class="hl-5">THREE</span><span class="hl-1"> </span><span class="hl-11">from</span><span class="hl-1"> </span><span class="hl-10">&#39;three&#39;</span><span class="hl-1">;</span><br/><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">five</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">Five</span><span class="hl-1">();</span><br/><br/><span class="hl-7">// 创建 2D 流光通道</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">flowing2D</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">FlowingLight2DPass</span><span class="hl-1">(</span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">camera</span><span class="hl-1">);</span><br/><br/><span class="hl-7">// 定义一条屏幕空间的路径(归一化坐标)</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">path</span><span class="hl-1"> = [</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.2</span><span class="hl-1">, </span><span class="hl-3">0.2</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.5</span><span class="hl-1">, </span><span class="hl-3">0.8</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.8</span><span class="hl-1">, </span><span class="hl-3">0.2</span><span class="hl-1">),</span><br/><span class="hl-1">];</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">totalLen</span><span class="hl-1"> = </span><span class="hl-3">1.2</span><span class="hl-1">; </span><span class="hl-7">// 归一化单位</span><br/><br/><span class="hl-5">flowing2D</span><span class="hl-1">.</span><span class="hl-4">setLines</span><span class="hl-1">([{</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> </span><span class="hl-5">path</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength:</span><span class="hl-1"> </span><span class="hl-5">totalLen</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-3">0x00ff00</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">opacity:</span><span class="hl-1"> </span><span class="hl-3">0.9</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">duration:</span><span class="hl-1"> </span><span class="hl-3">2000</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-3">0.01</span><span class="hl-1">,</span><br/><span class="hl-1">}]);</span><br/><br/><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">addPass</span><span class="hl-1">(</span><span class="hl-5">flowing2D</span><span class="hl-1">);</span><br/><br/><span class="hl-8">function</span><span class="hl-1"> </span><span class="hl-4">animate</span><span class="hl-1">() {</span><br/><span class="hl-1"> </span><span class="hl-4">requestAnimationFrame</span><span class="hl-1">(</span><span class="hl-5">animate</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">render</span><span class="hl-1">();</span><br/><span class="hl-1">}</span><br/><span class="hl-4">animate</span><span class="hl-1">();</span>
174
174
  </code><button type="button">Copy</button></pre>
175
175
 
176
176
  <h3 id="多条路径-动态更新" class="tsd-anchor-link">多条路径 &amp; 动态更新<a href="#多条路径-动态更新" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
177
- <pre><code class="typescript"><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">pass</span><span class="hl-1"> = </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-5">FlowingLight2DPass</span><span class="hl-1">(</span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">camera</span><span class="hl-1">);</span><br/><br/><span class="hl-8">// 初始路径集合</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">paths</span><span class="hl-1"> = [</span><br/><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.1</span><span class="hl-1">, </span><span class="hl-11">0.1</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.9</span><span class="hl-1">, </span><span class="hl-11">0.1</span><span class="hl-1">),</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength:</span><span class="hl-1"> </span><span class="hl-11">0.8</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-11">0xff6600</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">duration:</span><span class="hl-1"> </span><span class="hl-11">1500</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">lineWidth:</span><span class="hl-1"> </span><span class="hl-11">0.01</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.1</span><span class="hl-1">, </span><span class="hl-11">0.5</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.9</span><span class="hl-1">, </span><span class="hl-11">0.5</span><span class="hl-1">),</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength:</span><span class="hl-1"> </span><span class="hl-11">0.8</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-11">0x0066ff</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">opacity:</span><span class="hl-1"> </span><span class="hl-11">0.7</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">duration:</span><span class="hl-1"> </span><span class="hl-11">2000</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">startTime:</span><span class="hl-1"> </span><span class="hl-11">500</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">lineWidth:</span><span class="hl-1"> </span><span class="hl-11">0.015</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">];</span><br/><br/><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">setLines</span><span class="hl-1">(</span><span class="hl-6">paths</span><span class="hl-1">);</span><br/><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">addPass</span><span class="hl-1">(</span><span class="hl-6">pass</span><span class="hl-1">);</span><br/><br/><span class="hl-8">// 响应用户交互动态更新路径</span><br/><span class="hl-6">document</span><span class="hl-1">.</span><span class="hl-5">addEventListener</span><span class="hl-1">(</span><span class="hl-9">&#39;click&#39;</span><span class="hl-1">, (</span><span class="hl-6">e</span><span class="hl-1">) </span><span class="hl-3">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">rect</span><span class="hl-1"> = </span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">canvas</span><span class="hl-1">.</span><span class="hl-5">getBoundingClientRect</span><span class="hl-1">();</span><br/><span class="hl-1"> </span><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">x</span><span class="hl-1"> = (</span><span class="hl-6">e</span><span class="hl-1">.</span><span class="hl-6">clientX</span><span class="hl-1"> - </span><span class="hl-6">rect</span><span class="hl-1">.</span><span class="hl-6">left</span><span class="hl-1">) / </span><span class="hl-6">rect</span><span class="hl-1">.</span><span class="hl-6">width</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">y</span><span class="hl-1"> = (</span><span class="hl-6">e</span><span class="hl-1">.</span><span class="hl-6">clientY</span><span class="hl-1"> - </span><span class="hl-6">rect</span><span class="hl-1">.</span><span class="hl-6">top</span><span class="hl-1">) / </span><span class="hl-6">rect</span><span class="hl-1">.</span><span class="hl-6">height</span><span class="hl-1">; </span><span class="hl-8">// 左上角为原点,无需翻转</span><br/><br/><span class="hl-1"> </span><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">newPath</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.5</span><span class="hl-1">, </span><span class="hl-11">0.5</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-6">x</span><span class="hl-1">, </span><span class="hl-6">y</span><span class="hl-1">),</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength:</span><span class="hl-1"> </span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-5">hypot</span><span class="hl-1">(</span><span class="hl-6">x</span><span class="hl-1"> - </span><span class="hl-11">0.5</span><span class="hl-1">, </span><span class="hl-6">y</span><span class="hl-1"> - </span><span class="hl-11">0.5</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-5">random</span><span class="hl-1">() * </span><span class="hl-11">0xffffff</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">duration:</span><span class="hl-1"> </span><span class="hl-11">1200</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">lineWidth:</span><span class="hl-1"> </span><span class="hl-11">0.01</span><span class="hl-1">,</span><br/><span class="hl-1"> };</span><br/><span class="hl-1"> </span><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">setLines</span><span class="hl-1">([...</span><span class="hl-6">paths</span><span class="hl-1">, </span><span class="hl-6">newPath</span><span class="hl-1">]);</span><br/><span class="hl-1">});</span>
177
+ <pre><code class="typescript"><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">pass</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">FlowingLight2DPass</span><span class="hl-1">(</span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">camera</span><span class="hl-1">);</span><br/><br/><span class="hl-7">// 初始路径集合</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">paths</span><span class="hl-1"> = [</span><br/><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.1</span><span class="hl-1">, </span><span class="hl-3">0.1</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.9</span><span class="hl-1">, </span><span class="hl-3">0.1</span><span class="hl-1">),</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength:</span><span class="hl-1"> </span><span class="hl-3">0.8</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-3">0xff6600</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">duration:</span><span class="hl-1"> </span><span class="hl-3">1500</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-3">0.01</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.1</span><span class="hl-1">, </span><span class="hl-3">0.5</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.9</span><span class="hl-1">, </span><span class="hl-3">0.5</span><span class="hl-1">),</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength:</span><span class="hl-1"> </span><span class="hl-3">0.8</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-3">0x0066ff</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">opacity:</span><span class="hl-1"> </span><span class="hl-3">0.7</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">duration:</span><span class="hl-1"> </span><span class="hl-3">2000</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">startTime:</span><span class="hl-1"> </span><span class="hl-3">500</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-3">0.015</span><span class="hl-1">,</span><br/><span class="hl-1"> },</span><br/><span class="hl-1">];</span><br/><br/><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">setLines</span><span class="hl-1">(</span><span class="hl-5">paths</span><span class="hl-1">);</span><br/><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">addPass</span><span class="hl-1">(</span><span class="hl-5">pass</span><span class="hl-1">);</span><br/><br/><span class="hl-7">// 响应用户交互动态更新路径</span><br/><span class="hl-5">document</span><span class="hl-1">.</span><span class="hl-4">addEventListener</span><span class="hl-1">(</span><span class="hl-10">&#39;click&#39;</span><span class="hl-1">, (</span><span class="hl-5">e</span><span class="hl-1">) </span><span class="hl-8">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">rect</span><span class="hl-1"> = </span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">canvas</span><span class="hl-1">.</span><span class="hl-4">getBoundingClientRect</span><span class="hl-1">();</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">x</span><span class="hl-1"> = (</span><span class="hl-5">e</span><span class="hl-1">.</span><span class="hl-5">clientX</span><span class="hl-1"> - </span><span class="hl-5">rect</span><span class="hl-1">.</span><span class="hl-5">left</span><span class="hl-1">) / </span><span class="hl-5">rect</span><span class="hl-1">.</span><span class="hl-5">width</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">y</span><span class="hl-1"> = (</span><span class="hl-5">e</span><span class="hl-1">.</span><span class="hl-5">clientY</span><span class="hl-1"> - </span><span class="hl-5">rect</span><span class="hl-1">.</span><span class="hl-5">top</span><span class="hl-1">) / </span><span class="hl-5">rect</span><span class="hl-1">.</span><span class="hl-5">height</span><span class="hl-1">; </span><span class="hl-7">// 左上角为原点,无需翻转</span><br/><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">newPath</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.5</span><span class="hl-1">, </span><span class="hl-3">0.5</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-5">x</span><span class="hl-1">, </span><span class="hl-5">y</span><span class="hl-1">),</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength:</span><span class="hl-1"> </span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-4">hypot</span><span class="hl-1">(</span><span class="hl-5">x</span><span class="hl-1"> - </span><span class="hl-3">0.5</span><span class="hl-1">, </span><span class="hl-5">y</span><span class="hl-1"> - </span><span class="hl-3">0.5</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-4">random</span><span class="hl-1">() * </span><span class="hl-3">0xffffff</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">duration:</span><span class="hl-1"> </span><span class="hl-3">1200</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-3">0.01</span><span class="hl-1">,</span><br/><span class="hl-1"> };</span><br/><span class="hl-1"> </span><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">setLines</span><span class="hl-1">([...</span><span class="hl-5">paths</span><span class="hl-1">, </span><span class="hl-5">newPath</span><span class="hl-1">]);</span><br/><span class="hl-1">});</span>
178
178
  </code><button type="button">Copy</button></pre>
179
179
 
180
180
  <h3 id="计算路径总长度" class="tsd-anchor-link">计算路径总长度<a href="#计算路径总长度" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
181
- <pre><code class="typescript"><span class="hl-3">function</span><span class="hl-1"> </span><span class="hl-5">calculatePathLength</span><span class="hl-1">(</span><span class="hl-6">points</span><span class="hl-1">: </span><span class="hl-7">THREE</span><span class="hl-1">.</span><span class="hl-7">Vector2</span><span class="hl-1">[]): </span><span class="hl-7">number</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-3">let</span><span class="hl-1"> </span><span class="hl-6">length</span><span class="hl-1"> = </span><span class="hl-11">0</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-10">for</span><span class="hl-1"> (</span><span class="hl-3">let</span><span class="hl-1"> </span><span class="hl-6">i</span><span class="hl-1"> = </span><span class="hl-11">1</span><span class="hl-1">; </span><span class="hl-6">i</span><span class="hl-1"> &lt; </span><span class="hl-6">points</span><span class="hl-1">.</span><span class="hl-6">length</span><span class="hl-1">; </span><span class="hl-6">i</span><span class="hl-1">++) {</span><br/><span class="hl-1"> </span><span class="hl-6">length</span><span class="hl-1"> += </span><span class="hl-6">points</span><span class="hl-1">[</span><span class="hl-6">i</span><span class="hl-1">].</span><span class="hl-5">distanceTo</span><span class="hl-1">(</span><span class="hl-6">points</span><span class="hl-1">[</span><span class="hl-6">i</span><span class="hl-1"> - </span><span class="hl-11">1</span><span class="hl-1">]);</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> </span><span class="hl-10">return</span><span class="hl-1"> </span><span class="hl-6">length</span><span class="hl-1">;</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">points</span><span class="hl-1"> = [</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.3</span><span class="hl-1">, </span><span class="hl-11">0.7</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.7</span><span class="hl-1">, </span><span class="hl-11">0.7</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.7</span><span class="hl-1">, </span><span class="hl-11">0.3</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.3</span><span class="hl-1">, </span><span class="hl-11">0.3</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.3</span><span class="hl-1">, </span><span class="hl-11">0.7</span><span class="hl-1">),</span><br/><span class="hl-1">];</span><br/><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">pathLine</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> </span><span class="hl-6">points</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength:</span><span class="hl-1"> </span><span class="hl-5">calculatePathLength</span><span class="hl-1">(</span><span class="hl-6">points</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-11">0x00ffff</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">duration:</span><span class="hl-1"> </span><span class="hl-11">2000</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">lineWidth:</span><span class="hl-1"> </span><span class="hl-11">0.01</span><span class="hl-1">,</span><br/><span class="hl-1">};</span>
181
+ <pre><code class="typescript"><span class="hl-8">function</span><span class="hl-1"> </span><span class="hl-4">calculatePathLength</span><span class="hl-1">(</span><span class="hl-5">points</span><span class="hl-1">: </span><span class="hl-9">THREE</span><span class="hl-1">.</span><span class="hl-9">Vector2</span><span class="hl-1">[]): </span><span class="hl-9">number</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-8">let</span><span class="hl-1"> </span><span class="hl-5">length</span><span class="hl-1"> = </span><span class="hl-3">0</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-11">for</span><span class="hl-1"> (</span><span class="hl-8">let</span><span class="hl-1"> </span><span class="hl-5">i</span><span class="hl-1"> = </span><span class="hl-3">1</span><span class="hl-1">; </span><span class="hl-5">i</span><span class="hl-1"> &lt; </span><span class="hl-5">points</span><span class="hl-1">.</span><span class="hl-5">length</span><span class="hl-1">; </span><span class="hl-5">i</span><span class="hl-1">++) {</span><br/><span class="hl-1"> </span><span class="hl-5">length</span><span class="hl-1"> += </span><span class="hl-5">points</span><span class="hl-1">[</span><span class="hl-5">i</span><span class="hl-1">].</span><span class="hl-4">distanceTo</span><span class="hl-1">(</span><span class="hl-5">points</span><span class="hl-1">[</span><span class="hl-5">i</span><span class="hl-1"> - </span><span class="hl-3">1</span><span class="hl-1">]);</span><br/><span class="hl-1"> }</span><br/><span class="hl-1"> </span><span class="hl-11">return</span><span class="hl-1"> </span><span class="hl-5">length</span><span class="hl-1">;</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">points</span><span class="hl-1"> = [</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.3</span><span class="hl-1">, </span><span class="hl-3">0.7</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.7</span><span class="hl-1">, </span><span class="hl-3">0.7</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.7</span><span class="hl-1">, </span><span class="hl-3">0.3</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.3</span><span class="hl-1">, </span><span class="hl-3">0.3</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.3</span><span class="hl-1">, </span><span class="hl-3">0.7</span><span class="hl-1">),</span><br/><span class="hl-1">];</span><br/><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">pathLine</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> </span><span class="hl-5">points</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength:</span><span class="hl-1"> </span><span class="hl-4">calculatePathLength</span><span class="hl-1">(</span><span class="hl-5">points</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-3">0x00ffff</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">duration:</span><span class="hl-1"> </span><span class="hl-3">2000</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-3">0.01</span><span class="hl-1">,</span><br/><span class="hl-1">};</span>
182
182
  </code><button type="button">Copy</button></pre>
183
183
 
184
184
  <h3 id="矩形路径示例" class="tsd-anchor-link">矩形路径示例<a href="#矩形路径示例" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
185
- <pre><code class="ts"><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">pass</span><span class="hl-1"> = </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-5">FlowingLight2DPass</span><span class="hl-1">(</span><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-6">camera</span><span class="hl-1">);</span><br/><br/><span class="hl-8">// 创建一个矩形路径(注意:左上角为原点)</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">rectPath</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.3</span><span class="hl-1">, </span><span class="hl-11">0.3</span><span class="hl-1">), </span><span class="hl-8">// 左上</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.7</span><span class="hl-1">, </span><span class="hl-11">0.3</span><span class="hl-1">), </span><span class="hl-8">// 右上</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.7</span><span class="hl-1">, </span><span class="hl-11">0.7</span><span class="hl-1">), </span><span class="hl-8">// 右下</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.3</span><span class="hl-1">, </span><span class="hl-11">0.7</span><span class="hl-1">), </span><span class="hl-8">// 左下</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.3</span><span class="hl-1">, </span><span class="hl-11">0.3</span><span class="hl-1">), </span><span class="hl-8">// 闭合路径</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength:</span><span class="hl-1"> </span><span class="hl-11">1.6</span><span class="hl-1">, </span><span class="hl-8">// 矩形周长</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-11">1.0</span><span class="hl-1">, </span><span class="hl-11">1.0</span><span class="hl-1">, </span><span class="hl-11">1.0</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">opacity:</span><span class="hl-1"> </span><span class="hl-11">1.0</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">duration:</span><span class="hl-1"> </span><span class="hl-11">4000</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">startTime:</span><span class="hl-1"> </span><span class="hl-11">2000</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">lineWidth:</span><span class="hl-1"> </span><span class="hl-11">0.01</span><span class="hl-1">,</span><br/><span class="hl-1">};</span><br/><br/><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">setLines</span><span class="hl-1">([</span><span class="hl-6">rectPath</span><span class="hl-1">]);</span>
185
+ <pre><code class="ts"><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">pass</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">FlowingLight2DPass</span><span class="hl-1">(</span><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-5">camera</span><span class="hl-1">);</span><br/><br/><span class="hl-7">// 创建一个矩形路径(注意:左上角为原点)</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">rectPath</span><span class="hl-1"> = {</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.3</span><span class="hl-1">, </span><span class="hl-3">0.3</span><span class="hl-1">), </span><span class="hl-7">// 左上</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.7</span><span class="hl-1">, </span><span class="hl-3">0.3</span><span class="hl-1">), </span><span class="hl-7">// 右上</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.7</span><span class="hl-1">, </span><span class="hl-3">0.7</span><span class="hl-1">), </span><span class="hl-7">// 右下</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.3</span><span class="hl-1">, </span><span class="hl-3">0.7</span><span class="hl-1">), </span><span class="hl-7">// 左下</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.3</span><span class="hl-1">, </span><span class="hl-3">0.3</span><span class="hl-1">), </span><span class="hl-7">// 闭合路径</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength:</span><span class="hl-1"> </span><span class="hl-3">1.6</span><span class="hl-1">, </span><span class="hl-7">// 矩形周长</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-3">1.0</span><span class="hl-1">, </span><span class="hl-3">1.0</span><span class="hl-1">, </span><span class="hl-3">1.0</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">opacity:</span><span class="hl-1"> </span><span class="hl-3">1.0</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">duration:</span><span class="hl-1"> </span><span class="hl-3">4000</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">startTime:</span><span class="hl-1"> </span><span class="hl-3">2000</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-3">0.01</span><span class="hl-1">,</span><br/><span class="hl-1">};</span><br/><br/><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">setLines</span><span class="hl-1">([</span><span class="hl-5">rectPath</span><span class="hl-1">]);</span>
186
186
  </code><button type="button">Copy</button></pre>
187
187
 
188
188
  <h3 id="高-dpr-场景优化" class="tsd-anchor-link">高 DPR 场景优化<a href="#高-dpr-场景优化" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>
189
- <pre><code class="typescript"><span class="hl-8">// InstancedMesh 实现自动优化高 DPR 性能</span><br/><span class="hl-8">// 在 DPR=2 的 Retina 屏幕上,性能显著优于全屏着色器方案</span><br/><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">pass</span><span class="hl-1"> = </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-5">FlowingLight2DPass</span><span class="hl-1">(</span><span class="hl-6">camera</span><span class="hl-1">);</span><br/><br/><span class="hl-8">// 多条路径在高 DPR 下仍能保持流畅</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">paths</span><span class="hl-1"> = </span><span class="hl-6">Array</span><span class="hl-1">.</span><span class="hl-5">from</span><span class="hl-1">({ </span><span class="hl-6">length:</span><span class="hl-1"> </span><span class="hl-11">10</span><span class="hl-1"> }, (</span><span class="hl-6">_</span><span class="hl-1">, </span><span class="hl-6">i</span><span class="hl-1">) </span><span class="hl-3">=&gt;</span><span class="hl-1"> ({</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.1</span><span class="hl-1">, </span><span class="hl-11">0.1</span><span class="hl-1"> + </span><span class="hl-6">i</span><span class="hl-1"> * </span><span class="hl-11">0.08</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.9</span><span class="hl-1">, </span><span class="hl-11">0.1</span><span class="hl-1"> + </span><span class="hl-6">i</span><span class="hl-1"> * </span><span class="hl-11">0.08</span><span class="hl-1">),</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-6">totalLength:</span><span class="hl-1"> </span><span class="hl-11">0.8</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-5">random</span><span class="hl-1">() * </span><span class="hl-11">0xffffff</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-6">duration:</span><span class="hl-1"> </span><span class="hl-11">2000</span><span class="hl-1"> + </span><span class="hl-6">i</span><span class="hl-1"> * </span><span class="hl-11">100</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">startTime:</span><span class="hl-1"> </span><span class="hl-6">i</span><span class="hl-1"> * </span><span class="hl-11">200</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">lineWidth:</span><span class="hl-1"> </span><span class="hl-11">0.01</span><span class="hl-1">,</span><br/><span class="hl-1">}));</span><br/><br/><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">setLines</span><span class="hl-1">(</span><span class="hl-6">paths</span><span class="hl-1">);</span>
189
+ <pre><code class="typescript"><span class="hl-7">// InstancedMesh 实现自动优化高 DPR 性能</span><br/><span class="hl-7">// 在 DPR=2 的 Retina 屏幕上,性能显著优于全屏着色器方案</span><br/><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">pass</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">FlowingLight2DPass</span><span class="hl-1">(</span><span class="hl-5">camera</span><span class="hl-1">);</span><br/><br/><span class="hl-7">// 多条路径在高 DPR 下仍能保持流畅</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">paths</span><span class="hl-1"> = </span><span class="hl-5">Array</span><span class="hl-1">.</span><span class="hl-4">from</span><span class="hl-1">({ </span><span class="hl-5">length:</span><span class="hl-1"> </span><span class="hl-3">10</span><span class="hl-1"> }, (</span><span class="hl-5">_</span><span class="hl-1">, </span><span class="hl-5">i</span><span class="hl-1">) </span><span class="hl-8">=&gt;</span><span class="hl-1"> ({</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.1</span><span class="hl-1">, </span><span class="hl-3">0.1</span><span class="hl-1"> + </span><span class="hl-5">i</span><span class="hl-1"> * </span><span class="hl-3">0.08</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.9</span><span class="hl-1">, </span><span class="hl-3">0.1</span><span class="hl-1"> + </span><span class="hl-5">i</span><span class="hl-1"> * </span><span class="hl-3">0.08</span><span class="hl-1">),</span><br/><span class="hl-1"> ],</span><br/><span class="hl-1"> </span><span class="hl-5">totalLength:</span><span class="hl-1"> </span><span class="hl-3">0.8</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-4">random</span><span class="hl-1">() * </span><span class="hl-3">0xffffff</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-5">duration:</span><span class="hl-1"> </span><span class="hl-3">2000</span><span class="hl-1"> + </span><span class="hl-5">i</span><span class="hl-1"> * </span><span class="hl-3">100</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">startTime:</span><span class="hl-1"> </span><span class="hl-5">i</span><span class="hl-1"> * </span><span class="hl-3">200</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-3">0.01</span><span class="hl-1">,</span><br/><span class="hl-1">}));</span><br/><br/><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">setLines</span><span class="hl-1">(</span><span class="hl-5">paths</span><span class="hl-1">);</span>
190
190
  </code><button type="button">Copy</button></pre>
191
191
 
192
192
  <h2 id="debugging" class="tsd-anchor-link">Debugging<a href="#debugging" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h2>
@@ -242,7 +242,7 @@
242
242
  </tbody>
243
243
  </table>
244
244
  <p><strong>最佳实践</strong>:</p>
245
- <pre><code class="ts"><span class="hl-8">// ✅ 高性能 - 频繁修改颜色</span><br/><span class="hl-5">requestAnimationFrame</span><span class="hl-1">(() </span><span class="hl-3">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">id:</span><span class="hl-1"> </span><span class="hl-6">lineId</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">color:</span><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Color</span><span class="hl-1">(</span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-5">random</span><span class="hl-1">(), </span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-5">random</span><span class="hl-1">(), </span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-5">random</span><span class="hl-1">())</span><br/><span class="hl-1"> });</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-8">// ✅ 高性能 - 动画路径(保持点数)</span><br/><span class="hl-3">function</span><span class="hl-1"> </span><span class="hl-5">animatePath</span><span class="hl-1">(</span><span class="hl-6">t</span><span class="hl-1">: </span><span class="hl-7">number</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">id:</span><span class="hl-1"> </span><span class="hl-6">lineId</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.1</span><span class="hl-1">, </span><span class="hl-11">0.1</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.5</span><span class="hl-1"> + </span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-5">sin</span><span class="hl-1">(</span><span class="hl-6">t</span><span class="hl-1">) * </span><span class="hl-11">0.2</span><span class="hl-1">, </span><span class="hl-11">0.5</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector2</span><span class="hl-1">(</span><span class="hl-11">0.9</span><span class="hl-1">, </span><span class="hl-11">0.9</span><span class="hl-1">),</span><br/><span class="hl-1"> ] </span><span class="hl-8">// 始终 3 个点</span><br/><span class="hl-1"> });</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-8">// ⚠️ 低性能 - 避免频繁改变点数</span><br/><span class="hl-5">setInterval</span><span class="hl-1">(() </span><span class="hl-3">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">pointCount</span><span class="hl-1"> = </span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-5">floor</span><span class="hl-1">(</span><span class="hl-6">Math</span><span class="hl-1">.</span><span class="hl-5">random</span><span class="hl-1">() * </span><span class="hl-11">5</span><span class="hl-1">) + </span><span class="hl-11">2</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-6">pass</span><span class="hl-1">.</span><span class="hl-5">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">id:</span><span class="hl-1"> </span><span class="hl-6">lineId</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-6">points:</span><span class="hl-1"> </span><span class="hl-5">generateRandomPoints</span><span class="hl-1">(</span><span class="hl-6">pointCount</span><span class="hl-1">) </span><span class="hl-8">// 点数不固定</span><br/><span class="hl-1"> });</span><br/><span class="hl-1">}, </span><span class="hl-11">100</span><span class="hl-1">);</span>
245
+ <pre><code class="ts"><span class="hl-7">// ✅ 高性能 - 频繁修改颜色</span><br/><span class="hl-4">requestAnimationFrame</span><span class="hl-1">(() </span><span class="hl-8">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">id:</span><span class="hl-1"> </span><span class="hl-5">lineId</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">color:</span><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Color</span><span class="hl-1">(</span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-4">random</span><span class="hl-1">(), </span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-4">random</span><span class="hl-1">(), </span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-4">random</span><span class="hl-1">())</span><br/><span class="hl-1"> });</span><br/><span class="hl-1">});</span><br/><br/><span class="hl-7">// ✅ 高性能 - 动画路径(保持点数)</span><br/><span class="hl-8">function</span><span class="hl-1"> </span><span class="hl-4">animatePath</span><span class="hl-1">(</span><span class="hl-5">t</span><span class="hl-1">: </span><span class="hl-9">number</span><span class="hl-1">) {</span><br/><span class="hl-1"> </span><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">id:</span><span class="hl-1"> </span><span class="hl-5">lineId</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> [</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.1</span><span class="hl-1">, </span><span class="hl-3">0.1</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.5</span><span class="hl-1"> + </span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-4">sin</span><span class="hl-1">(</span><span class="hl-5">t</span><span class="hl-1">) * </span><span class="hl-3">0.2</span><span class="hl-1">, </span><span class="hl-3">0.5</span><span class="hl-1">),</span><br/><span class="hl-1"> </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector2</span><span class="hl-1">(</span><span class="hl-3">0.9</span><span class="hl-1">, </span><span class="hl-3">0.9</span><span class="hl-1">),</span><br/><span class="hl-1"> ] </span><span class="hl-7">// 始终 3 个点</span><br/><span class="hl-1"> });</span><br/><span class="hl-1">}</span><br/><br/><span class="hl-7">// ⚠️ 低性能 - 避免频繁改变点数</span><br/><span class="hl-4">setInterval</span><span class="hl-1">(() </span><span class="hl-8">=&gt;</span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">pointCount</span><span class="hl-1"> = </span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-4">floor</span><span class="hl-1">(</span><span class="hl-5">Math</span><span class="hl-1">.</span><span class="hl-4">random</span><span class="hl-1">() * </span><span class="hl-3">5</span><span class="hl-1">) + </span><span class="hl-3">2</span><span class="hl-1">;</span><br/><span class="hl-1"> </span><span class="hl-5">pass</span><span class="hl-1">.</span><span class="hl-4">setLine</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">id:</span><span class="hl-1"> </span><span class="hl-5">lineId</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-5">points:</span><span class="hl-1"> </span><span class="hl-4">generateRandomPoints</span><span class="hl-1">(</span><span class="hl-5">pointCount</span><span class="hl-1">) </span><span class="hl-7">// 点数不固定</span><br/><span class="hl-1"> });</span><br/><span class="hl-1">}, </span><span class="hl-3">100</span><span class="hl-1">);</span>
246
246
  </code><button type="button">Copy</button></pre>
247
247
 
248
248
  <h3 id="优化建议" class="tsd-anchor-link">优化建议<a href="#优化建议" aria-label="Permalink" class="tsd-anchor-icon"><svg viewBox="0 0 24 24" aria-hidden="true"><use href="../assets/icons.svg#icon-anchor"></use></svg></a></h3>