@realsee/five 6.8.9 → 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 (281) 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 +10 -13
  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/five.loadSpz.html +1 -1
  107. package/docs/functions/react.useFiveAction.html +6 -6
  108. package/docs/functions/react.useFiveCurrentObserver.html +1 -1
  109. package/docs/functions/react.useFiveCurrentState.html +1 -1
  110. package/docs/functions/react.useFiveEventCallback.html +1 -1
  111. package/docs/functions/react.useFiveFloor.html +1 -1
  112. package/docs/functions/react.useFiveHelper.html +1 -1
  113. package/docs/functions/react.useFiveModelIntersectRaycaster.html +2 -2
  114. package/docs/functions/react.useFiveProject2d.html +2 -2
  115. package/docs/functions/react.useFiveSceneEffect.html +1 -1
  116. package/docs/functions/react.useFiveWork.html +2 -2
  117. package/docs/functions/vue.useFiveAction.html +8 -8
  118. package/docs/functions/vue.useFiveCurrentObserver.html +1 -1
  119. package/docs/functions/vue.useFiveCurrentState.html +1 -1
  120. package/docs/functions/vue.useFiveEventCallback.html +1 -1
  121. package/docs/functions/vue.useFiveFloor.html +1 -1
  122. package/docs/functions/vue.useFiveHelper.html +1 -1
  123. package/docs/functions/vue.useFiveModelIntersectRaycaster.html +2 -2
  124. package/docs/functions/vue.useFiveProject2d.html +2 -2
  125. package/docs/functions/vue.useFiveState.html +1 -1
  126. package/docs/functions/vue.useFiveWorks.html +2 -2
  127. package/docs/hierarchy.html +1 -1
  128. package/docs/interfaces/five.AddableObject.html +1 -1
  129. package/docs/interfaces/five.AjaxOptions.html +1 -1
  130. package/docs/interfaces/five.BaseEvent.html +1 -1
  131. package/docs/interfaces/five.BaseExtendableEvent.html +1 -1
  132. package/docs/interfaces/five.EventCallback.html +1 -1
  133. package/docs/interfaces/five.FiveInitArgs.html +2 -2
  134. package/docs/interfaces/five.GestureEvent.html +1 -1
  135. package/docs/interfaces/five.ImageOptions.html +1 -1
  136. package/docs/interfaces/five.IntersectEvent.html +1 -1
  137. package/docs/interfaces/five.IntersectMesh.html +1 -1
  138. package/docs/interfaces/five.IntersectMeshInterface.html +1 -1
  139. package/docs/interfaces/five.Intersection.html +1 -1
  140. package/docs/interfaces/five.LooseWorkWithExtrinsics.html +1 -1
  141. package/docs/interfaces/five.ModeChangeEvent.html +1 -1
  142. package/docs/interfaces/five.ModelControllerCustomInitArgs.html +1 -1
  143. package/docs/interfaces/five.ModelEvent.html +1 -1
  144. package/docs/interfaces/five.ModelSceneEvent.html +1 -1
  145. package/docs/interfaces/five.ModelTileEvent.html +1 -1
  146. package/docs/interfaces/five.MovePanoOptions.html +1 -1
  147. package/docs/interfaces/five.NetworkAbortError.html +1 -1
  148. package/docs/interfaces/five.NetworkFirbiddenError.html +1 -1
  149. package/docs/interfaces/five.NetworkOptions.html +1 -1
  150. package/docs/interfaces/five.NetworkProxyError.html +1 -1
  151. package/docs/interfaces/five.NetworkResourceEvent.html +1 -1
  152. package/docs/interfaces/five.NetworkResponseError.html +1 -1
  153. package/docs/interfaces/five.NetworkTimeoutError.html +1 -1
  154. package/docs/interfaces/five.ObjectEvent.html +1 -1
  155. package/docs/interfaces/five.PBMMaterial.html +1 -1
  156. package/docs/interfaces/five.PBMMeshMaterialParameters.html +1 -1
  157. package/docs/interfaces/five.PBMPointCloudMaterialParameters.html +1 -1
  158. package/docs/interfaces/five.PanoCircleMeshInterface.html +1 -1
  159. package/docs/interfaces/five.PanoEvent.html +1 -1
  160. package/docs/interfaces/five.PanoPrepareEvent.html +1 -1
  161. package/docs/interfaces/five.PanoTextureEvent.html +1 -1
  162. package/docs/interfaces/five.PanoramaControllerCustomInitArgs.html +1 -1
  163. package/docs/interfaces/five.PanoramaLikeControllerCustomInitArgs.html +1 -1
  164. package/docs/interfaces/five.ParameterMaterialValue.html +1 -1
  165. package/docs/interfaces/five.ParameterTilesetValue.html +1 -1
  166. package/docs/interfaces/five.ParameterValue.html +1 -1
  167. package/docs/interfaces/five.Pose.html +1 -1
  168. package/docs/interfaces/five.RenderEvent.html +1 -1
  169. package/docs/interfaces/five.ResolvedParameterValue.html +1 -1
  170. package/docs/interfaces/five.SplatData.html +3 -6
  171. package/docs/interfaces/five.State.html +1 -1
  172. package/docs/interfaces/five.StateEvent.html +1 -1
  173. package/docs/interfaces/five.TextureOptions.html +1 -1
  174. package/docs/interfaces/five.TopviewControllerCustomInitArgs.html +1 -1
  175. package/docs/interfaces/five.VRPanoramaControllerCustomInitArgs.html +1 -1
  176. package/docs/interfaces/five.ViewLayer.html +1 -1
  177. package/docs/interfaces/five.WorkCubeImage.html +1 -1
  178. package/docs/interfaces/five.WorkImage.html +1 -1
  179. package/docs/interfaces/five.WorkObserver.html +2 -2
  180. package/docs/interfaces/five.WorkObserverProto.html +1 -1
  181. package/docs/interfaces/five.WorkTile.html +1 -1
  182. package/docs/interfaces/five.WorksEvent.html +1 -1
  183. package/docs/interfaces/five.XRControllerEvent.html +1 -1
  184. package/docs/interfaces/five.XRGestureEvent.html +1 -1
  185. package/docs/interfaces/five.XRPanoramaControllerCustomInitArgs.html +1 -1
  186. package/docs/interfaces/five.XRSessionEvent.html +1 -1
  187. package/docs/interfaces/plugins.BackgroundPluginController.html +1 -1
  188. package/docs/interfaces/plugins.BackgroundPluginType.EventMap.html +1 -1
  189. package/docs/interfaces/plugins.BasePlugin.State.html +1 -1
  190. package/docs/interfaces/plugins.CSS2DPluginController.html +1 -1
  191. package/docs/interfaces/plugins.CSS2DPluginType.EventMap.html +1 -1
  192. package/docs/interfaces/plugins.CSS2DPluginType.State.html +1 -1
  193. package/docs/interfaces/plugins.CSS3DPluginController.html +1 -1
  194. package/docs/interfaces/plugins.CSS3DPluginType.EventMap.html +1 -1
  195. package/docs/interfaces/plugins.CSS3DPluginType.State.html +1 -1
  196. package/docs/interfaces/plugins.DynamicPathLinePluginController.html +1 -1
  197. package/docs/interfaces/plugins.DynamicPathLinePluginType.EventMap.html +1 -1
  198. package/docs/interfaces/plugins.DynamicPathLinePluginType.State.html +1 -1
  199. package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationController.html +1 -1
  200. package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.EventMap.html +1 -1
  201. package/docs/interfaces/plugins.GaussianSplattingEntranceAnimationPluginType.State.html +1 -1
  202. package/docs/interfaces/plugins.ItemMaskController.html +1 -1
  203. package/docs/interfaces/plugins.ItemMaskPluginType.EventMap.html +1 -1
  204. package/docs/interfaces/plugins.ItemMaskPluginType.State.html +1 -1
  205. package/docs/interfaces/plugins.Object3DHelperPluginType.BaseController.html +1 -1
  206. package/docs/interfaces/plugins.Object3DHelperPluginType.BaseHelper.html +1 -1
  207. package/docs/interfaces/plugins.Object3DHelperPluginType.BoundingBoxController.html +1 -1
  208. package/docs/interfaces/plugins.Object3DHelperPluginType.MoveController.html +1 -1
  209. package/docs/interfaces/plugins.Object3DHelperPluginType.MoveHelperAbstract.html +1 -1
  210. package/docs/interfaces/plugins.Object3DHelperPluginType.RotateController.html +1 -1
  211. package/docs/interfaces/plugins.Object3DHelperPluginType.RotateHelperAbstract.html +1 -1
  212. package/docs/interfaces/plugins.OrientationPluginController.html +1 -1
  213. package/docs/interfaces/plugins.OrientationPluginType.EventMap.html +1 -1
  214. package/docs/interfaces/plugins.OrientationPluginType.State.html +1 -1
  215. package/docs/interfaces/plugins.PanoAnimeController.html +1 -1
  216. package/docs/interfaces/plugins.PanoAnimePluginType.EventMap.html +1 -1
  217. package/docs/interfaces/plugins.PanoAnimePluginType.State.html +1 -1
  218. package/docs/interfaces/plugins.PluginTemplateType.EventMap.html +1 -1
  219. package/docs/interfaces/plugins.PluginTemplateType.State.html +1 -1
  220. package/docs/interfaces/plugins.TrajectoryController.html +1 -1
  221. package/docs/interfaces/react.FiveInjectionTypes.html +2 -2
  222. package/docs/interfaces/react.UseFivePluginOptions.html +1 -1
  223. package/docs/interfaces/react.UseFivePluginOptionsWithCreate.html +1 -1
  224. package/docs/modules/five.html +1 -1
  225. package/docs/modules.html +1 -1
  226. package/docs/types/five.FlowingFireworks3DPassLine.html +16 -0
  227. package/docs/types/five.ParseOptions.html +1 -1
  228. package/docs/types/plugins.BasePlugin.EventMap.html +1 -1
  229. package/docs/variables/react.FiveCanvas.html +1 -1
  230. package/docs/variables/react.useFiveScene.html +1 -1
  231. package/docs/variables/vue.FiveCanvas.html +1 -1
  232. package/docs/variables/vue.FiveProvider.html +1 -1
  233. package/five/gaussian-splatting/layerRegistry.d.ts +10 -0
  234. package/five/gaussian-splatting/orderTexture.d.ts +18 -0
  235. package/five/gaussian-splatting/reorderPass.d.ts +34 -0
  236. package/five/gaussian-splatting/shStore.d.ts +16 -0
  237. package/five/gaussian-splatting/splatAssembler.d.ts +60 -0
  238. package/five/gaussian-splatting/tileTexture.d.ts +10 -0
  239. package/five/gaussian-splatting/transformStore.d.ts +20 -0
  240. package/five/index.js +305 -169
  241. package/five/index.mjs +6684 -6508
  242. package/five/model/index.d.ts +0 -1
  243. package/five/model/loaders/spz.d.ts +19 -3
  244. package/five/model/objects/pbmGaussianSplattingObject.d.ts +10 -14
  245. package/five/model/objects/pbmGaussianSplattingRenderMesh.d.ts +48 -42
  246. package/five/renderer/index.d.ts +1 -1
  247. package/five/renderer/postprocessing/index.d.ts +1 -1
  248. package/five/renderer/postprocessing/passes/flowing-fireworks-3d-pass.d.ts +4 -5
  249. package/gltf-loader/index.js +3 -3
  250. package/gltf-loader/index.mjs +3 -3
  251. package/line/index.js +3 -3
  252. package/line/index.mjs +3 -3
  253. package/package.json +2 -2
  254. package/pbmGaussianSplattingObject-C6i7CUTu.cjs +255 -0
  255. package/pbmGaussianSplattingObject-CaE6q4r-.js +324 -0
  256. package/plugins/index.js +2 -2
  257. package/plugins/index.mjs +2 -2
  258. package/react/index.js +2 -2
  259. package/react/index.mjs +2 -2
  260. package/shader-lib/index.js +2 -2
  261. package/shader-lib/index.mjs +2 -2
  262. package/sticker/index.js +3 -3
  263. package/sticker/index.mjs +3 -3
  264. package/umd/five-gltf-loader.js +3 -3
  265. package/umd/five-line.js +3 -3
  266. package/umd/five-plugins.js +2 -2
  267. package/umd/five-react.js +2 -2
  268. package/umd/five-shader-lib.js +2 -2
  269. package/umd/five-sticker.js +3 -3
  270. package/umd/five-vfx.js +2 -2
  271. package/umd/five-vue.js +2 -2
  272. package/umd/five.js +218 -82
  273. package/vfx/index.js +2 -2
  274. package/vfx/index.mjs +2 -2
  275. package/vue/index.js +2 -2
  276. package/vue/index.mjs +2 -2
  277. package/work-downloader/index.js +2 -2
  278. package/work-downloader/index.mjs +2 -2
  279. package/docs/functions/five.loadSplat.html +0 -1
  280. package/five/gaussian-splatting/util/renderData.d.ts +0 -68
  281. package/five/model/loaders/splat.d.ts +0 -8
@@ -11,7 +11,7 @@
11
11
  <p><strong>Definition</strong>: <a href="../../five/renderer/postprocessing/passes/flowing-light-3d-pass.d.ts">FlowingLight3DPass</a></p>
12
12
  </blockquote>
13
13
  <p><code>FlowingLight3DPass</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">Vector3</span><span class="hl-1">[]; </span><span class="hl-8">// 世界坐标系路径点</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">FlowingLight3DPass</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">Vector3</span><span class="hl-1">[]; </span><span class="hl-7">// 世界坐标系路径点</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">FlowingLight3DPass</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>
@@ -121,19 +121,19 @@
121
121
  <p><strong>自动生成 ID</strong>: 如果 line 没有提供 <code>id</code>,会自动生成 UUID。
122
122
  <strong>自动设置 startTime</strong>: 如果 line 没有提供 <code>startTime</code>,会使用当前内部时间。</p>
123
123
  <p><strong>示例</strong>:</p>
124
- <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-3d-line&#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">Vector3</span><span class="hl-1">(</span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">0</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</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><span class="hl-11">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">Vector3</span><span class="hl-1">(</span><span class="hl-11">10</span><span class="hl-1">, </span><span class="hl-11">1</span><span class="hl-1">, </span><span class="hl-11">6</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">12</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">0xff6600</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.85</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><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">4.0</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>
124
+ <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-3d-line&#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">Vector3</span><span class="hl-1">(</span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">0</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</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><span class="hl-3">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">Vector3</span><span class="hl-1">(</span><span class="hl-3">10</span><span class="hl-1">, </span><span class="hl-3">1</span><span class="hl-1">, </span><span class="hl-3">6</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">12</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">0xff6600</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.85</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><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">4.0</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>
125
125
  </code><button type="button">Copy</button></pre>
126
126
 
127
127
  <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>
128
128
  <p>追加一条或多条线到现有列表中,不影响已有线条。返回新增线条的 id 数组。</p>
129
129
  <p><strong>示例</strong>:</p>
130
- <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">Vector3</span><span class="hl-1">(</span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">0</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</span><span class="hl-1">(</span><span class="hl-11">10</span><span class="hl-1">, </span><span class="hl-11">5</span><span class="hl-1">, </span><span class="hl-11">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">12</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">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">15</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>
130
+ <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">Vector3</span><span class="hl-1">(</span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">0</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-3">10</span><span class="hl-1">, </span><span class="hl-3">5</span><span class="hl-1">, </span><span class="hl-3">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">12</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">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">15</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>
131
131
  </code><button type="button">Copy</button></pre>
132
132
 
133
133
  <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>
134
134
  <p>按 id 移除一条或多条线,返回实际移除的数量。如果 id 不存在,会在控制台输出警告。</p>
135
135
  <p><strong>示例</strong>:</p>
136
- <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>
136
+ <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>
137
137
  </code><button type="button">Copy</button></pre>
138
138
 
139
139
  <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>
@@ -144,7 +144,7 @@
144
144
  <li>如果 <code>points</code> 数量改变,会重建整个 mesh,性能开销较大</li>
145
145
  </ul>
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">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-3d-line&#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-3d-line&#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><span class="hl-6">lineWidth:</span><span class="hl-1"> </span><span class="hl-11">5.0</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-3d-line&#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">Vector3</span><span class="hl-1">(</span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">0</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</span><span class="hl-1">(</span><span class="hl-11">6</span><span class="hl-1">, </span><span class="hl-11">3</span><span class="hl-1">, </span><span class="hl-11">4</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">Vector3</span><span class="hl-1">(</span><span class="hl-11">12</span><span class="hl-1">, </span><span class="hl-11">2</span><span class="hl-1">, </span><span class="hl-11">8</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">15</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-3d-line&#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">Vector3</span><span class="hl-1">(</span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">0</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</span><span class="hl-1">(</span><span class="hl-11">10</span><span class="hl-1">, </span><span class="hl-11">5</span><span class="hl-1">, </span><span class="hl-11">5</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">12</span><span class="hl-1">,</span><br/><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">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-3d-line&#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-3d-line&#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><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-3">5.0</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-3d-line&#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">Vector3</span><span class="hl-1">(</span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">0</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-3">6</span><span class="hl-1">, </span><span class="hl-3">3</span><span class="hl-1">, </span><span class="hl-3">4</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">Vector3</span><span class="hl-1">(</span><span class="hl-3">12</span><span class="hl-1">, </span><span class="hl-3">2</span><span class="hl-1">, </span><span class="hl-3">8</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">15</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-3d-line&#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">Vector3</span><span class="hl-1">(</span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">0</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-3">10</span><span class="hl-1">, </span><span class="hl-3">5</span><span class="hl-1">, </span><span class="hl-3">5</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">12</span><span class="hl-1">,</span><br/><span class="hl-1">});</span>
148
148
  </code><button type="button">Copy</button></pre>
149
149
 
150
150
  <p><strong>注意事项</strong>:</p>
@@ -159,23 +159,23 @@
159
159
  <p>释放 InstancedMesh、着色材质和渲染目标资源,销毁 Pass 时必须调用。</p>
160
160
  <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>
161
161
  <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>
162
- <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">FlowingLight3DPass</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">// 创建 3D 流光通道</span><br/><span class="hl-3">const</span><span class="hl-1"> </span><span class="hl-4">flowing3D</span><span class="hl-1"> = </span><span class="hl-3">new</span><span class="hl-1"> </span><span class="hl-5">FlowingLight3DPass</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">// 定义一条 3D 路径(世界坐标)</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">Vector3</span><span class="hl-1">(-</span><span class="hl-11">5</span><span class="hl-1">, </span><span class="hl-11">0</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</span><span class="hl-1">(-</span><span class="hl-11">2</span><span class="hl-1">, </span><span class="hl-11">3</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</span><span class="hl-1">(</span><span class="hl-11">2</span><span class="hl-1">, </span><span class="hl-11">3</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</span><span class="hl-1">(</span><span class="hl-11">5</span><span class="hl-1">, </span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">0</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">15</span><span class="hl-1">; </span><span class="hl-8">// 世界单位</span><br/><br/><span class="hl-6">flowing3D</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">0x00ff88</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">4000</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">3.0</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">flowing3D</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>
162
+ <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">FlowingLight3DPass</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">// 创建 3D 流光通道</span><br/><span class="hl-8">const</span><span class="hl-1"> </span><span class="hl-6">flowing3D</span><span class="hl-1"> = </span><span class="hl-8">new</span><span class="hl-1"> </span><span class="hl-4">FlowingLight3DPass</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">// 定义一条 3D 路径(世界坐标)</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">Vector3</span><span class="hl-1">(-</span><span class="hl-3">5</span><span class="hl-1">, </span><span class="hl-3">0</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(-</span><span class="hl-3">2</span><span class="hl-1">, </span><span class="hl-3">3</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-3">2</span><span class="hl-1">, </span><span class="hl-3">3</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-3">5</span><span class="hl-1">, </span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">0</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">15</span><span class="hl-1">; </span><span class="hl-7">// 世界单位</span><br/><br/><span class="hl-5">flowing3D</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">0x00ff88</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">4000</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">3.0</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">flowing3D</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>
163
163
  </code><button type="button">Copy</button></pre>
164
164
 
165
165
  <h3 id="多条-3d-路径" class="tsd-anchor-link">多条 3D 路径<a href="#多条-3d-路径" 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>
166
- <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">FlowingLight3DPass</span><span class="hl-1">(</span><span class="hl-6">camera</span><span class="hl-1">);</span><br/><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">Vector3</span><span class="hl-1">(</span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">0</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</span><span class="hl-1">(</span><span class="hl-11">10</span><span class="hl-1">, </span><span class="hl-11">5</span><span class="hl-1">, </span><span class="hl-11">0</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">11</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><span class="hl-6">lineWidth:</span><span class="hl-1"> </span><span class="hl-11">3.0</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">Vector3</span><span class="hl-1">(</span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">0</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</span><span class="hl-1">(</span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">10</span><span class="hl-1">, </span><span class="hl-11">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">12</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">2500</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">4.0</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">Vector3</span><span class="hl-1">(</span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">0</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</span><span class="hl-1">(</span><span class="hl-11">5</span><span class="hl-1">, </span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">10</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">11</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">2200</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">1000</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">2.5</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>
166
+ <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">FlowingLight3DPass</span><span class="hl-1">(</span><span class="hl-5">camera</span><span class="hl-1">);</span><br/><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">Vector3</span><span class="hl-1">(</span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">0</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-3">10</span><span class="hl-1">, </span><span class="hl-3">5</span><span class="hl-1">, </span><span class="hl-3">0</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">11</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><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-3">3.0</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">Vector3</span><span class="hl-1">(</span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">0</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">10</span><span class="hl-1">, </span><span class="hl-3">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">12</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">2500</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">4.0</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">Vector3</span><span class="hl-1">(</span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">0</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-3">5</span><span class="hl-1">, </span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">10</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">11</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">2200</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">1000</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">2.5</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>
167
167
  </code><button type="button">Copy</button></pre>
168
168
 
169
169
  <h3 id="计算-3d-路径长度" class="tsd-anchor-link">计算 3D 路径长度<a href="#计算-3d-路径长度" 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>
170
- <pre><code class="typescript"><span class="hl-3">function</span><span class="hl-1"> </span><span class="hl-5">calculatePath3DLength</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">Vector3</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">Vector3</span><span class="hl-1">(</span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">0</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</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><span class="hl-11">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">Vector3</span><span class="hl-1">(</span><span class="hl-11">10</span><span class="hl-1">, </span><span class="hl-11">1</span><span class="hl-1">, </span><span class="hl-11">6</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">calculatePath3DLength</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">0x00ccff</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><span class="hl-6">lineWidth:</span><span class="hl-1"> </span><span class="hl-11">3.0</span><span class="hl-1">,</span><br/><span class="hl-1">};</span>
170
+ <pre><code class="typescript"><span class="hl-8">function</span><span class="hl-1"> </span><span class="hl-4">calculatePath3DLength</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">Vector3</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">Vector3</span><span class="hl-1">(</span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">0</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</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><span class="hl-3">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">Vector3</span><span class="hl-1">(</span><span class="hl-3">10</span><span class="hl-1">, </span><span class="hl-3">1</span><span class="hl-1">, </span><span class="hl-3">6</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">calculatePath3DLength</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">0x00ccff</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><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-3">3.0</span><span class="hl-1">,</span><br/><span class="hl-1">};</span>
171
171
  </code><button type="button">Copy</button></pre>
172
172
 
173
173
  <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>
174
- <pre><code class="typescript"><span class="hl-8">// 光带路径随相机移动自动投影</span><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">FlowingLight3DPass</span><span class="hl-1">(</span><span class="hl-6">camera</span><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><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">Vector3</span><span class="hl-1">(-</span><span class="hl-11">10</span><span class="hl-1">, </span><span class="hl-11">0</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</span><span class="hl-1">(</span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">5</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</span><span class="hl-1">(</span><span class="hl-11">10</span><span class="hl-1">, </span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">0</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">20</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">0xffff00</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><span class="hl-6">lineWidth:</span><span class="hl-1"> </span><span class="hl-11">4.0</span><span class="hl-1">,</span><br/><span class="hl-1">}]);</span><br/><br/><span class="hl-8">// 相机动画过程中光带自动跟随投影</span><br/><span class="hl-6">five</span><span class="hl-1">.</span><span class="hl-5">setState</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-6">mode:</span><span class="hl-1"> </span><span class="hl-6">Five</span><span class="hl-1">.</span><span class="hl-6">Mode</span><span class="hl-1">.</span><span class="hl-6">Model</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-8">// ... 其他参数</span><br/><span class="hl-1">});</span>
174
+ <pre><code class="typescript"><span class="hl-7">// 光带路径随相机移动自动投影</span><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">FlowingLight3DPass</span><span class="hl-1">(</span><span class="hl-5">camera</span><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><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">Vector3</span><span class="hl-1">(-</span><span class="hl-3">10</span><span class="hl-1">, </span><span class="hl-3">0</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">5</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-3">10</span><span class="hl-1">, </span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">0</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">20</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">0xffff00</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><span class="hl-5">lineWidth:</span><span class="hl-1"> </span><span class="hl-3">4.0</span><span class="hl-1">,</span><br/><span class="hl-1">}]);</span><br/><br/><span class="hl-7">// 相机动画过程中光带自动跟随投影</span><br/><span class="hl-5">five</span><span class="hl-1">.</span><span class="hl-4">setState</span><span class="hl-1">({</span><br/><span class="hl-1"> </span><span class="hl-5">mode:</span><span class="hl-1"> </span><span class="hl-5">Five</span><span class="hl-1">.</span><span class="hl-5">Mode</span><span class="hl-1">.</span><span class="hl-5">Model</span><span class="hl-1">,</span><br/><span class="hl-1"> </span><span class="hl-7">// ... 其他参数</span><br/><span class="hl-1">});</span>
175
175
  </code><button type="button">Copy</button></pre>
176
176
 
177
177
  <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>
178
- <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">FlowingLight3DPass</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">Vector3</span><span class="hl-1">(</span><span class="hl-6">i</span><span class="hl-1"> * </span><span class="hl-11">2</span><span class="hl-1">, </span><span class="hl-11">0</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</span><span class="hl-1">(</span><span class="hl-6">i</span><span class="hl-1"> * </span><span class="hl-11">2</span><span class="hl-1">, </span><span class="hl-11">5</span><span class="hl-1">, </span><span class="hl-11">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">7</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">3.0</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>
178
+ <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">FlowingLight3DPass</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">Vector3</span><span class="hl-1">(</span><span class="hl-5">i</span><span class="hl-1"> * </span><span class="hl-3">2</span><span class="hl-1">, </span><span class="hl-3">0</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-5">i</span><span class="hl-1"> * </span><span class="hl-3">2</span><span class="hl-1">, </span><span class="hl-3">5</span><span class="hl-1">, </span><span class="hl-3">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">7</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">3.0</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>
179
179
  </code><button type="button">Copy</button></pre>
180
180
 
181
181
  <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>
@@ -232,7 +232,7 @@
232
232
  </tbody>
233
233
  </table>
234
234
  <p><strong>最佳实践</strong>:</p>
235
- <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">Vector3</span><span class="hl-1">(</span><span class="hl-11">0</span><span class="hl-1">, </span><span class="hl-11">0</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-3">new</span><span class="hl-1"> </span><span class="hl-4">THREE</span><span class="hl-1">.</span><span class="hl-5">Vector3</span><span class="hl-1">(</span><span class="hl-11">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">2</span><span class="hl-1">, </span><span class="hl-11">2</span><span class="hl-1">, </span><span class="hl-11">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">Vector3</span><span class="hl-1">(</span><span class="hl-11">10</span><span class="hl-1">, </span><span class="hl-11">0</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-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>
235
+ <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">Vector3</span><span class="hl-1">(</span><span class="hl-3">0</span><span class="hl-1">, </span><span class="hl-3">0</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-8">new</span><span class="hl-1"> </span><span class="hl-6">THREE</span><span class="hl-1">.</span><span class="hl-4">Vector3</span><span class="hl-1">(</span><span class="hl-3">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">2</span><span class="hl-1">, </span><span class="hl-3">2</span><span class="hl-1">, </span><span class="hl-3">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">Vector3</span><span class="hl-1">(</span><span class="hl-3">10</span><span class="hl-1">, </span><span class="hl-3">0</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-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>
236
236
  </code><button type="button">Copy</button></pre>
237
237
 
238
238
  <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>