@plastic-software/three 0.174.0 → 0.175.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 (567) hide show
  1. package/build/three.cjs +10744 -1476
  2. package/build/three.core.js +9633 -1096
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +918 -189
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +4 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +2658 -1697
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +2654 -1709
  11. package/build/three.webgpu.nodes.min.js +1 -1
  12. package/examples/jsm/Addons.js +1 -1
  13. package/examples/jsm/animation/AnimationClipCreator.js +57 -6
  14. package/examples/jsm/animation/CCDIKSolver.js +93 -39
  15. package/examples/jsm/capabilities/WebGL.js +28 -3
  16. package/examples/jsm/capabilities/WebGPU.js +16 -6
  17. package/examples/jsm/controls/ArcballControls.js +424 -154
  18. package/examples/jsm/controls/DragControls.js +93 -2
  19. package/examples/jsm/controls/FirstPersonControls.js +113 -4
  20. package/examples/jsm/controls/FlyControls.js +49 -2
  21. package/examples/jsm/controls/MapControls.js +42 -9
  22. package/examples/jsm/controls/OrbitControls.js +345 -42
  23. package/examples/jsm/controls/PointerLockControls.js +111 -9
  24. package/examples/jsm/controls/TrackballControls.js +159 -8
  25. package/examples/jsm/controls/TransformControls.js +252 -6
  26. package/examples/jsm/csm/CSM.js +226 -15
  27. package/examples/jsm/csm/CSMFrustum.js +52 -0
  28. package/examples/jsm/csm/CSMHelper.js +47 -0
  29. package/examples/jsm/csm/CSMShader.js +10 -1
  30. package/examples/jsm/csm/CSMShadowNode.js +156 -13
  31. package/examples/jsm/curves/CurveExtras.js +289 -31
  32. package/examples/jsm/curves/NURBSCurve.js +57 -14
  33. package/examples/jsm/curves/NURBSSurface.js +50 -6
  34. package/examples/jsm/curves/NURBSUtils.js +96 -112
  35. package/examples/jsm/curves/NURBSVolume.js +22 -4
  36. package/examples/jsm/effects/AnaglyphEffect.js +30 -0
  37. package/examples/jsm/effects/AsciiEffect.js +60 -15
  38. package/examples/jsm/effects/OutlineEffect.js +59 -111
  39. package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
  40. package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
  41. package/examples/jsm/effects/StereoEffect.js +29 -0
  42. package/examples/jsm/environments/DebugEnvironment.js +49 -0
  43. package/examples/jsm/environments/RoomEnvironment.js +23 -4
  44. package/examples/jsm/exporters/DRACOExporter.js +53 -13
  45. package/examples/jsm/exporters/EXRExporter.js +37 -8
  46. package/examples/jsm/exporters/GLTFExporter.js +171 -48
  47. package/examples/jsm/exporters/KTX2Exporter.js +20 -0
  48. package/examples/jsm/exporters/OBJExporter.js +18 -0
  49. package/examples/jsm/exporters/PLYExporter.js +39 -9
  50. package/examples/jsm/exporters/STLExporter.js +25 -5
  51. package/examples/jsm/exporters/USDZExporter.js +70 -3
  52. package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
  53. package/examples/jsm/geometries/ConvexGeometry.js +18 -0
  54. package/examples/jsm/geometries/DecalGeometry.js +20 -9
  55. package/examples/jsm/geometries/ParametricFunctions.js +97 -0
  56. package/examples/jsm/geometries/ParametricGeometry.js +37 -5
  57. package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
  58. package/examples/jsm/geometries/TeapotGeometry.js +22 -38
  59. package/examples/jsm/geometries/TextGeometry.js +44 -16
  60. package/examples/jsm/helpers/LightProbeHelper.js +35 -0
  61. package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
  62. package/examples/jsm/helpers/OctreeHelper.js +35 -0
  63. package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
  64. package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
  65. package/examples/jsm/helpers/TextureHelper.js +27 -0
  66. package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
  67. package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
  68. package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
  69. package/examples/jsm/helpers/ViewHelper.js +75 -1
  70. package/examples/jsm/interactive/HTMLMesh.js +25 -0
  71. package/examples/jsm/interactive/InteractiveGroup.js +65 -5
  72. package/examples/jsm/interactive/SelectionBox.js +74 -9
  73. package/examples/jsm/interactive/SelectionHelper.js +71 -29
  74. package/examples/jsm/libs/motion-controllers.module.js +1 -1
  75. package/examples/jsm/lighting/TiledLighting.js +23 -0
  76. package/examples/jsm/lights/LightProbeGenerator.js +26 -1
  77. package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
  78. package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
  79. package/examples/jsm/lines/Line2.js +36 -0
  80. package/examples/jsm/lines/LineGeometry.js +52 -0
  81. package/examples/jsm/lines/LineMaterial.js +95 -0
  82. package/examples/jsm/lines/LineSegments2.js +51 -2
  83. package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
  84. package/examples/jsm/lines/Wireframe.js +38 -2
  85. package/examples/jsm/lines/WireframeGeometry2.js +24 -0
  86. package/examples/jsm/lines/webgpu/Line2.js +25 -1
  87. package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
  88. package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
  89. package/examples/jsm/loaders/3DMLoader.js +71 -2
  90. package/examples/jsm/loaders/3MFLoader.js +41 -3
  91. package/examples/jsm/loaders/AMFLoader.js +31 -12
  92. package/examples/jsm/loaders/BVHLoader.js +57 -11
  93. package/examples/jsm/loaders/ColladaLoader.js +35 -0
  94. package/examples/jsm/loaders/DDSLoader.js +24 -0
  95. package/examples/jsm/loaders/DRACOLoader.js +73 -1
  96. package/examples/jsm/loaders/EXRLoader.js +40 -8
  97. package/examples/jsm/loaders/FBXLoader.js +42 -14
  98. package/examples/jsm/loaders/FontLoader.js +60 -2
  99. package/examples/jsm/loaders/GCodeLoader.js +33 -5
  100. package/examples/jsm/loaders/GLTFLoader.js +218 -5
  101. package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
  102. package/examples/jsm/loaders/IESLoader.js +41 -0
  103. package/examples/jsm/loaders/KMZLoader.js +32 -0
  104. package/examples/jsm/loaders/KTX2Loader.js +86 -18
  105. package/examples/jsm/loaders/KTXLoader.js +26 -6
  106. package/examples/jsm/loaders/LDrawLoader.js +115 -5
  107. package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
  108. package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
  109. package/examples/jsm/loaders/LUTImageLoader.js +78 -38
  110. package/examples/jsm/loaders/LWOLoader.js +46 -7
  111. package/examples/jsm/loaders/LottieLoader.js +37 -0
  112. package/examples/jsm/loaders/MD2Loader.js +36 -1
  113. package/examples/jsm/loaders/MDDLoader.js +56 -12
  114. package/examples/jsm/loaders/MTLLoader.js +38 -33
  115. package/examples/jsm/loaders/MaterialXLoader.js +33 -0
  116. package/examples/jsm/loaders/NRRDLoader.js +36 -5
  117. package/examples/jsm/loaders/OBJLoader.js +48 -1
  118. package/examples/jsm/loaders/PCDLoader.js +47 -0
  119. package/examples/jsm/loaders/PDBLoader.js +40 -2
  120. package/examples/jsm/loaders/PLYLoader.js +62 -32
  121. package/examples/jsm/loaders/PVRLoader.js +23 -5
  122. package/examples/jsm/loaders/RGBELoader.js +38 -5
  123. package/examples/jsm/loaders/RGBMLoader.js +67 -1
  124. package/examples/jsm/loaders/STLLoader.js +47 -38
  125. package/examples/jsm/loaders/SVGLoader.js +113 -20
  126. package/examples/jsm/loaders/TDSLoader.js +81 -61
  127. package/examples/jsm/loaders/TGALoader.js +22 -0
  128. package/examples/jsm/loaders/TIFFLoader.js +22 -0
  129. package/examples/jsm/loaders/TTFLoader.js +36 -2
  130. package/examples/jsm/loaders/USDZLoader.js +34 -1
  131. package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
  132. package/examples/jsm/loaders/VOXLoader.js +57 -0
  133. package/examples/jsm/loaders/VRMLLoader.js +32 -1
  134. package/examples/jsm/loaders/VTKLoader.js +38 -0
  135. package/examples/jsm/loaders/XYZLoader.js +35 -0
  136. package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
  137. package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
  138. package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
  139. package/examples/jsm/math/Capsule.js +89 -14
  140. package/examples/jsm/math/ColorConverter.js +21 -0
  141. package/examples/jsm/math/ColorSpaces.js +53 -0
  142. package/examples/jsm/math/ConvexHull.js +514 -92
  143. package/examples/jsm/math/ImprovedNoise.js +14 -2
  144. package/examples/jsm/math/Lut.js +111 -0
  145. package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
  146. package/examples/jsm/math/OBB.js +139 -46
  147. package/examples/jsm/math/Octree.js +132 -5
  148. package/examples/jsm/math/SimplexNoise.js +66 -42
  149. package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
  150. package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
  151. package/examples/jsm/misc/Gyroscope.js +11 -0
  152. package/examples/jsm/misc/MD2Character.js +115 -2
  153. package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
  154. package/examples/jsm/misc/MorphAnimMesh.js +43 -0
  155. package/examples/jsm/misc/MorphBlendMesh.js +102 -0
  156. package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
  157. package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
  158. package/examples/jsm/misc/RollerCoaster.js +52 -0
  159. package/examples/jsm/misc/Timer.js +79 -2
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +108 -72
  162. package/examples/jsm/misc/VolumeSlice.js +88 -45
  163. package/examples/jsm/modifiers/CurveModifier.js +57 -34
  164. package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
  165. package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
  166. package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
  167. package/examples/jsm/modifiers/TessellateModifier.js +33 -2
  168. package/examples/jsm/objects/GroundedSkybox.js +23 -5
  169. package/examples/jsm/objects/Lensflare.js +91 -2
  170. package/examples/jsm/objects/LensflareMesh.js +53 -2
  171. package/examples/jsm/objects/MarchingCubes.js +88 -5
  172. package/examples/jsm/objects/Reflector.js +70 -0
  173. package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
  174. package/examples/jsm/objects/Refractor.js +61 -0
  175. package/examples/jsm/objects/ShadowMesh.js +53 -4
  176. package/examples/jsm/objects/Sky.js +26 -9
  177. package/examples/jsm/objects/SkyMesh.js +60 -9
  178. package/examples/jsm/objects/Water.js +44 -5
  179. package/examples/jsm/objects/Water2.js +42 -3
  180. package/examples/jsm/objects/Water2Mesh.js +38 -3
  181. package/examples/jsm/objects/WaterMesh.js +94 -7
  182. package/examples/jsm/physics/AmmoPhysics.js +47 -0
  183. package/examples/jsm/physics/JoltPhysics.js +48 -0
  184. package/examples/jsm/physics/RapierPhysics.js +56 -0
  185. package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
  186. package/examples/jsm/postprocessing/BloomPass.js +125 -24
  187. package/examples/jsm/postprocessing/BokehPass.js +98 -22
  188. package/examples/jsm/postprocessing/ClearPass.js +53 -3
  189. package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
  190. package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
  191. package/examples/jsm/postprocessing/EffectComposer.js +131 -0
  192. package/examples/jsm/postprocessing/FilmPass.js +53 -5
  193. package/examples/jsm/postprocessing/GTAOPass.js +191 -48
  194. package/examples/jsm/postprocessing/GlitchPass.js +84 -33
  195. package/examples/jsm/postprocessing/HalftonePass.js +64 -10
  196. package/examples/jsm/postprocessing/LUTPass.js +37 -8
  197. package/examples/jsm/postprocessing/MaskPass.js +90 -0
  198. package/examples/jsm/postprocessing/OutlinePass.js +266 -133
  199. package/examples/jsm/postprocessing/OutputPass.js +53 -14
  200. package/examples/jsm/postprocessing/Pass.js +98 -4
  201. package/examples/jsm/postprocessing/RenderPass.js +83 -0
  202. package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
  203. package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
  204. package/examples/jsm/postprocessing/SAOPass.js +126 -53
  205. package/examples/jsm/postprocessing/SMAAPass.js +103 -71
  206. package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
  207. package/examples/jsm/postprocessing/SSAOPass.js +160 -47
  208. package/examples/jsm/postprocessing/SSRPass.js +230 -49
  209. package/examples/jsm/postprocessing/SavePass.js +68 -16
  210. package/examples/jsm/postprocessing/ShaderPass.js +64 -7
  211. package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
  212. package/examples/jsm/postprocessing/TexturePass.js +71 -8
  213. package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
  214. package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
  215. package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
  216. package/examples/jsm/renderers/Projector.js +18 -2
  217. package/examples/jsm/renderers/SVGRenderer.js +124 -0
  218. package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
  219. package/examples/jsm/shaders/AfterimageShader.js +6 -4
  220. package/examples/jsm/shaders/BasicShader.js +6 -2
  221. package/examples/jsm/shaders/BleachBypassShader.js +8 -4
  222. package/examples/jsm/shaders/BlendShader.js +6 -2
  223. package/examples/jsm/shaders/BokehShader.js +7 -4
  224. package/examples/jsm/shaders/BokehShader2.js +7 -3
  225. package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
  226. package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
  227. package/examples/jsm/shaders/ColorifyShader.js +6 -2
  228. package/examples/jsm/shaders/ConvolutionShader.js +7 -39
  229. package/examples/jsm/shaders/CopyShader.js +6 -2
  230. package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
  231. package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
  232. package/examples/jsm/shaders/DigitalGlitch.js +7 -7
  233. package/examples/jsm/shaders/DotScreenShader.js +6 -4
  234. package/examples/jsm/shaders/ExposureShader.js +6 -2
  235. package/examples/jsm/shaders/FXAAShader.js +15 -7
  236. package/examples/jsm/shaders/FilmShader.js +10 -0
  237. package/examples/jsm/shaders/FocusShader.js +6 -4
  238. package/examples/jsm/shaders/FreiChenShader.js +7 -3
  239. package/examples/jsm/shaders/GTAOShader.js +33 -39
  240. package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
  241. package/examples/jsm/shaders/GodRaysShader.js +14 -5
  242. package/examples/jsm/shaders/HalftoneShader.js +11 -5
  243. package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
  244. package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
  245. package/examples/jsm/shaders/HueSaturationShader.js +7 -3
  246. package/examples/jsm/shaders/KaleidoShader.js +8 -4
  247. package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
  248. package/examples/jsm/shaders/LuminosityShader.js +6 -3
  249. package/examples/jsm/shaders/MirrorShader.js +7 -4
  250. package/examples/jsm/shaders/NormalMapShader.js +5 -3
  251. package/examples/jsm/shaders/OutputShader.js +11 -0
  252. package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
  253. package/examples/jsm/shaders/RGBShiftShader.js +5 -1
  254. package/examples/jsm/shaders/SAOShader.js +8 -2
  255. package/examples/jsm/shaders/SMAAShader.js +23 -1
  256. package/examples/jsm/shaders/SSAOShader.js +23 -5
  257. package/examples/jsm/shaders/SSRShader.js +25 -1
  258. package/examples/jsm/shaders/SepiaShader.js +6 -4
  259. package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
  260. package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
  261. package/examples/jsm/shaders/TechnicolorShader.js +7 -4
  262. package/examples/jsm/shaders/ToonShader.js +29 -7
  263. package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
  264. package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
  265. package/examples/jsm/shaders/VelocityShader.js +6 -2
  266. package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
  267. package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
  268. package/examples/jsm/shaders/VignetteShader.js +6 -4
  269. package/examples/jsm/shaders/VolumeShader.js +7 -1
  270. package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
  271. package/examples/jsm/textures/FlakesTexture.js +12 -0
  272. package/examples/jsm/transpiler/Transpiler.js +31 -0
  273. package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
  274. package/examples/jsm/tsl/display/BloomNode.js +1 -1
  275. package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
  276. package/examples/jsm/tsl/display/SSRNode.js +1 -1
  277. package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
  278. package/examples/jsm/tsl/math/Bayer.js +14 -1
  279. package/examples/jsm/tsl/utils/Raymarching.js +4 -2
  280. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  281. package/examples/jsm/utils/CameraUtils.js +10 -7
  282. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  283. package/examples/jsm/utils/GeometryUtils.js +12 -13
  284. package/examples/jsm/utils/LDrawUtils.js +11 -4
  285. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  286. package/examples/jsm/utils/SceneUtils.js +50 -3
  287. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  288. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  289. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  290. package/examples/jsm/utils/SortUtils.js +14 -5
  291. package/examples/jsm/utils/UVsDebug.js +9 -4
  292. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  293. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  294. package/examples/jsm/utils/WorkerPool.js +65 -2
  295. package/examples/jsm/webxr/ARButton.js +18 -0
  296. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  297. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  298. package/examples/jsm/webxr/Text2D.js +11 -0
  299. package/examples/jsm/webxr/VRButton.js +30 -0
  300. package/examples/jsm/webxr/XRButton.js +22 -0
  301. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  302. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  303. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  304. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  305. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  306. package/examples/jsm/webxr/XRPlanes.js +17 -0
  307. package/package.json +1 -1
  308. package/src/Three.TSL.js +3 -1
  309. package/src/animation/AnimationAction.js +262 -30
  310. package/src/animation/AnimationClip.js +141 -2
  311. package/src/animation/AnimationMixer.js +99 -15
  312. package/src/animation/AnimationObjectGroup.js +41 -18
  313. package/src/animation/AnimationUtils.js +168 -18
  314. package/src/animation/KeyframeTrack.js +144 -10
  315. package/src/animation/PropertyBinding.js +77 -3
  316. package/src/animation/PropertyMixer.js +72 -5
  317. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  318. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  319. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  320. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  321. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  322. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  323. package/src/audio/AudioAnalyser.js +1 -1
  324. package/src/audio/AudioListener.js +2 -2
  325. package/src/audio/PositionalAudio.js +5 -5
  326. package/src/constants.js +1432 -5
  327. package/src/core/BufferAttribute.js +413 -3
  328. package/src/core/BufferGeometry.js +337 -1
  329. package/src/core/Clock.js +60 -0
  330. package/src/core/GLBufferAttribute.js +99 -0
  331. package/src/core/InstancedBufferAttribute.js +29 -0
  332. package/src/core/InstancedBufferGeometry.js +20 -0
  333. package/src/core/InstancedInterleavedBuffer.js +26 -0
  334. package/src/core/InterleavedBuffer.js +137 -3
  335. package/src/core/InterleavedBufferAttribute.js +197 -0
  336. package/src/core/Layers.js +71 -10
  337. package/src/core/Object3D.js +23 -0
  338. package/src/core/Raycaster.js +134 -1
  339. package/src/core/RenderTarget.js +166 -7
  340. package/src/core/RenderTarget3D.js +25 -0
  341. package/src/core/RenderTargetArray.js +18 -0
  342. package/src/core/Uniform.js +29 -0
  343. package/src/core/UniformsGroup.js +84 -2
  344. package/src/extras/Controls.js +16 -1
  345. package/src/extras/Earcut.js +3 -781
  346. package/src/extras/ImageUtils.js +3 -2
  347. package/src/extras/PMREMGenerator.js +22 -17
  348. package/src/extras/core/Curve.js +1 -1
  349. package/src/extras/core/Path.js +1 -1
  350. package/src/extras/lib/earcut.js +685 -0
  351. package/src/geometries/ConeGeometry.js +2 -2
  352. package/src/geometries/CylinderGeometry.js +2 -2
  353. package/src/geometries/ExtrudeGeometry.js +71 -39
  354. package/src/geometries/LatheGeometry.js +1 -1
  355. package/src/lights/LightShadow.js +1 -1
  356. package/src/lights/webgpu/IESSpotLight.js +1 -1
  357. package/src/loaders/AnimationLoader.js +31 -0
  358. package/src/loaders/AudioLoader.js +31 -0
  359. package/src/loaders/BufferGeometryLoader.js +34 -0
  360. package/src/loaders/Cache.js +45 -0
  361. package/src/loaders/CompressedTextureLoader.js +36 -3
  362. package/src/loaders/CubeTextureLoader.js +45 -0
  363. package/src/loaders/DataTextureLoader.js +44 -3
  364. package/src/loaders/FileLoader.js +57 -1
  365. package/src/loaders/ImageBitmapLoader.js +57 -0
  366. package/src/loaders/ImageLoader.js +30 -0
  367. package/src/loaders/Loader.js +4 -6
  368. package/src/loaders/LoaderUtils.js +18 -36
  369. package/src/loaders/LoadingManager.js +142 -0
  370. package/src/loaders/MaterialLoader.js +57 -0
  371. package/src/loaders/ObjectLoader.js +58 -1
  372. package/src/loaders/TextureLoader.js +33 -0
  373. package/src/loaders/nodes/NodeLoader.js +6 -2
  374. package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
  375. package/src/loaders/nodes/NodeObjectLoader.js +3 -3
  376. package/src/materials/LineBasicMaterial.js +74 -1
  377. package/src/materials/LineDashedMaterial.js +52 -0
  378. package/src/materials/Material.js +18 -3
  379. package/src/materials/MeshBasicMaterial.js +165 -0
  380. package/src/materials/MeshDepthMaterial.js +93 -0
  381. package/src/materials/MeshDistanceMaterial.js +76 -0
  382. package/src/materials/MeshLambertMaterial.js +273 -0
  383. package/src/materials/MeshMatcapMaterial.js +142 -0
  384. package/src/materials/MeshNormalMaterial.js +113 -0
  385. package/src/materials/MeshPhongMaterial.js +288 -0
  386. package/src/materials/MeshPhysicalMaterial.js +292 -1
  387. package/src/materials/MeshStandardMaterial.js +297 -0
  388. package/src/materials/MeshToonMaterial.js +218 -0
  389. package/src/materials/PointsMaterial.js +89 -0
  390. package/src/materials/RawShaderMaterial.js +25 -0
  391. package/src/materials/ShaderMaterial.js +215 -6
  392. package/src/materials/ShadowMaterial.js +54 -0
  393. package/src/materials/SpriteMaterial.js +82 -0
  394. package/src/materials/nodes/Line2NodeMaterial.js +1 -1
  395. package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
  396. package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
  397. package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
  398. package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
  399. package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
  400. package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
  401. package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
  402. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
  403. package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
  404. package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
  405. package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
  406. package/src/materials/nodes/NodeMaterial.js +7 -3
  407. package/src/materials/nodes/PointsNodeMaterial.js +1 -1
  408. package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
  409. package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
  410. package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
  411. package/src/math/Color.js +1 -1
  412. package/src/math/MathUtils.js +223 -0
  413. package/src/nodes/Nodes.js +1 -0
  414. package/src/nodes/accessors/BatchNode.js +8 -8
  415. package/src/nodes/accessors/BuiltinNode.js +1 -1
  416. package/src/nodes/accessors/CubeTextureNode.js +1 -1
  417. package/src/nodes/accessors/InstanceNode.js +5 -5
  418. package/src/nodes/accessors/InstancedMeshNode.js +1 -1
  419. package/src/nodes/accessors/MorphNode.js +27 -23
  420. package/src/nodes/accessors/Normal.js +1 -1
  421. package/src/nodes/accessors/Object3DNode.js +12 -12
  422. package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
  423. package/src/nodes/accessors/ReferenceNode.js +1 -1
  424. package/src/nodes/accessors/SkinningNode.js +46 -37
  425. package/src/nodes/accessors/StorageBufferNode.js +1 -1
  426. package/src/nodes/accessors/StorageTextureNode.js +3 -3
  427. package/src/nodes/accessors/Texture3DNode.js +1 -1
  428. package/src/nodes/accessors/TextureNode.js +25 -5
  429. package/src/nodes/accessors/TextureSizeNode.js +1 -1
  430. package/src/nodes/accessors/UniformArrayNode.js +2 -2
  431. package/src/nodes/code/CodeNode.js +4 -4
  432. package/src/nodes/code/ExpressionNode.js +4 -4
  433. package/src/nodes/code/FunctionCallNode.js +23 -3
  434. package/src/nodes/code/ScriptableNode.js +4 -4
  435. package/src/nodes/code/ScriptableValueNode.js +2 -2
  436. package/src/nodes/core/AssignNode.js +1 -1
  437. package/src/nodes/core/AttributeNode.js +1 -1
  438. package/src/nodes/core/BypassNode.js +1 -1
  439. package/src/nodes/core/CacheNode.js +1 -1
  440. package/src/nodes/core/ContextNode.js +1 -1
  441. package/src/nodes/core/InputNode.js +2 -2
  442. package/src/nodes/core/Node.js +14 -2
  443. package/src/nodes/core/NodeBuilder.js +86 -14
  444. package/src/nodes/core/StackNode.js +5 -5
  445. package/src/nodes/core/StructNode.js +1 -1
  446. package/src/nodes/core/StructTypeNode.js +2 -2
  447. package/src/nodes/core/VarNode.js +2 -8
  448. package/src/nodes/core/VaryingNode.js +3 -3
  449. package/src/nodes/display/BlendModes.js +4 -4
  450. package/src/nodes/display/BumpMapNode.js +1 -1
  451. package/src/nodes/display/NormalMapNode.js +1 -1
  452. package/src/nodes/display/PosterizeNode.js +1 -1
  453. package/src/nodes/display/ScreenNode.js +3 -3
  454. package/src/nodes/display/ViewportDepthNode.js +2 -2
  455. package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
  456. package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
  457. package/src/nodes/display/ViewportTextureNode.js +4 -4
  458. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  459. package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
  460. package/src/nodes/geometry/RangeNode.js +1 -1
  461. package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
  462. package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
  463. package/src/nodes/gpgpu/ComputeNode.js +30 -2
  464. package/src/nodes/lighting/AnalyticLightNode.js +9 -1
  465. package/src/nodes/lighting/LightsNode.js +3 -3
  466. package/src/nodes/lighting/ShadowNode.js +1 -1
  467. package/src/nodes/math/ConditionalNode.js +20 -3
  468. package/src/nodes/math/MathNode.js +83 -78
  469. package/src/nodes/math/OperatorNode.js +171 -82
  470. package/src/nodes/pmrem/PMREMNode.js +4 -4
  471. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  472. package/src/nodes/tsl/TSLBase.js +2 -1
  473. package/src/nodes/tsl/TSLCore.js +115 -12
  474. package/src/nodes/utils/ArrayElementNode.js +3 -1
  475. package/src/nodes/utils/CubeMapNode.js +3 -3
  476. package/src/nodes/utils/DebugNode.js +70 -0
  477. package/src/nodes/utils/EquirectUVNode.js +2 -2
  478. package/src/nodes/utils/JoinNode.js +27 -2
  479. package/src/nodes/utils/LoopNode.js +58 -28
  480. package/src/nodes/utils/MaxMipLevelNode.js +1 -1
  481. package/src/nodes/utils/ReflectorNode.js +2 -2
  482. package/src/nodes/utils/RemapNode.js +6 -6
  483. package/src/nodes/utils/RotateNode.js +1 -1
  484. package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
  485. package/src/nodes/utils/StorageArrayElementNode.js +1 -1
  486. package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
  487. package/src/objects/BatchedMesh.js +4 -4
  488. package/src/objects/InstancedMesh.js +2 -2
  489. package/src/objects/LOD.js +1 -1
  490. package/src/objects/Skeleton.js +1 -1
  491. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  492. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  493. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  494. package/src/renderers/WebGLRenderTarget.js +19 -0
  495. package/src/renderers/WebGLRenderer.js +617 -79
  496. package/src/renderers/common/Animation.js +2 -2
  497. package/src/renderers/common/Attributes.js +2 -2
  498. package/src/renderers/common/Backend.js +12 -3
  499. package/src/renderers/common/Background.js +1 -0
  500. package/src/renderers/common/Color4.js +1 -1
  501. package/src/renderers/common/CubeRenderTarget.js +13 -0
  502. package/src/renderers/common/PostProcessing.js +2 -0
  503. package/src/renderers/common/QuadMesh.js +2 -0
  504. package/src/renderers/common/RenderList.js +2 -2
  505. package/src/renderers/common/RenderObject.js +1 -1
  506. package/src/renderers/common/RenderObjects.js +2 -2
  507. package/src/renderers/common/Renderer.js +52 -31
  508. package/src/renderers/common/XRManager.js +333 -10
  509. package/src/renderers/common/extras/PMREMGenerator.js +6 -0
  510. package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
  511. package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +10 -1
  512. package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +8 -1
  513. package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +5 -1
  514. package/src/renderers/shaders/ShaderChunk/common.glsl.js +82 -0
  515. package/src/renderers/shaders/ShaderChunk/defaultnormal_vertex.glsl.js +22 -2
  516. package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +12 -1
  517. package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +8 -2
  518. package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +31 -11
  519. package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -1
  520. package/src/renderers/shaders/ShaderChunk/normal_pars_fragment.glsl.js +1 -1
  521. package/src/renderers/shaders/ShaderChunk/normal_pars_vertex.glsl.js +1 -1
  522. package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -1
  523. package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +12 -1
  524. package/src/renderers/shaders/ShaderChunk/triplanar_fragment.glsl.js +20 -0
  525. package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +52 -7
  526. package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +25 -6
  527. package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +19 -7
  528. package/src/renderers/shaders/ShaderChunk.js +2 -0
  529. package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +2 -0
  530. package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +1 -0
  531. package/src/renderers/shaders/UniformsLib.js +6 -5
  532. package/src/renderers/shaders/UniformsUtils.js +1 -3
  533. package/src/renderers/webgl/WebGLBackground.js +4 -2
  534. package/src/renderers/webgl/WebGLMaterials.js +12 -0
  535. package/src/renderers/webgl/WebGLProgram.js +25 -5
  536. package/src/renderers/webgl/WebGLPrograms.js +21 -7
  537. package/src/renderers/webgl/WebGLState.js +9 -9
  538. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  539. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  540. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  541. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  542. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  543. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  544. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  545. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  546. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  547. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  548. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  549. package/src/renderers/webxr/WebXRController.js +87 -2
  550. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  551. package/src/renderers/webxr/WebXRManager.js +173 -1
  552. package/src/scenes/Scene.js +2 -1
  553. package/src/textures/CanvasTexture.js +28 -0
  554. package/src/textures/CompressedArrayTexture.js +57 -0
  555. package/src/textures/CompressedCubeTexture.js +29 -0
  556. package/src/textures/CompressedTexture.js +64 -6
  557. package/src/textures/CubeTexture.js +52 -4
  558. package/src/textures/Data3DTexture.js +77 -0
  559. package/src/textures/DataArrayTexture.js +93 -0
  560. package/src/textures/DataTexture.js +65 -0
  561. package/src/textures/DepthTexture.js +59 -9
  562. package/src/textures/FramebufferTexture.js +62 -0
  563. package/src/textures/Source.js +69 -0
  564. package/src/textures/Texture.js +5 -5
  565. package/src/textures/VideoFrameTexture.js +43 -6
  566. package/src/textures/VideoTexture.js +49 -4
  567. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -5,10 +5,6 @@ import {
5
5
  Vector3
6
6
  } from 'three';
7
7
 
8
- /**
9
- * Ported from: https://github.com/maurizzzio/quickhull3d/ by Mauricio Poppe (https://github.com/maurizzzio)
10
- */
11
-
12
8
  const Visible = 0;
13
9
  const Deleted = 1;
14
10
 
@@ -18,8 +14,18 @@ const _plane = new Plane();
18
14
  const _closestPoint = new Vector3();
19
15
  const _triangle = new Triangle();
20
16
 
17
+ /**
18
+ * Can be used to compute the convex hull in 3D space for a given set of points. It
19
+ * is primarily intended for {@link ConvexGeometry}.
20
+ *
21
+ * This Quickhull 3D implementation is a port of [quickhull3d]{@link https://github.com/maurizzzio/quickhull3d/}
22
+ * by Mauricio Poppe.
23
+ */
21
24
  class ConvexHull {
22
25
 
26
+ /**
27
+ * Constructs a new convex hull.
28
+ */
23
29
  constructor() {
24
30
 
25
31
  this.tolerance = - 1;
@@ -40,10 +46,16 @@ class ConvexHull {
40
46
  this.assigned = new VertexList();
41
47
  this.unassigned = new VertexList();
42
48
 
43
- this.vertices = []; // vertices of the hull (internal representation of given geometry data)
49
+ this.vertices = []; // vertices of the hull (internal representation of given geometry data)
44
50
 
45
51
  }
46
52
 
53
+ /**
54
+ * Computes to convex hull for the given array of points.
55
+ *
56
+ * @param {Array<Vector3>} points - The array of points in 3D space.
57
+ * @return {ConvexHull} A reference to this convex hull.
58
+ */
47
59
  setFromPoints( points ) {
48
60
 
49
61
  // The algorithm needs at least four points.
@@ -58,7 +70,7 @@ class ConvexHull {
58
70
 
59
71
  }
60
72
 
61
- this.compute();
73
+ this._compute();
62
74
 
63
75
  }
64
76
 
@@ -66,6 +78,13 @@ class ConvexHull {
66
78
 
67
79
  }
68
80
 
81
+ /**
82
+ * Computes the convex hull of the given 3D object (including its descendants),
83
+ * accounting for the world transforms of both the 3D object and its descendants.
84
+ *
85
+ * @param {Object3D} object - The 3D object to compute the convex hull for.
86
+ * @return {ConvexHull} A reference to this convex hull.
87
+ */
69
88
  setFromObject( object ) {
70
89
 
71
90
  const points = [];
@@ -102,6 +121,12 @@ class ConvexHull {
102
121
 
103
122
  }
104
123
 
124
+ /**
125
+ * Returns `true` if the given point lies in the convex hull.
126
+ *
127
+ * @param {Vector3} point - The point to test.
128
+ * @return {boolean} Whether the given point lies in the convex hull or not.
129
+ */
105
130
  containsPoint( point ) {
106
131
 
107
132
  const faces = this.faces;
@@ -120,6 +145,13 @@ class ConvexHull {
120
145
 
121
146
  }
122
147
 
148
+ /**
149
+ * Computes the intersections point of the given ray and this convex hull.
150
+ *
151
+ * @param {Ray} ray - The ray to test.
152
+ * @param {Vector3} target - The target vector that is used to store the method's result.
153
+ * @return {Vector3|null} The intersection point. Returns `null` if not intersection was detected.
154
+ */
123
155
  intersectRay( ray, target ) {
124
156
 
125
157
  // based on "Fast Ray-Convex Polyhedron Intersection" by Eric Haines, GRAPHICS GEMS II
@@ -196,12 +228,23 @@ class ConvexHull {
196
228
 
197
229
  }
198
230
 
231
+ /**
232
+ * Returns `true` if the given ray intersects with this convex hull.
233
+ *
234
+ * @param {Ray} ray - The ray to test.
235
+ * @return {boolean} Whether the given ray intersects with this convex hull or not.
236
+ */
199
237
  intersectsRay( ray ) {
200
238
 
201
239
  return this.intersectRay( ray, _v1 ) !== null;
202
240
 
203
241
  }
204
242
 
243
+ /**
244
+ * Makes the convex hull empty.
245
+ *
246
+ * @return {ConvexHull} A reference to this convex hull.
247
+ */
205
248
  makeEmpty() {
206
249
 
207
250
  this.faces = [];
@@ -211,9 +254,17 @@ class ConvexHull {
211
254
 
212
255
  }
213
256
 
214
- // Adds a vertex to the 'assigned' list of vertices and assigns it to the given face
257
+ // private
215
258
 
216
- addVertexToFace( vertex, face ) {
259
+ /**
260
+ * Adds a vertex to the 'assigned' list of vertices and assigns it to the given face.
261
+ *
262
+ * @private
263
+ * @param {VertexNode} vertex - The vertex to add.
264
+ * @param {Face} face - The target face.
265
+ * @return {ConvexHull} A reference to this convex hull.
266
+ */
267
+ _addVertexToFace( vertex, face ) {
217
268
 
218
269
  vertex.face = face;
219
270
 
@@ -233,9 +284,17 @@ class ConvexHull {
233
284
 
234
285
  }
235
286
 
236
- // Removes a vertex from the 'assigned' list of vertices and from the given face
237
-
238
- removeVertexFromFace( vertex, face ) {
287
+ /**
288
+ * Removes a vertex from the 'assigned' list of vertices and from the given face.
289
+ * It also makes sure that the link from 'face' to the first vertex it sees in 'assigned'
290
+ * is linked correctly after the removal.
291
+ *
292
+ * @private
293
+ * @param {VertexNode} vertex - The vertex to remove.
294
+ * @param {Face} face - The target face.
295
+ * @return {ConvexHull} A reference to this convex hull.
296
+ */
297
+ _removeVertexFromFace( vertex, face ) {
239
298
 
240
299
  if ( vertex === face.outside ) {
241
300
 
@@ -263,9 +322,15 @@ class ConvexHull {
263
322
 
264
323
  }
265
324
 
266
- // Removes all the visible vertices that a given face is able to see which are stored in the 'assigned' vertex list
267
-
268
- removeAllVerticesFromFace( face ) {
325
+ /**
326
+ * Removes all the visible vertices that a given face is able to see which are stored in
327
+ * the 'assigned' vertex list.
328
+ *
329
+ * @private
330
+ * @param {Face} face - The target face.
331
+ * @return {VertexNode|undefined} A reference to this convex hull.
332
+ */
333
+ _removeAllVerticesFromFace( face ) {
269
334
 
270
335
  if ( face.outside !== null ) {
271
336
 
@@ -293,11 +358,21 @@ class ConvexHull {
293
358
 
294
359
  }
295
360
 
296
- // Removes all the visible vertices that 'face' is able to see
297
-
298
- deleteFaceVertices( face, absorbingFace ) {
299
-
300
- const faceVertices = this.removeAllVerticesFromFace( face );
361
+ /**
362
+ * Removes all the visible vertices that `face` is able to see.
363
+ *
364
+ * - If `absorbingFace` doesn't exist, then all the removed vertices will be added to the 'unassigned' vertex list.
365
+ * - If `absorbingFace` exists, then this method will assign all the vertices of 'face' that can see 'absorbingFace'.
366
+ * - If a vertex cannot see `absorbingFace`, it's added to the 'unassigned' vertex list.
367
+ *
368
+ * @private
369
+ * @param {Face} face - The given face.
370
+ * @param {Face} [absorbingFace] - An optional face that tries to absorb the vertices of the first face.
371
+ * @return {ConvexHull} A reference to this convex hull.
372
+ */
373
+ _deleteFaceVertices( face, absorbingFace ) {
374
+
375
+ const faceVertices = this._removeAllVerticesFromFace( face );
301
376
 
302
377
  if ( faceVertices !== undefined ) {
303
378
 
@@ -327,7 +402,7 @@ class ConvexHull {
327
402
 
328
403
  if ( distance > this.tolerance ) {
329
404
 
330
- this.addVertexToFace( vertex, absorbingFace );
405
+ this._addVertexToFace( vertex, absorbingFace );
331
406
 
332
407
  } else {
333
408
 
@@ -349,9 +424,14 @@ class ConvexHull {
349
424
 
350
425
  }
351
426
 
352
- // Reassigns as many vertices as possible from the unassigned list to the new faces
353
-
354
- resolveUnassignedPoints( newFaces ) {
427
+ /**
428
+ * Reassigns as many vertices as possible from the unassigned list to the new faces.
429
+ *
430
+ * @private
431
+ * @param {Array<Face>} newFaces - The new faces.
432
+ * @return {ConvexHull} A reference to this convex hull.
433
+ */
434
+ _resolveUnassignedPoints( newFaces ) {
355
435
 
356
436
  if ( this.unassigned.isEmpty() === false ) {
357
437
 
@@ -359,7 +439,7 @@ class ConvexHull {
359
439
 
360
440
  do {
361
441
 
362
- // buffer 'next' reference, see .deleteFaceVertices()
442
+ // buffer 'next' reference, see ._deleteFaceVertices()
363
443
 
364
444
  const nextVertex = vertex.next;
365
445
 
@@ -392,7 +472,7 @@ class ConvexHull {
392
472
 
393
473
  if ( maxFace !== null ) {
394
474
 
395
- this.addVertexToFace( vertex, maxFace );
475
+ this._addVertexToFace( vertex, maxFace );
396
476
 
397
477
  }
398
478
 
@@ -406,9 +486,14 @@ class ConvexHull {
406
486
 
407
487
  }
408
488
 
409
- // Computes the extremes of a simplex which will be the initial hull
410
-
411
- computeExtremes() {
489
+ /**
490
+ * Computes the extremes values (min/max vectors) which will be used to
491
+ * compute the initial hull.
492
+ *
493
+ * @private
494
+ * @return {Object} The extremes.
495
+ */
496
+ _computeExtremes() {
412
497
 
413
498
  const min = new Vector3();
414
499
  const max = new Vector3();
@@ -474,13 +559,17 @@ class ConvexHull {
474
559
 
475
560
  }
476
561
 
477
- // Computes the initial simplex assigning to its faces all the points
478
- // that are candidates to form part of the hull
479
-
480
- computeInitialHull() {
562
+ /**
563
+ * Computes the initial simplex assigning to its faces all the points that are
564
+ * candidates to form part of the hull.
565
+ *
566
+ * @private
567
+ * @return {ConvexHull} A reference to this convex hull.
568
+ */
569
+ _computeInitialHull() {
481
570
 
482
571
  const vertices = this.vertices;
483
- const extremes = this.computeExtremes();
572
+ const extremes = this._computeExtremes();
484
573
  const min = extremes.min;
485
574
  const max = extremes.max;
486
575
 
@@ -652,7 +741,7 @@ class ConvexHull {
652
741
 
653
742
  if ( maxFace !== null ) {
654
743
 
655
- this.addVertexToFace( vertex, maxFace );
744
+ this._addVertexToFace( vertex, maxFace );
656
745
 
657
746
  }
658
747
 
@@ -664,9 +753,13 @@ class ConvexHull {
664
753
 
665
754
  }
666
755
 
667
- // Removes inactive faces
668
-
669
- reindexFaces() {
756
+ /**
757
+ * Removes inactive (e.g. deleted) faces from the internal face list.
758
+ *
759
+ * @private
760
+ * @return {ConvexHull} A reference to this convex hull.
761
+ */
762
+ _reindexFaces() {
670
763
 
671
764
  const activeFaces = [];
672
765
 
@@ -688,9 +781,17 @@ class ConvexHull {
688
781
 
689
782
  }
690
783
 
691
- // Finds the next vertex to create faces with the current hull
692
-
693
- nextVertexToAdd() {
784
+ /**
785
+ * Finds the next vertex to create faces with the current hull.
786
+ *
787
+ * - Let the initial face be the first face existing in the 'assigned' vertex list.
788
+ * - If a face doesn't exist then return since there're no vertices left.
789
+ * - Otherwise for each vertex that face sees find the one furthest away from it.
790
+ *
791
+ * @private
792
+ * @return {?VertexNode} The next vertex to add.
793
+ */
794
+ _nextVertexToAdd() {
694
795
 
695
796
  // if the 'assigned' list of vertices is empty, no vertices are left. return with 'undefined'
696
797
 
@@ -726,15 +827,23 @@ class ConvexHull {
726
827
 
727
828
  }
728
829
 
729
- // Computes a chain of half edges in CCW order called the 'horizon'.
730
- // For an edge to be part of the horizon it must join a face that can see
731
- // 'eyePoint' and a face that cannot see 'eyePoint'.
732
-
733
- computeHorizon( eyePoint, crossEdge, face, horizon ) {
830
+ /**
831
+ * Computes a chain of half edges in CCW order called the 'horizon'. For an edge
832
+ * to be part of the horizon it must join a face that can see 'eyePoint' and a face
833
+ * that cannot see 'eyePoint'.
834
+ *
835
+ * @private
836
+ * @param {Vector3} eyePoint - The 3D-coordinates of a point.
837
+ * @param {HalfEdge} crossEdge - The edge used to jump to the current face.
838
+ * @param {Face} face - The current face being tested.
839
+ * @param {Array<HalfEdge>} horizon - The edges that form part of the horizon in CCW order.
840
+ * @return {ConvexHull} A reference to this convex hull.
841
+ */
842
+ _computeHorizon( eyePoint, crossEdge, face, horizon ) {
734
843
 
735
844
  // moves face's vertices to the 'unassigned' vertex list
736
845
 
737
- this.deleteFaceVertices( face );
846
+ this._deleteFaceVertices( face );
738
847
 
739
848
  face.mark = Deleted;
740
849
 
@@ -764,7 +873,7 @@ class ConvexHull {
764
873
 
765
874
  // the opposite face can see the vertex, so proceed with next edge
766
875
 
767
- this.computeHorizon( eyePoint, twinEdge, oppositeFace, horizon );
876
+ this._computeHorizon( eyePoint, twinEdge, oppositeFace, horizon );
768
877
 
769
878
  } else {
770
879
 
@@ -784,9 +893,17 @@ class ConvexHull {
784
893
 
785
894
  }
786
895
 
787
- // Creates a face with the vertices 'eyeVertex.point', 'horizonEdge.tail' and 'horizonEdge.head' in CCW order
788
-
789
- addAdjoiningFace( eyeVertex, horizonEdge ) {
896
+ /**
897
+ * Creates a face with the vertices 'eyeVertex.point', 'horizonEdge.tail' and 'horizonEdge.head'
898
+ * in CCW order. All the half edges are created in CCW order thus the face is always pointing
899
+ * outside the hull.
900
+ *
901
+ * @private
902
+ * @param {VertexNode} eyeVertex - The vertex that is added to the hull.
903
+ * @param {HalfEdge} horizonEdge - A single edge of the horizon.
904
+ * @return {HalfEdge} The half edge whose vertex is the eyeVertex.
905
+ */
906
+ _addAdjoiningFace( eyeVertex, horizonEdge ) {
790
907
 
791
908
  // all the half edges are created in ccw order thus the face is always pointing outside the hull
792
909
 
@@ -803,10 +920,16 @@ class ConvexHull {
803
920
 
804
921
  }
805
922
 
806
- // Adds 'horizon.length' faces to the hull, each face will be linked with the
807
- // horizon opposite face and the face on the left/right
808
-
809
- addNewFaces( eyeVertex, horizon ) {
923
+ /**
924
+ * Adds 'horizon.length' faces to the hull, each face will be linked with the horizon
925
+ * opposite face and the face on the left/right.
926
+ *
927
+ * @private
928
+ * @param {VertexNode} eyeVertex - The vertex that is added to the hull.
929
+ * @param {Array<HalfEdge>} horizon - The horizon.
930
+ * @return {ConvexHull} A reference to this convex hull.
931
+ */
932
+ _addNewFaces( eyeVertex, horizon ) {
810
933
 
811
934
  this.newFaces = [];
812
935
 
@@ -819,7 +942,7 @@ class ConvexHull {
819
942
 
820
943
  // returns the right side edge
821
944
 
822
- const sideEdge = this.addAdjoiningFace( eyeVertex, horizonEdge );
945
+ const sideEdge = this._addAdjoiningFace( eyeVertex, horizonEdge );
823
946
 
824
947
  if ( firstSideEdge === null ) {
825
948
 
@@ -846,9 +969,21 @@ class ConvexHull {
846
969
 
847
970
  }
848
971
 
849
- // Adds a vertex to the hull
850
-
851
- addVertexToHull( eyeVertex ) {
972
+ /**
973
+ * Adds a vertex to the hull with the following algorithm:
974
+ *
975
+ * - Compute the 'horizon' which is a chain of half edges. For an edge to belong to this group
976
+ * it must be the edge connecting a face that can see 'eyeVertex' and a face which cannot see 'eyeVertex'.
977
+ * - All the faces that can see 'eyeVertex' have its visible vertices removed from the assigned vertex list.
978
+ * - A new set of faces is created with each edge of the 'horizon' and 'eyeVertex'. Each face is connected
979
+ * with the opposite horizon face and the face on the left/right.
980
+ * - The vertices removed from all the visible faces are assigned to the new faces if possible.
981
+ *
982
+ * @private
983
+ * @param {VertexNode} eyeVertex - The vertex to add.
984
+ * @return {ConvexHull} A reference to this convex hull.
985
+ */
986
+ _addVertexToHull( eyeVertex ) {
852
987
 
853
988
  const horizon = [];
854
989
 
@@ -856,21 +991,27 @@ class ConvexHull {
856
991
 
857
992
  // remove 'eyeVertex' from 'eyeVertex.face' so that it can't be added to the 'unassigned' vertex list
858
993
 
859
- this.removeVertexFromFace( eyeVertex, eyeVertex.face );
994
+ this._removeVertexFromFace( eyeVertex, eyeVertex.face );
860
995
 
861
- this.computeHorizon( eyeVertex.point, null, eyeVertex.face, horizon );
996
+ this._computeHorizon( eyeVertex.point, null, eyeVertex.face, horizon );
862
997
 
863
- this.addNewFaces( eyeVertex, horizon );
998
+ this._addNewFaces( eyeVertex, horizon );
864
999
 
865
1000
  // reassign 'unassigned' vertices to the new faces
866
1001
 
867
- this.resolveUnassignedPoints( this.newFaces );
1002
+ this._resolveUnassignedPoints( this.newFaces );
868
1003
 
869
1004
  return this;
870
1005
 
871
1006
  }
872
1007
 
873
- cleanup() {
1008
+ /**
1009
+ * Cleans up internal properties after computing the convex hull.
1010
+ *
1011
+ * @private
1012
+ * @return {ConvexHull} A reference to this convex hull.
1013
+ */
1014
+ _cleanup() {
874
1015
 
875
1016
  this.assigned.clear();
876
1017
  this.unassigned.clear();
@@ -880,23 +1021,29 @@ class ConvexHull {
880
1021
 
881
1022
  }
882
1023
 
883
- compute() {
1024
+ /**
1025
+ * Starts the execution of the quick hull algorithm.
1026
+ *
1027
+ * @private
1028
+ * @return {ConvexHull} A reference to this convex hull.
1029
+ */
1030
+ _compute() {
884
1031
 
885
1032
  let vertex;
886
1033
 
887
- this.computeInitialHull();
1034
+ this._computeInitialHull();
888
1035
 
889
1036
  // add all available vertices gradually to the hull
890
1037
 
891
- while ( ( vertex = this.nextVertexToAdd() ) !== undefined ) {
1038
+ while ( ( vertex = this._nextVertexToAdd() ) !== undefined ) {
892
1039
 
893
- this.addVertexToHull( vertex );
1040
+ this._addVertexToHull( vertex );
894
1041
 
895
1042
  }
896
1043
 
897
- this.reindexFaces();
1044
+ this._reindexFaces();
898
1045
 
899
- this.cleanup();
1046
+ this._cleanup();
900
1047
 
901
1048
  return this;
902
1049
 
@@ -904,23 +1051,84 @@ class ConvexHull {
904
1051
 
905
1052
  }
906
1053
 
907
- //
908
-
1054
+ /**
1055
+ * Represents a section bounded by a specific amount of half-edges.
1056
+ * The current implementation assumes that a face always consist of three edges.
1057
+ *
1058
+ * @private
1059
+ */
909
1060
  class Face {
910
1061
 
1062
+ /**
1063
+ * Constructs a new face.
1064
+ */
911
1065
  constructor() {
912
1066
 
1067
+ /**
1068
+ * The normal vector of the face.
1069
+ *
1070
+ * @private
1071
+ * @type {Vector3}
1072
+ */
913
1073
  this.normal = new Vector3();
1074
+
1075
+ /**
1076
+ * The midpoint or centroid of the face.
1077
+ *
1078
+ * @private
1079
+ * @type {Vector3}
1080
+ */
914
1081
  this.midpoint = new Vector3();
1082
+
1083
+ /**
1084
+ * The area of the face.
1085
+ *
1086
+ * @private
1087
+ * @type {number}
1088
+ * @default 0
1089
+ */
915
1090
  this.area = 0;
916
1091
 
917
- this.constant = 0; // signed distance from face to the origin
1092
+ /**
1093
+ * Signed distance from face to the origin.
1094
+ *
1095
+ * @private
1096
+ * @type {number}
1097
+ * @default 0
1098
+ */
1099
+ this.constant = 0;
1100
+
1101
+ /**
1102
+ * Reference to a vertex in a vertex list this face can see.
1103
+ *
1104
+ * @private
1105
+ * @type {?VertexNode}
1106
+ * @default null
1107
+ */
918
1108
  this.outside = null; // reference to a vertex in a vertex list this face can see
919
1109
  this.mark = Visible;
1110
+
1111
+ /**
1112
+ * Reference to the base edge of a face. To retrieve all edges, you can use the
1113
+ * `next` reference of the current edge.
1114
+ *
1115
+ * @private
1116
+ * @type {?HalfEdge}
1117
+ * @default null
1118
+ */
920
1119
  this.edge = null;
921
1120
 
922
1121
  }
923
1122
 
1123
+ /**
1124
+ * Creates a face from the given vertex nodes.
1125
+ *
1126
+ * @private
1127
+ * @param {VertexNode} a - The first vertex node.
1128
+ * @param {VertexNode} b - The second vertex node.
1129
+ * @param {VertexNode} c - The third vertex node.
1130
+ * @return {Face} The created face.
1131
+ */
924
1132
  static create( a, b, c ) {
925
1133
 
926
1134
  const face = new Face();
@@ -943,6 +1151,13 @@ class Face {
943
1151
 
944
1152
  }
945
1153
 
1154
+ /**
1155
+ * Returns an edge by the given index.
1156
+ *
1157
+ * @private
1158
+ * @param {number} i - The edge index.
1159
+ * @return {HalfEdge} The edge.
1160
+ */
946
1161
  getEdge( i ) {
947
1162
 
948
1163
  let edge = this.edge;
@@ -965,6 +1180,12 @@ class Face {
965
1180
 
966
1181
  }
967
1182
 
1183
+ /**
1184
+ * Computes all properties of the face.
1185
+ *
1186
+ * @private
1187
+ * @return {Face} A reference to this face.
1188
+ */
968
1189
  compute() {
969
1190
 
970
1191
  const a = this.edge.tail();
@@ -983,6 +1204,13 @@ class Face {
983
1204
 
984
1205
  }
985
1206
 
1207
+ /**
1208
+ * Returns the signed distance from a given point to the plane representation of this face.
1209
+ *
1210
+ * @private
1211
+ * @param {Vector3} point - The point to compute the distance to.
1212
+ * @return {number} The distance.
1213
+ */
986
1214
  distanceToPoint( point ) {
987
1215
 
988
1216
  return this.normal.dot( point ) - this.constant;
@@ -991,33 +1219,97 @@ class Face {
991
1219
 
992
1220
  }
993
1221
 
994
- // Entity for a Doubly-Connected Edge List (DCEL).
995
-
1222
+ /**
1223
+ * The basis for a half-edge data structure, also known as doubly
1224
+ * connected edge list (DCEL).
1225
+ *
1226
+ * @private
1227
+ */
996
1228
  class HalfEdge {
997
1229
 
998
-
1230
+ /**
1231
+ * Constructs a new half edge.
1232
+ *
1233
+ * @param {VertexNode} vertex - A reference to its destination vertex.
1234
+ * @param {Face} face - A reference to its face.
1235
+ */
999
1236
  constructor( vertex, face ) {
1000
1237
 
1238
+ /**
1239
+ * A reference to its destination vertex.
1240
+ *
1241
+ * @private
1242
+ * @type {VertexNode}
1243
+ */
1001
1244
  this.vertex = vertex;
1245
+
1246
+ /**
1247
+ * Reference to the previous half-edge of the same face.
1248
+ *
1249
+ * @private
1250
+ * @type {?HalfEdge}
1251
+ * @default null
1252
+ */
1002
1253
  this.prev = null;
1254
+
1255
+ /**
1256
+ * Reference to the next half-edge of the same face.
1257
+ *
1258
+ * @private
1259
+ * @type {?HalfEdge}
1260
+ * @default null
1261
+ */
1003
1262
  this.next = null;
1263
+
1264
+ /**
1265
+ * Reference to the twin half-edge to reach the opposite face.
1266
+ *
1267
+ * @private
1268
+ * @type {?HalfEdge}
1269
+ * @default null
1270
+ */
1004
1271
  this.twin = null;
1272
+
1273
+ /**
1274
+ * A reference to its face.
1275
+ *
1276
+ * @private
1277
+ * @type {Face}
1278
+ */
1005
1279
  this.face = face;
1006
1280
 
1007
1281
  }
1008
1282
 
1283
+ /**
1284
+ * Returns the destination vertex.
1285
+ *
1286
+ * @private
1287
+ * @return {VertexNode} The destination vertex.
1288
+ */
1009
1289
  head() {
1010
1290
 
1011
1291
  return this.vertex;
1012
1292
 
1013
1293
  }
1014
1294
 
1295
+ /**
1296
+ * Returns the origin vertex.
1297
+ *
1298
+ * @private
1299
+ * @return {VertexNode} The destination vertex.
1300
+ */
1015
1301
  tail() {
1016
1302
 
1017
1303
  return this.prev ? this.prev.vertex : null;
1018
1304
 
1019
1305
  }
1020
1306
 
1307
+ /**
1308
+ * Returns the Euclidean length (straight-line length) of the edge.
1309
+ *
1310
+ * @private
1311
+ * @return {number} The edge's length.
1312
+ */
1021
1313
  length() {
1022
1314
 
1023
1315
  const head = this.head();
@@ -1033,6 +1325,12 @@ class HalfEdge {
1033
1325
 
1034
1326
  }
1035
1327
 
1328
+ /**
1329
+ * Returns the square of the Euclidean length (straight-line length) of the edge.
1330
+ *
1331
+ * @private
1332
+ * @return {number} The square of the edge's length.
1333
+ */
1036
1334
  lengthSquared() {
1037
1335
 
1038
1336
  const head = this.head();
@@ -1048,6 +1346,14 @@ class HalfEdge {
1048
1346
 
1049
1347
  }
1050
1348
 
1349
+ /**
1350
+ * Sets the twin edge of this half-edge. It also ensures that the twin reference
1351
+ * of the given half-edge is correctly set.
1352
+ *
1353
+ * @private
1354
+ * @param {HalfEdge} edge - The twin edge to set.
1355
+ * @return {HalfEdge} A reference to this edge.
1356
+ */
1051
1357
  setTwin( edge ) {
1052
1358
 
1053
1359
  this.twin = edge;
@@ -1059,44 +1365,121 @@ class HalfEdge {
1059
1365
 
1060
1366
  }
1061
1367
 
1062
- // A vertex as a double linked list node.
1063
-
1368
+ /**
1369
+ * A vertex as a double linked list node.
1370
+ *
1371
+ * @private
1372
+ */
1064
1373
  class VertexNode {
1065
1374
 
1375
+ /**
1376
+ * Constructs a new vertex node.
1377
+ *
1378
+ * @param {Vector3} point - A point in 3D space.
1379
+ */
1066
1380
  constructor( point ) {
1067
1381
 
1382
+ /**
1383
+ * A point in 3D space.
1384
+ *
1385
+ * @private
1386
+ * @type {Vector3}
1387
+ */
1068
1388
  this.point = point;
1389
+
1390
+ /**
1391
+ * Reference to the previous vertex in the double linked list.
1392
+ *
1393
+ * @private
1394
+ * @type {?VertexNode}
1395
+ * @default null
1396
+ */
1069
1397
  this.prev = null;
1398
+
1399
+ /**
1400
+ * Reference to the next vertex in the double linked list.
1401
+ *
1402
+ * @private
1403
+ * @type {?VertexNode}
1404
+ * @default null
1405
+ */
1070
1406
  this.next = null;
1071
- this.face = null; // the face that is able to see this vertex
1407
+
1408
+ /**
1409
+ * Reference to the face that is able to see this vertex.
1410
+ *
1411
+ * @private
1412
+ * @type {?Face}
1413
+ * @default null
1414
+ */
1415
+ this.face = null;
1072
1416
 
1073
1417
  }
1074
1418
 
1075
1419
  }
1076
1420
 
1077
- // A double linked list that contains vertex nodes.
1078
-
1421
+ /**
1422
+ * A doubly linked list of vertices.
1423
+ *
1424
+ * @private
1425
+ */
1079
1426
  class VertexList {
1080
1427
 
1428
+ /**
1429
+ * Constructs a new vertex list.
1430
+ */
1081
1431
  constructor() {
1082
1432
 
1433
+ /**
1434
+ * Reference to the first vertex of the linked list.
1435
+ *
1436
+ * @private
1437
+ * @type {?VertexNode}
1438
+ * @default null
1439
+ */
1083
1440
  this.head = null;
1441
+
1442
+ /**
1443
+ * Reference to the last vertex of the linked list.
1444
+ *
1445
+ * @private
1446
+ * @type {?VertexNode}
1447
+ * @default null
1448
+ */
1084
1449
  this.tail = null;
1085
1450
 
1086
1451
  }
1087
1452
 
1453
+ /**
1454
+ * Returns the head reference.
1455
+ *
1456
+ * @private
1457
+ * @return {VertexNode} The head reference.
1458
+ */
1088
1459
  first() {
1089
1460
 
1090
1461
  return this.head;
1091
1462
 
1092
1463
  }
1093
1464
 
1465
+ /**
1466
+ * Returns the tail reference.
1467
+ *
1468
+ * @private
1469
+ * @return {VertexNode} The tail reference.
1470
+ */
1094
1471
  last() {
1095
1472
 
1096
1473
  return this.tail;
1097
1474
 
1098
1475
  }
1099
1476
 
1477
+ /**
1478
+ * Clears the linked list.
1479
+ *
1480
+ * @private
1481
+ * @return {VertexList} A reference to this vertex list.
1482
+ */
1100
1483
  clear() {
1101
1484
 
1102
1485
  this.head = this.tail = null;
@@ -1105,8 +1488,14 @@ class VertexList {
1105
1488
 
1106
1489
  }
1107
1490
 
1108
- // Inserts a vertex before the target vertex
1109
-
1491
+ /**
1492
+ * Inserts a vertex before a target vertex.
1493
+ *
1494
+ * @private
1495
+ * @param {VertexNode} target - The target.
1496
+ * @param {VertexNode} vertex - The vertex to insert.
1497
+ * @return {VertexList} A reference to this vertex list.
1498
+ */
1110
1499
  insertBefore( target, vertex ) {
1111
1500
 
1112
1501
  vertex.prev = target.prev;
@@ -1128,8 +1517,14 @@ class VertexList {
1128
1517
 
1129
1518
  }
1130
1519
 
1131
- // Inserts a vertex after the target vertex
1132
-
1520
+ /**
1521
+ * Inserts a vertex after a target vertex.
1522
+ *
1523
+ * @private
1524
+ * @param {VertexNode} target - The target.
1525
+ * @param {VertexNode} vertex - The vertex to insert.
1526
+ * @return {VertexList} A reference to this vertex list.
1527
+ */
1133
1528
  insertAfter( target, vertex ) {
1134
1529
 
1135
1530
  vertex.prev = target;
@@ -1151,8 +1546,13 @@ class VertexList {
1151
1546
 
1152
1547
  }
1153
1548
 
1154
- // Appends a vertex to the end of the linked list
1155
-
1549
+ /**
1550
+ * Appends a vertex to this vertex list.
1551
+ *
1552
+ * @private
1553
+ * @param {VertexNode} vertex - The vertex to append.
1554
+ * @return {VertexList} A reference to this vertex list.
1555
+ */
1156
1556
  append( vertex ) {
1157
1557
 
1158
1558
  if ( this.head === null ) {
@@ -1174,8 +1574,13 @@ class VertexList {
1174
1574
 
1175
1575
  }
1176
1576
 
1177
- // Appends a chain of vertices where 'vertex' is the head.
1178
-
1577
+ /**
1578
+ * Appends a chain of vertices where the given vertex is the head.
1579
+ *
1580
+ * @private
1581
+ * @param {VertexNode} vertex - The head vertex of a chain of vertices.
1582
+ * @return {VertexList} A reference to this vertex list.
1583
+ */
1179
1584
  appendChain( vertex ) {
1180
1585
 
1181
1586
  if ( this.head === null ) {
@@ -1204,8 +1609,13 @@ class VertexList {
1204
1609
 
1205
1610
  }
1206
1611
 
1207
- // Removes a vertex from the linked list
1208
-
1612
+ /**
1613
+ * Removes a vertex from the linked list.
1614
+ *
1615
+ * @private
1616
+ * @param {VertexNode} vertex - The vertex to remove.
1617
+ * @return {VertexList} A reference to this vertex list.
1618
+ */
1209
1619
  remove( vertex ) {
1210
1620
 
1211
1621
  if ( vertex.prev === null ) {
@@ -1232,8 +1642,14 @@ class VertexList {
1232
1642
 
1233
1643
  }
1234
1644
 
1235
- // Removes a list of vertices whose 'head' is 'a' and whose 'tail' is b
1236
-
1645
+ /**
1646
+ * Removes a sublist of vertices from the linked list.
1647
+ *
1648
+ * @private
1649
+ * @param {VertexNode} a - The head of the sublist.
1650
+ * @param {VertexNode} b - The tail of the sublist.
1651
+ * @return {VertexList} A reference to this vertex list.
1652
+ */
1237
1653
  removeSubList( a, b ) {
1238
1654
 
1239
1655
  if ( a.prev === null ) {
@@ -1260,6 +1676,12 @@ class VertexList {
1260
1676
 
1261
1677
  }
1262
1678
 
1679
+ /**
1680
+ * Returns `true` if the linked list is empty.
1681
+ *
1682
+ * @private
1683
+ * @return {boolean} Whether the linked list is empty or not.
1684
+ */
1263
1685
  isEmpty() {
1264
1686
 
1265
1687
  return this.head === null;