super-three 0.173.4 → 0.175.0

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 (832) hide show
  1. package/build/three.cjs +22198 -1564
  2. package/build/three.core.js +21287 -1346
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +882 -189
  5. package/build/three.module.min.js +1 -1
  6. package/build/three.tsl.js +8 -2
  7. package/build/three.tsl.min.js +1 -1
  8. package/build/three.webgpu.js +19358 -17482
  9. package/build/three.webgpu.min.js +1 -1
  10. package/build/three.webgpu.nodes.js +19342 -17482
  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 +144 -42
  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 +194 -71
  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 +74 -30
  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 +51 -5
  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 +36 -1
  94. package/examples/jsm/loaders/DDSLoader.js +25 -1
  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 +71 -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 +222 -9
  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 +87 -19
  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 +56 -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 +90 -70
  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 +105 -13
  160. package/examples/jsm/misc/TubePainter.js +53 -0
  161. package/examples/jsm/misc/Volume.js +109 -73
  162. package/examples/jsm/misc/VolumeSlice.js +91 -48
  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 +75 -2
  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 +134 -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 +268 -134
  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/AST.js +10 -0
  273. package/examples/jsm/transpiler/GLSLDecoder.js +17 -3
  274. package/examples/jsm/transpiler/TSLEncoder.js +83 -15
  275. package/examples/jsm/transpiler/Transpiler.js +31 -0
  276. package/examples/jsm/tsl/display/AfterImageNode.js +24 -25
  277. package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -3
  278. package/examples/jsm/tsl/display/AnamorphicNode.js +8 -9
  279. package/examples/jsm/tsl/display/BleachBypass.js +1 -2
  280. package/examples/jsm/tsl/display/BloomNode.js +15 -16
  281. package/examples/jsm/tsl/display/DenoiseNode.js +9 -10
  282. package/examples/jsm/tsl/display/DepthOfFieldNode.js +5 -6
  283. package/examples/jsm/tsl/display/DotScreenNode.js +5 -6
  284. package/examples/jsm/tsl/display/FXAANode.js +2 -3
  285. package/examples/jsm/tsl/display/FilmNode.js +9 -8
  286. package/examples/jsm/tsl/display/GTAONode.js +11 -12
  287. package/examples/jsm/tsl/display/GaussianBlurNode.js +14 -14
  288. package/examples/jsm/tsl/display/LensflareNode.js +15 -16
  289. package/examples/jsm/tsl/display/Lut3DNode.js +4 -5
  290. package/examples/jsm/tsl/display/MotionBlur.js +1 -2
  291. package/examples/jsm/tsl/display/OutlineNode.js +7 -8
  292. package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -3
  293. package/examples/jsm/tsl/display/PixelationPassNode.js +14 -15
  294. package/examples/jsm/tsl/display/RGBShiftNode.js +5 -6
  295. package/examples/jsm/tsl/display/SMAANode.js +13 -7
  296. package/examples/jsm/tsl/display/SSAAPassNode.js +7 -7
  297. package/examples/jsm/tsl/display/SSRNode.js +6 -7
  298. package/examples/jsm/tsl/display/Sepia.js +1 -2
  299. package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -3
  300. package/examples/jsm/tsl/display/StereoCompositePassNode.js +4 -4
  301. package/examples/jsm/tsl/display/StereoPassNode.js +2 -3
  302. package/examples/jsm/tsl/display/TRAAPassNode.js +11 -10
  303. package/examples/jsm/tsl/display/TransitionNode.js +4 -5
  304. package/examples/jsm/tsl/display/hashBlur.js +1 -2
  305. package/examples/jsm/tsl/lighting/TiledLightsNode.js +33 -7
  306. package/examples/jsm/tsl/math/Bayer.js +31 -0
  307. package/examples/jsm/tsl/utils/Raymarching.js +67 -0
  308. package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
  309. package/examples/jsm/utils/CameraUtils.js +10 -7
  310. package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
  311. package/examples/jsm/utils/GeometryUtils.js +12 -13
  312. package/examples/jsm/utils/LDrawUtils.js +11 -4
  313. package/examples/jsm/utils/SceneOptimizer.js +66 -20
  314. package/examples/jsm/utils/SceneUtils.js +50 -3
  315. package/examples/jsm/utils/ShadowMapViewer.js +47 -24
  316. package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
  317. package/examples/jsm/utils/SkeletonUtils.js +45 -0
  318. package/examples/jsm/utils/SortUtils.js +14 -5
  319. package/examples/jsm/utils/UVsDebug.js +9 -4
  320. package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
  321. package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
  322. package/examples/jsm/utils/WorkerPool.js +65 -2
  323. package/examples/jsm/webxr/ARButton.js +18 -0
  324. package/examples/jsm/webxr/OculusHandModel.js +83 -0
  325. package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
  326. package/examples/jsm/webxr/Text2D.js +11 -0
  327. package/examples/jsm/webxr/VRButton.js +30 -0
  328. package/examples/jsm/webxr/XRButton.js +22 -0
  329. package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
  330. package/examples/jsm/webxr/XREstimatedLight.js +33 -3
  331. package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
  332. package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
  333. package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
  334. package/examples/jsm/webxr/XRPlanes.js +17 -0
  335. package/package.json +3 -4
  336. package/src/Three.TSL.js +7 -1
  337. package/src/animation/AnimationAction.js +262 -30
  338. package/src/animation/AnimationClip.js +141 -2
  339. package/src/animation/AnimationMixer.js +99 -15
  340. package/src/animation/AnimationObjectGroup.js +41 -18
  341. package/src/animation/AnimationUtils.js +169 -19
  342. package/src/animation/KeyframeTrack.js +144 -10
  343. package/src/animation/PropertyBinding.js +77 -3
  344. package/src/animation/PropertyMixer.js +72 -5
  345. package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
  346. package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
  347. package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
  348. package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
  349. package/src/animation/tracks/StringKeyframeTrack.js +33 -2
  350. package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
  351. package/src/audio/Audio.js +339 -0
  352. package/src/audio/AudioAnalyser.js +58 -1
  353. package/src/audio/AudioContext.js +15 -0
  354. package/src/audio/AudioListener.js +76 -0
  355. package/src/audio/PositionalAudio.js +107 -0
  356. package/src/cameras/ArrayCamera.js +28 -0
  357. package/src/cameras/Camera.js +47 -0
  358. package/src/cameras/CubeCamera.js +66 -0
  359. package/src/cameras/OrthographicCamera.js +109 -0
  360. package/src/cameras/PerspectiveCamera.js +163 -40
  361. package/src/cameras/StereoCamera.js +46 -0
  362. package/src/constants.js +1429 -5
  363. package/src/core/BufferAttribute.js +413 -3
  364. package/src/core/BufferGeometry.js +337 -1
  365. package/src/core/Clock.js +60 -0
  366. package/src/core/EventDispatcher.js +44 -2
  367. package/src/core/GLBufferAttribute.js +99 -0
  368. package/src/core/InstancedBufferAttribute.js +29 -0
  369. package/src/core/InstancedBufferGeometry.js +20 -0
  370. package/src/core/InstancedInterleavedBuffer.js +26 -0
  371. package/src/core/InterleavedBuffer.js +137 -3
  372. package/src/core/InterleavedBufferAttribute.js +197 -0
  373. package/src/core/Layers.js +71 -10
  374. package/src/core/Object3D.js +593 -0
  375. package/src/core/Raycaster.js +134 -1
  376. package/src/core/RenderTarget.js +170 -11
  377. package/src/core/RenderTarget3D.js +25 -0
  378. package/src/core/RenderTargetArray.js +18 -0
  379. package/src/core/Uniform.js +29 -0
  380. package/src/core/UniformsGroup.js +84 -2
  381. package/src/extras/Controls.js +88 -1
  382. package/src/extras/DataUtils.js +48 -8
  383. package/src/extras/Earcut.js +13 -780
  384. package/src/extras/ImageUtils.js +20 -2
  385. package/src/extras/PMREMGenerator.js +41 -25
  386. package/src/extras/ShapeUtils.js +24 -2
  387. package/src/extras/TextureUtils.js +95 -15
  388. package/src/extras/core/Curve.js +150 -50
  389. package/src/extras/core/CurvePath.js +63 -22
  390. package/src/extras/core/Interpolations.js +29 -3
  391. package/src/extras/core/Path.js +134 -1
  392. package/src/extras/core/Shape.js +63 -0
  393. package/src/extras/core/ShapePath.js +76 -0
  394. package/src/extras/curves/ArcCurve.js +22 -0
  395. package/src/extras/curves/CatmullRomCurve3.js +89 -18
  396. package/src/extras/curves/CubicBezierCurve.js +67 -0
  397. package/src/extras/curves/CubicBezierCurve3.js +50 -0
  398. package/src/extras/curves/EllipseCurve.js +102 -0
  399. package/src/extras/curves/LineCurve.js +36 -0
  400. package/src/extras/curves/LineCurve3.js +36 -0
  401. package/src/extras/curves/QuadraticBezierCurve.js +59 -0
  402. package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
  403. package/src/extras/curves/SplineCurve.js +48 -0
  404. package/src/extras/lib/earcut.js +685 -0
  405. package/src/geometries/BoxGeometry.js +38 -0
  406. package/src/geometries/CapsuleGeometry.js +34 -0
  407. package/src/geometries/CircleGeometry.js +40 -0
  408. package/src/geometries/ConeGeometry.js +38 -0
  409. package/src/geometries/CylinderGeometry.js +39 -0
  410. package/src/geometries/DodecahedronGeometry.js +32 -0
  411. package/src/geometries/EdgesGeometry.js +28 -0
  412. package/src/geometries/ExtrudeGeometry.js +112 -28
  413. package/src/geometries/IcosahedronGeometry.js +32 -0
  414. package/src/geometries/LatheGeometry.js +40 -0
  415. package/src/geometries/OctahedronGeometry.js +32 -0
  416. package/src/geometries/PlaneGeometry.js +34 -0
  417. package/src/geometries/PolyhedronGeometry.js +29 -0
  418. package/src/geometries/RingGeometry.js +36 -0
  419. package/src/geometries/ShapeGeometry.js +37 -0
  420. package/src/geometries/SphereGeometry.js +37 -0
  421. package/src/geometries/TetrahedronGeometry.js +32 -0
  422. package/src/geometries/TorusGeometry.js +35 -0
  423. package/src/geometries/TorusKnotGeometry.js +38 -0
  424. package/src/geometries/TubeGeometry.js +49 -0
  425. package/src/geometries/WireframeGeometry.js +32 -0
  426. package/src/helpers/ArrowHelper.js +60 -3
  427. package/src/helpers/AxesHelper.js +28 -0
  428. package/src/helpers/Box3Helper.js +28 -0
  429. package/src/helpers/BoxHelper.js +43 -7
  430. package/src/helpers/CameraHelper.js +45 -5
  431. package/src/helpers/DirectionalLightHelper.js +52 -0
  432. package/src/helpers/GridHelper.js +26 -0
  433. package/src/helpers/HemisphereLightHelper.js +39 -0
  434. package/src/helpers/PlaneHelper.js +33 -0
  435. package/src/helpers/PointLightHelper.js +43 -0
  436. package/src/helpers/PolarGridHelper.js +30 -0
  437. package/src/helpers/SkeletonHelper.js +39 -2
  438. package/src/helpers/SpotLightHelper.js +40 -0
  439. package/src/lights/AmbientLight.js +25 -0
  440. package/src/lights/DirectionalLight.js +57 -0
  441. package/src/lights/DirectionalLightShadow.js +15 -0
  442. package/src/lights/HemisphereLight.js +32 -0
  443. package/src/lights/Light.js +36 -0
  444. package/src/lights/LightProbe.js +43 -0
  445. package/src/lights/LightShadow.js +159 -0
  446. package/src/lights/PointLight.js +59 -0
  447. package/src/lights/PointLightShadow.js +21 -0
  448. package/src/lights/RectAreaLight.js +59 -0
  449. package/src/lights/SpotLight.js +102 -0
  450. package/src/lights/SpotLightShadow.js +22 -0
  451. package/src/lights/webgpu/IESSpotLight.js +21 -0
  452. package/src/loaders/AnimationLoader.js +31 -0
  453. package/src/loaders/AudioLoader.js +31 -0
  454. package/src/loaders/BufferGeometryLoader.js +34 -0
  455. package/src/loaders/Cache.js +45 -0
  456. package/src/loaders/CompressedTextureLoader.js +36 -3
  457. package/src/loaders/CubeTextureLoader.js +45 -0
  458. package/src/loaders/DataTextureLoader.js +44 -3
  459. package/src/loaders/FileLoader.js +57 -1
  460. package/src/loaders/ImageBitmapLoader.js +57 -0
  461. package/src/loaders/ImageLoader.js +30 -0
  462. package/src/loaders/Loader.js +130 -0
  463. package/src/loaders/LoaderUtils.js +18 -36
  464. package/src/loaders/LoadingManager.js +142 -0
  465. package/src/loaders/MaterialLoader.js +57 -0
  466. package/src/loaders/ObjectLoader.js +53 -0
  467. package/src/loaders/TextureLoader.js +33 -0
  468. package/src/loaders/nodes/NodeLoader.js +13 -9
  469. package/src/loaders/nodes/NodeMaterialLoader.js +6 -6
  470. package/src/loaders/nodes/NodeObjectLoader.js +12 -12
  471. package/src/materials/LineBasicMaterial.js +74 -1
  472. package/src/materials/LineDashedMaterial.js +52 -0
  473. package/src/materials/Material.js +481 -4
  474. package/src/materials/MeshBasicMaterial.js +165 -0
  475. package/src/materials/MeshDepthMaterial.js +93 -0
  476. package/src/materials/MeshDistanceMaterial.js +76 -0
  477. package/src/materials/MeshLambertMaterial.js +273 -0
  478. package/src/materials/MeshMatcapMaterial.js +142 -0
  479. package/src/materials/MeshNormalMaterial.js +113 -0
  480. package/src/materials/MeshPhongMaterial.js +288 -0
  481. package/src/materials/MeshPhysicalMaterial.js +292 -1
  482. package/src/materials/MeshStandardMaterial.js +297 -0
  483. package/src/materials/MeshToonMaterial.js +218 -0
  484. package/src/materials/PointsMaterial.js +89 -0
  485. package/src/materials/RawShaderMaterial.js +25 -0
  486. package/src/materials/ShaderMaterial.js +215 -6
  487. package/src/materials/ShadowMaterial.js +54 -0
  488. package/src/materials/SpriteMaterial.js +82 -0
  489. package/src/materials/nodes/Line2NodeMaterial.js +14 -14
  490. package/src/materials/nodes/LineBasicNodeMaterial.js +3 -3
  491. package/src/materials/nodes/LineDashedNodeMaterial.js +12 -12
  492. package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -7
  493. package/src/materials/nodes/MeshLambertNodeMaterial.js +5 -5
  494. package/src/materials/nodes/MeshMatcapNodeMaterial.js +3 -3
  495. package/src/materials/nodes/MeshNormalNodeMaterial.js +8 -4
  496. package/src/materials/nodes/MeshPhongNodeMaterial.js +9 -9
  497. package/src/materials/nodes/MeshPhysicalNodeMaterial.js +43 -43
  498. package/src/materials/nodes/MeshSSSNodeMaterial.js +18 -21
  499. package/src/materials/nodes/MeshStandardNodeMaterial.js +11 -11
  500. package/src/materials/nodes/MeshToonNodeMaterial.js +4 -4
  501. package/src/materials/nodes/NodeMaterial.js +66 -47
  502. package/src/materials/nodes/PointsNodeMaterial.js +6 -6
  503. package/src/materials/nodes/ShadowNodeMaterial.js +13 -4
  504. package/src/materials/nodes/SpriteNodeMaterial.js +17 -9
  505. package/src/materials/nodes/VolumeNodeMaterial.js +25 -128
  506. package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -8
  507. package/src/math/Box2.js +177 -0
  508. package/src/math/Box3.js +243 -0
  509. package/src/math/Color.js +343 -0
  510. package/src/math/Cylindrical.js +65 -6
  511. package/src/math/Euler.js +137 -4
  512. package/src/math/Frustum.js +83 -0
  513. package/src/math/Interpolant.js +87 -8
  514. package/src/math/Line3.js +94 -0
  515. package/src/math/MathUtils.js +405 -19
  516. package/src/math/Matrix2.js +70 -0
  517. package/src/math/Matrix3.js +229 -4
  518. package/src/math/Matrix4.js +368 -3
  519. package/src/math/Plane.js +164 -2
  520. package/src/math/Quaternion.js +262 -6
  521. package/src/math/Ray.js +160 -0
  522. package/src/math/Sphere.js +147 -0
  523. package/src/math/Spherical.js +70 -8
  524. package/src/math/SphericalHarmonics3.js +112 -14
  525. package/src/math/Triangle.js +206 -2
  526. package/src/math/Vector2.js +388 -2
  527. package/src/math/Vector3.js +541 -4
  528. package/src/math/Vector4.js +393 -0
  529. package/src/math/interpolants/CubicInterpolant.js +10 -1
  530. package/src/math/interpolants/DiscreteInterpolant.js +10 -2
  531. package/src/math/interpolants/LinearInterpolant.js +13 -0
  532. package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
  533. package/src/nodes/Nodes.js +1 -0
  534. package/src/nodes/TSL.js +1 -0
  535. package/src/nodes/accessors/AccessorsUtils.js +4 -2
  536. package/src/nodes/accessors/Arrays.js +6 -6
  537. package/src/nodes/accessors/BatchNode.js +10 -11
  538. package/src/nodes/accessors/Bitangent.js +6 -2
  539. package/src/nodes/accessors/BufferAttributeNode.js +33 -31
  540. package/src/nodes/accessors/BufferNode.js +12 -13
  541. package/src/nodes/accessors/BuiltinNode.js +7 -8
  542. package/src/nodes/accessors/Camera.js +9 -2
  543. package/src/nodes/accessors/ClippingNode.js +4 -4
  544. package/src/nodes/accessors/CubeTextureNode.js +17 -19
  545. package/src/nodes/accessors/InstanceNode.js +10 -11
  546. package/src/nodes/accessors/InstancedMeshNode.js +3 -4
  547. package/src/nodes/accessors/Lights.js +12 -15
  548. package/src/nodes/accessors/MaterialNode.js +45 -9
  549. package/src/nodes/accessors/MaterialProperties.js +51 -2
  550. package/src/nodes/accessors/MaterialReferenceNode.js +11 -12
  551. package/src/nodes/accessors/ModelNode.js +20 -3
  552. package/src/nodes/accessors/ModelViewProjectionNode.js +1 -2
  553. package/src/nodes/accessors/MorphNode.js +29 -26
  554. package/src/nodes/accessors/Normal.js +11 -3
  555. package/src/nodes/accessors/Object3DNode.js +51 -16
  556. package/src/nodes/accessors/PointUVNode.js +2 -3
  557. package/src/nodes/accessors/Position.js +8 -3
  558. package/src/nodes/accessors/ReferenceBaseNode.js +29 -29
  559. package/src/nodes/accessors/ReferenceNode.js +31 -31
  560. package/src/nodes/accessors/ReflectVector.js +4 -2
  561. package/src/nodes/accessors/RendererReferenceNode.js +9 -10
  562. package/src/nodes/accessors/SceneNode.js +5 -4
  563. package/src/nodes/accessors/SkinningNode.js +53 -44
  564. package/src/nodes/accessors/StorageBufferNode.js +24 -24
  565. package/src/nodes/accessors/StorageTextureNode.js +17 -17
  566. package/src/nodes/accessors/Tangent.js +6 -2
  567. package/src/nodes/accessors/Texture3DNode.js +11 -12
  568. package/src/nodes/accessors/TextureBicubic.js +2 -3
  569. package/src/nodes/accessors/TextureNode.js +68 -47
  570. package/src/nodes/accessors/TextureSizeNode.js +5 -6
  571. package/src/nodes/accessors/UV.js +2 -3
  572. package/src/nodes/accessors/UniformArrayNode.js +24 -24
  573. package/src/nodes/accessors/UserDataNode.js +11 -12
  574. package/src/nodes/accessors/VelocityNode.js +4 -5
  575. package/src/nodes/accessors/VertexColorNode.js +7 -8
  576. package/src/nodes/code/CodeNode.js +15 -13
  577. package/src/nodes/code/ExpressionNode.js +8 -9
  578. package/src/nodes/code/FunctionCallNode.js +29 -9
  579. package/src/nodes/code/FunctionNode.js +1 -1
  580. package/src/nodes/code/ScriptableNode.js +27 -28
  581. package/src/nodes/code/ScriptableValueNode.js +11 -12
  582. package/src/nodes/core/ArrayNode.js +29 -12
  583. package/src/nodes/core/AssignNode.js +4 -5
  584. package/src/nodes/core/AttributeNode.js +8 -9
  585. package/src/nodes/core/BypassNode.js +3 -4
  586. package/src/nodes/core/CacheNode.js +5 -6
  587. package/src/nodes/core/ConstNode.js +4 -4
  588. package/src/nodes/core/ContextNode.js +9 -9
  589. package/src/nodes/core/IndexNode.js +8 -4
  590. package/src/nodes/core/InputNode.js +7 -7
  591. package/src/nodes/core/LightingModel.js +17 -17
  592. package/src/nodes/core/MRTNode.js +9 -10
  593. package/src/nodes/core/Node.js +49 -37
  594. package/src/nodes/core/NodeAttribute.js +7 -7
  595. package/src/nodes/core/NodeBuilder.js +248 -175
  596. package/src/nodes/core/NodeCache.js +4 -4
  597. package/src/nodes/core/NodeCode.js +6 -6
  598. package/src/nodes/core/NodeFrame.js +10 -10
  599. package/src/nodes/core/NodeFunction.js +8 -8
  600. package/src/nodes/core/NodeFunctionInput.js +8 -8
  601. package/src/nodes/core/NodeParser.js +1 -1
  602. package/src/nodes/core/NodeUniform.js +7 -7
  603. package/src/nodes/core/NodeUtils.js +22 -24
  604. package/src/nodes/core/NodeVar.js +9 -9
  605. package/src/nodes/core/NodeVarying.js +4 -4
  606. package/src/nodes/core/OutputStructNode.js +2 -3
  607. package/src/nodes/core/ParameterNode.js +6 -7
  608. package/src/nodes/core/PropertyNode.js +41 -13
  609. package/src/nodes/core/StackNode.js +11 -12
  610. package/src/nodes/core/StructNode.js +2 -3
  611. package/src/nodes/core/StructTypeNode.js +10 -6
  612. package/src/nodes/core/TempNode.js +3 -3
  613. package/src/nodes/core/UniformGroupNode.js +15 -12
  614. package/src/nodes/core/UniformNode.js +9 -10
  615. package/src/nodes/core/VarNode.js +14 -18
  616. package/src/nodes/core/VaryingNode.js +10 -10
  617. package/src/nodes/core/constants.js +0 -2
  618. package/src/nodes/display/BlendModes.js +21 -14
  619. package/src/nodes/display/BumpMapNode.js +5 -6
  620. package/src/nodes/display/ColorAdjustment.js +13 -9
  621. package/src/nodes/display/ColorSpaceFunctions.js +4 -4
  622. package/src/nodes/display/ColorSpaceNode.js +15 -12
  623. package/src/nodes/display/FrontFacingNode.js +3 -3
  624. package/src/nodes/display/NormalMapNode.js +5 -6
  625. package/src/nodes/display/PassNode.js +122 -35
  626. package/src/nodes/display/PosterizeNode.js +2 -3
  627. package/src/nodes/display/RenderOutputNode.js +8 -9
  628. package/src/nodes/display/ScreenNode.js +16 -7
  629. package/src/nodes/display/ToneMappingFunctions.js +12 -8
  630. package/src/nodes/display/ToneMappingNode.js +8 -8
  631. package/src/nodes/display/ToonOutlinePassNode.js +3 -4
  632. package/src/nodes/display/ViewportDepthNode.js +15 -7
  633. package/src/nodes/display/ViewportDepthTextureNode.js +6 -7
  634. package/src/nodes/display/ViewportSharedTextureNode.js +6 -7
  635. package/src/nodes/display/ViewportTextureNode.js +16 -16
  636. package/src/nodes/fog/Fog.js +5 -2
  637. package/src/nodes/functions/BSDF/LTC.js +45 -1
  638. package/src/nodes/functions/BasicLightingModel.js +5 -8
  639. package/src/nodes/functions/PhongLightingModel.js +6 -8
  640. package/src/nodes/functions/PhysicalLightingModel.js +40 -42
  641. package/src/nodes/functions/ShadowMaskModel.js +4 -4
  642. package/src/nodes/functions/ToonLightingModel.js +5 -6
  643. package/src/nodes/functions/VolumetricLightingModel.js +183 -0
  644. package/src/nodes/functions/material/getParallaxCorrectNormal.js +8 -8
  645. package/src/nodes/geometry/RangeNode.js +4 -5
  646. package/src/nodes/gpgpu/AtomicFunctionNode.js +33 -48
  647. package/src/nodes/gpgpu/BarrierNode.js +6 -4
  648. package/src/nodes/gpgpu/ComputeBuiltinNode.js +26 -31
  649. package/src/nodes/gpgpu/ComputeNode.js +43 -16
  650. package/src/nodes/gpgpu/WorkgroupInfoNode.js +16 -17
  651. package/src/nodes/lighting/AONode.js +2 -2
  652. package/src/nodes/lighting/AmbientLightNode.js +1 -1
  653. package/src/nodes/lighting/AnalyticLightNode.js +50 -9
  654. package/src/nodes/lighting/BasicLightMapNode.js +2 -2
  655. package/src/nodes/lighting/DirectionalLightNode.js +3 -12
  656. package/src/nodes/lighting/EnvironmentNode.js +5 -8
  657. package/src/nodes/lighting/HemisphereLightNode.js +1 -1
  658. package/src/nodes/lighting/LightProbeNode.js +1 -1
  659. package/src/nodes/lighting/LightUtils.js +1 -5
  660. package/src/nodes/lighting/LightingContextNode.js +10 -10
  661. package/src/nodes/lighting/LightingNode.js +1 -1
  662. package/src/nodes/lighting/LightsNode.js +68 -25
  663. package/src/nodes/lighting/PointLightNode.js +12 -27
  664. package/src/nodes/lighting/PointShadowNode.js +5 -6
  665. package/src/nodes/lighting/RectAreaLightNode.js +5 -10
  666. package/src/nodes/lighting/ShadowBaseNode.js +8 -9
  667. package/src/nodes/lighting/ShadowNode.js +28 -15
  668. package/src/nodes/lighting/SpotLightNode.js +8 -19
  669. package/src/nodes/math/ConditionalNode.js +26 -9
  670. package/src/nodes/math/Hash.js +2 -3
  671. package/src/nodes/math/MathNode.js +217 -150
  672. package/src/nodes/math/MathUtils.js +8 -6
  673. package/src/nodes/math/OperatorNode.js +198 -89
  674. package/src/nodes/math/TriNoise3D.js +2 -3
  675. package/src/nodes/parsers/GLSLNodeFunction.js +3 -3
  676. package/src/nodes/parsers/GLSLNodeParser.js +1 -1
  677. package/src/nodes/pmrem/PMREMNode.js +61 -37
  678. package/src/nodes/pmrem/PMREMUtils.js +2 -2
  679. package/src/nodes/procedural/Checker.js +2 -3
  680. package/src/nodes/shapes/Shapes.js +2 -3
  681. package/src/nodes/tsl/TSLBase.js +2 -1
  682. package/src/nodes/tsl/TSLCore.js +117 -19
  683. package/src/nodes/utils/ArrayElementNode.js +5 -3
  684. package/src/nodes/utils/ConvertNode.js +3 -3
  685. package/src/nodes/utils/CubeMapNode.js +7 -8
  686. package/src/nodes/utils/DebugNode.js +70 -0
  687. package/src/nodes/utils/Discard.js +5 -5
  688. package/src/nodes/utils/EquirectUVNode.js +3 -4
  689. package/src/nodes/utils/FlipNode.js +3 -3
  690. package/src/nodes/utils/FunctionOverloadingNode.js +3 -4
  691. package/src/nodes/utils/JoinNode.js +29 -4
  692. package/src/nodes/utils/LoopNode.js +67 -35
  693. package/src/nodes/utils/MatcapUVNode.js +1 -2
  694. package/src/nodes/utils/MaxMipLevelNode.js +4 -5
  695. package/src/nodes/utils/MemberNode.js +2 -2
  696. package/src/nodes/utils/Oscillators.js +8 -6
  697. package/src/nodes/utils/Packing.js +4 -4
  698. package/src/nodes/utils/PostProcessingUtils.js +6 -5
  699. package/src/nodes/utils/RTTNode.js +19 -19
  700. package/src/nodes/utils/ReflectorNode.js +35 -25
  701. package/src/nodes/utils/RemapNode.js +9 -9
  702. package/src/nodes/utils/RotateNode.js +3 -4
  703. package/src/nodes/utils/SetNode.js +3 -3
  704. package/src/nodes/utils/SplitNode.js +5 -5
  705. package/src/nodes/utils/SpriteSheetUVNode.js +4 -5
  706. package/src/nodes/utils/SpriteUtils.js +5 -6
  707. package/src/nodes/utils/StorageArrayElementNode.js +3 -4
  708. package/src/nodes/utils/Timer.js +9 -5
  709. package/src/nodes/utils/TriplanarTexturesNode.js +20 -20
  710. package/src/nodes/utils/UVUtils.js +4 -4
  711. package/src/nodes/utils/ViewportUtils.js +3 -4
  712. package/src/objects/BatchedMesh.js +319 -32
  713. package/src/objects/Bone.js +24 -0
  714. package/src/objects/ClippingGroup.js +4 -4
  715. package/src/objects/Group.js +24 -0
  716. package/src/objects/InstancedMesh.js +120 -2
  717. package/src/objects/LOD.js +99 -5
  718. package/src/objects/Line.js +82 -0
  719. package/src/objects/LineLoop.js +20 -0
  720. package/src/objects/LineSegments.js +18 -0
  721. package/src/objects/Mesh.js +75 -0
  722. package/src/objects/Points.js +60 -0
  723. package/src/objects/Skeleton.js +105 -0
  724. package/src/objects/SkinnedMesh.js +99 -5
  725. package/src/objects/Sprite.js +54 -0
  726. package/src/renderers/WebGL3DRenderTarget.js +25 -0
  727. package/src/renderers/WebGLArrayRenderTarget.js +25 -0
  728. package/src/renderers/WebGLCubeRenderTarget.js +39 -1
  729. package/src/renderers/WebGLRenderTarget.js +19 -0
  730. package/src/renderers/WebGLRenderer.js +622 -83
  731. package/src/renderers/common/Animation.js +6 -6
  732. package/src/renderers/common/Attributes.js +3 -3
  733. package/src/renderers/common/Backend.js +40 -31
  734. package/src/renderers/common/Background.js +4 -3
  735. package/src/renderers/common/BindGroup.js +5 -5
  736. package/src/renderers/common/Binding.js +4 -4
  737. package/src/renderers/common/Bindings.js +10 -0
  738. package/src/renderers/common/Buffer.js +5 -5
  739. package/src/renderers/common/BufferUtils.js +7 -9
  740. package/src/renderers/common/BundleGroup.js +6 -6
  741. package/src/renderers/common/ChainMap.js +3 -3
  742. package/src/renderers/common/ClippingContext.js +8 -8
  743. package/src/renderers/common/Color4.js +8 -8
  744. package/src/renderers/common/ComputePipeline.js +2 -2
  745. package/src/renderers/common/CubeRenderTarget.js +13 -0
  746. package/src/renderers/common/DataMap.js +2 -2
  747. package/src/renderers/common/Geometries.js +6 -6
  748. package/src/renderers/common/IndirectStorageBufferAttribute.js +3 -3
  749. package/src/renderers/common/Info.js +17 -17
  750. package/src/renderers/common/Pipeline.js +3 -3
  751. package/src/renderers/common/Pipelines.js +12 -12
  752. package/src/renderers/common/PostProcessing.js +13 -1
  753. package/src/renderers/common/ProgrammableStage.js +11 -11
  754. package/src/renderers/common/QuadMesh.js +5 -3
  755. package/src/renderers/common/RenderContext.js +24 -24
  756. package/src/renderers/common/RenderContexts.js +4 -4
  757. package/src/renderers/common/RenderList.js +16 -16
  758. package/src/renderers/common/RenderObject.js +27 -27
  759. package/src/renderers/common/RenderObjects.js +4 -4
  760. package/src/renderers/common/RenderPipeline.js +1 -1
  761. package/src/renderers/common/Renderer.js +272 -200
  762. package/src/renderers/common/RendererUtils.js +0 -2
  763. package/src/renderers/common/SampledTexture.js +20 -20
  764. package/src/renderers/common/Sampler.js +5 -5
  765. package/src/renderers/common/StorageBuffer.js +2 -2
  766. package/src/renderers/common/StorageBufferAttribute.js +4 -4
  767. package/src/renderers/common/StorageInstancedBufferAttribute.js +4 -4
  768. package/src/renderers/common/StorageTexture.js +6 -6
  769. package/src/renderers/common/Textures.js +6 -6
  770. package/src/renderers/common/TimestampQueryPool.js +66 -7
  771. package/src/renderers/common/Uniform.js +26 -26
  772. package/src/renderers/common/UniformBuffer.js +2 -2
  773. package/src/renderers/common/UniformsGroup.js +18 -18
  774. package/src/renderers/common/XRManager.js +369 -54
  775. package/src/renderers/common/XRRenderTarget.js +5 -5
  776. package/src/renderers/common/extras/PMREMGenerator.js +62 -37
  777. package/src/renderers/common/nodes/NodeBuilderState.js +7 -7
  778. package/src/renderers/common/nodes/NodeLibrary.js +13 -13
  779. package/src/renderers/common/nodes/NodeSampledTexture.js +12 -12
  780. package/src/renderers/common/nodes/NodeSampler.js +1 -1
  781. package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
  782. package/src/renderers/common/nodes/NodeUniform.js +9 -9
  783. package/src/renderers/common/nodes/NodeUniformsGroup.js +3 -3
  784. package/src/renderers/common/nodes/Nodes.js +13 -13
  785. package/src/renderers/shaders/UniformsLib.js +1 -4
  786. package/src/renderers/shaders/UniformsUtils.js +1 -3
  787. package/src/renderers/webgl/WebGLBackground.js +4 -2
  788. package/src/renderers/webgl/WebGLState.js +19 -19
  789. package/src/renderers/webgl-fallback/WebGLBackend.js +163 -146
  790. package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +4 -4
  791. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +89 -99
  792. package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +2 -2
  793. package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +5 -5
  794. package/src/renderers/webgl-fallback/utils/WebGLState.js +97 -47
  795. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +79 -31
  796. package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +37 -29
  797. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -3
  798. package/src/renderers/webgpu/WebGPUBackend.js +200 -119
  799. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +3 -13
  800. package/src/renderers/webgpu/WebGPURenderer.js +19 -13
  801. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +171 -178
  802. package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -3
  803. package/src/renderers/webgpu/nodes/WGSLNodeParser.js +1 -1
  804. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +43 -9
  805. package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +2 -2
  806. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  807. package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +18 -10
  808. package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +9 -9
  809. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +37 -37
  810. package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +31 -18
  811. package/src/renderers/webgpu/utils/WebGPUUtils.js +9 -9
  812. package/src/renderers/webxr/WebXRController.js +87 -2
  813. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  814. package/src/renderers/webxr/WebXRManager.js +187 -11
  815. package/src/scenes/Fog.js +60 -0
  816. package/src/scenes/FogExp2.js +51 -0
  817. package/src/scenes/Scene.js +88 -0
  818. package/src/textures/CanvasTexture.js +28 -0
  819. package/src/textures/CompressedArrayTexture.js +57 -0
  820. package/src/textures/CompressedCubeTexture.js +29 -0
  821. package/src/textures/CompressedTexture.js +64 -6
  822. package/src/textures/CubeTexture.js +52 -4
  823. package/src/textures/Data3DTexture.js +77 -0
  824. package/src/textures/DataArrayTexture.js +93 -0
  825. package/src/textures/DataTexture.js +65 -0
  826. package/src/textures/DepthTexture.js +61 -9
  827. package/src/textures/FramebufferTexture.js +62 -0
  828. package/src/textures/Source.js +69 -0
  829. package/src/textures/Texture.js +362 -3
  830. package/src/textures/VideoFrameTexture.js +43 -6
  831. package/src/textures/VideoTexture.js +49 -4
  832. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -1,30 +1,58 @@
1
1
  import { Curve } from './Curve.js';
2
2
  import * as Curves from '../curves/Curves.js';
3
3
 
4
- /**************************************************************
5
- * Curved Path - a curve path is simply a array of connected
6
- * curves, but retains the api of a curve
7
- **************************************************************/
8
-
4
+ /**
5
+ * A base class extending {@link Curve}. `CurvePath` is simply an
6
+ * array of connected curves, but retains the API of a curve.
7
+ *
8
+ * @augments Curve
9
+ */
9
10
  class CurvePath extends Curve {
10
11
 
12
+ /**
13
+ * Constructs a new curve path.
14
+ */
11
15
  constructor() {
12
16
 
13
17
  super();
14
18
 
15
19
  this.type = 'CurvePath';
16
20
 
21
+ /**
22
+ * An array of curves defining the
23
+ * path.
24
+ *
25
+ * @type {Array<Curve>}
26
+ */
17
27
  this.curves = [];
18
- this.autoClose = false; // Automatically closes the path
28
+
29
+ /**
30
+ * Whether the path should automatically be closed
31
+ * by a line curve.
32
+ *
33
+ * @type {boolean}
34
+ * @default false
35
+ */
36
+ this.autoClose = false;
19
37
 
20
38
  }
21
39
 
40
+ /**
41
+ * Adds a curve to this curve path.
42
+ *
43
+ * @param {Curve} curve - The curve to add.
44
+ */
22
45
  add( curve ) {
23
46
 
24
47
  this.curves.push( curve );
25
48
 
26
49
  }
27
50
 
51
+ /**
52
+ * Adds a line curve to close the path.
53
+ *
54
+ * @return {CurvePath} A reference to this curve path.
55
+ */
28
56
  closePath() {
29
57
 
30
58
  // Add a line curve if start and end of lines are not connected
@@ -42,16 +70,24 @@ class CurvePath extends Curve {
42
70
 
43
71
  }
44
72
 
45
- // To get accurate point with reference to
46
- // entire path distance at time t,
47
- // following has to be done:
73
+ /**
74
+ * This method returns a vector in 2D or 3D space (depending on the curve definitions)
75
+ * for the given interpolation factor.
76
+ *
77
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
78
+ * @param {(Vector2|Vector3)} [optionalTarget] - The optional target vector the result is written to.
79
+ * @return {?(Vector2|Vector3)} The position on the curve. It can be a 2D or 3D vector depending on the curve definition.
80
+ */
81
+ getPoint( t, optionalTarget ) {
48
82
 
49
- // 1. Length of each sub path have to be known
50
- // 2. Locate and identify type of curve
51
- // 3. Get t for the curve
52
- // 4. Return curve.getPointAt(t')
83
+ // To get accurate point with reference to
84
+ // entire path distance at time t,
85
+ // following has to be done:
53
86
 
54
- getPoint( t, optionalTarget ) {
87
+ // 1. Length of each sub path have to be known
88
+ // 2. Locate and identify type of curve
89
+ // 3. Get t for the curve
90
+ // 4. Return curve.getPointAt(t')
55
91
 
56
92
  const d = t * this.getLength();
57
93
  const curveLengths = this.getCurveLengths();
@@ -83,31 +119,36 @@ class CurvePath extends Curve {
83
119
 
84
120
  }
85
121
 
86
- // We cannot use the default THREE.Curve getPoint() with getLength() because in
87
- // THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath
88
- // getPoint() depends on getLength
89
-
90
122
  getLength() {
91
123
 
124
+ // We cannot use the default THREE.Curve getPoint() with getLength() because in
125
+ // THREE.Curve, getLength() depends on getPoint() but in THREE.CurvePath
126
+ // getPoint() depends on getLength
127
+
92
128
  const lens = this.getCurveLengths();
93
129
  return lens[ lens.length - 1 ];
94
130
 
95
131
  }
96
132
 
97
- // cacheLengths must be recalculated.
98
133
  updateArcLengths() {
99
134
 
135
+ // cacheLengths must be recalculated.
136
+
100
137
  this.needsUpdate = true;
101
138
  this.cacheLengths = null;
102
139
  this.getCurveLengths();
103
140
 
104
141
  }
105
142
 
106
- // Compute lengths and cache them
107
- // We cannot overwrite getLengths() because UtoT mapping uses it.
108
-
143
+ /**
144
+ * Returns list of cumulative curve lengths of the defined curves.
145
+ *
146
+ * @return {Array<number>} The curve lengths.
147
+ */
109
148
  getCurveLengths() {
110
149
 
150
+ // Compute lengths and cache them
151
+ // We cannot overwrite getLengths() because UtoT mapping uses it.
111
152
  // We use cache values if curves and cache array are same length
112
153
 
113
154
  if ( this.cacheLengths && this.cacheLengths.length === this.curves.length ) {
@@ -1,8 +1,15 @@
1
+ // Bezier Curves formulas obtained from: https://en.wikipedia.org/wiki/B%C3%A9zier_curve
2
+
1
3
  /**
2
- * Bezier Curves formulas obtained from
3
- * https://en.wikipedia.org/wiki/B%C3%A9zier_curve
4
+ * Computes a point on a Catmull-Rom spline.
5
+ *
6
+ * @param {number} t - The interpolation factor.
7
+ * @param {number} p0 - The first control point.
8
+ * @param {number} p1 - The second control point.
9
+ * @param {number} p2 - The third control point.
10
+ * @param {number} p3 - The fourth control point.
11
+ * @return {number} The calculated point on a Catmull-Rom spline.
4
12
  */
5
-
6
13
  function CatmullRom( t, p0, p1, p2, p3 ) {
7
14
 
8
15
  const v0 = ( p2 - p0 ) * 0.5;
@@ -34,6 +41,15 @@ function QuadraticBezierP2( t, p ) {
34
41
 
35
42
  }
36
43
 
44
+ /**
45
+ * Computes a point on a Quadratic Bezier curve.
46
+ *
47
+ * @param {number} t - The interpolation factor.
48
+ * @param {number} p0 - The first control point.
49
+ * @param {number} p1 - The second control point.
50
+ * @param {number} p2 - The third control point.
51
+ * @return {number} The calculated point on a Quadratic Bezier curve.
52
+ */
37
53
  function QuadraticBezier( t, p0, p1, p2 ) {
38
54
 
39
55
  return QuadraticBezierP0( t, p0 ) + QuadraticBezierP1( t, p1 ) +
@@ -69,6 +85,16 @@ function CubicBezierP3( t, p ) {
69
85
 
70
86
  }
71
87
 
88
+ /**
89
+ * Computes a point on a Cubic Bezier curve.
90
+ *
91
+ * @param {number} t - The interpolation factor.
92
+ * @param {number} p0 - The first control point.
93
+ * @param {number} p1 - The second control point.
94
+ * @param {number} p2 - The third control point.
95
+ * @param {number} p3 - The fourth control point.
96
+ * @return {number} The calculated point on a Cubic Bezier curve.
97
+ */
72
98
  function CubicBezier( t, p0, p1, p2, p3 ) {
73
99
 
74
100
  return CubicBezierP0( t, p0 ) + CubicBezierP1( t, p1 ) + CubicBezierP2( t, p2 ) +
@@ -6,14 +6,46 @@ import { CubicBezierCurve } from '../curves/CubicBezierCurve.js';
6
6
  import { QuadraticBezierCurve } from '../curves/QuadraticBezierCurve.js';
7
7
  import { LineCurve } from '../curves/LineCurve.js';
8
8
 
9
+ /**
10
+ * A 2D path representation. The class provides methods for creating paths
11
+ * and contours of 2D shapes similar to the 2D Canvas API.
12
+ *
13
+ * ```js
14
+ * const path = new THREE.Path();
15
+ *
16
+ * path.lineTo( 0, 0.8 );
17
+ * path.quadraticCurveTo( 0, 1, 0.2, 1 );
18
+ * path.lineTo( 1, 1 );
19
+ *
20
+ * const points = path.getPoints();
21
+ *
22
+ * const geometry = new THREE.BufferGeometry().setFromPoints( points );
23
+ * const material = new THREE.LineBasicMaterial( { color: 0xffffff } );
24
+ *
25
+ * const line = new THREE.Line( geometry, material );
26
+ * scene.add( line );
27
+ * ```
28
+ *
29
+ * @augments CurvePath
30
+ */
9
31
  class Path extends CurvePath {
10
32
 
33
+ /**
34
+ * Constructs a new path.
35
+ *
36
+ * @param {Array<Vector2>} [points] - An array of 2D points defining the path.
37
+ */
11
38
  constructor( points ) {
12
39
 
13
40
  super();
14
41
 
15
42
  this.type = 'Path';
16
43
 
44
+ /**
45
+ * The current offset of the path. Any new curve added will start here.
46
+ *
47
+ * @type {Vector2}
48
+ */
17
49
  this.currentPoint = new Vector2();
18
50
 
19
51
  if ( points ) {
@@ -24,6 +56,13 @@ class Path extends CurvePath {
24
56
 
25
57
  }
26
58
 
59
+ /**
60
+ * Creates a path from the given list of points. The points are added
61
+ * to the path as instances of {@link LineCurve}.
62
+ *
63
+ * @param {Array<Vector2>} points - An array of 2D points.
64
+ * @return {Path} A reference to this path.
65
+ */
27
66
  setFromPoints( points ) {
28
67
 
29
68
  this.moveTo( points[ 0 ].x, points[ 0 ].y );
@@ -38,6 +77,13 @@ class Path extends CurvePath {
38
77
 
39
78
  }
40
79
 
80
+ /**
81
+ * Moves {@link Path#currentPoint} to the given point.
82
+ *
83
+ * @param {number} x - The x coordinate.
84
+ * @param {number} y - The y coordinate.
85
+ * @return {Path} A reference to this path.
86
+ */
41
87
  moveTo( x, y ) {
42
88
 
43
89
  this.currentPoint.set( x, y ); // TODO consider referencing vectors instead of copying?
@@ -46,6 +92,14 @@ class Path extends CurvePath {
46
92
 
47
93
  }
48
94
 
95
+ /**
96
+ * Adds an instance of {@link LineCurve} to the path by connecting
97
+ * the current point with the given one.
98
+ *
99
+ * @param {number} x - The x coordinate of the end point.
100
+ * @param {number} y - The y coordinate of the end point.
101
+ * @return {Path} A reference to this path.
102
+ */
49
103
  lineTo( x, y ) {
50
104
 
51
105
  const curve = new LineCurve( this.currentPoint.clone(), new Vector2( x, y ) );
@@ -57,6 +111,16 @@ class Path extends CurvePath {
57
111
 
58
112
  }
59
113
 
114
+ /**
115
+ * Adds an instance of {@link QuadraticBezierCurve} to the path by connecting
116
+ * the current point with the given one.
117
+ *
118
+ * @param {number} aCPx - The x coordinate of the control point.
119
+ * @param {number} aCPy - The y coordinate of the control point.
120
+ * @param {number} aX - The x coordinate of the end point.
121
+ * @param {number} aY - The y coordinate of the end point.
122
+ * @return {Path} A reference to this path.
123
+ */
60
124
  quadraticCurveTo( aCPx, aCPy, aX, aY ) {
61
125
 
62
126
  const curve = new QuadraticBezierCurve(
@@ -73,6 +137,18 @@ class Path extends CurvePath {
73
137
 
74
138
  }
75
139
 
140
+ /**
141
+ * Adds an instance of {@link CubicBezierCurve} to the path by connecting
142
+ * the current point with the given one.
143
+ *
144
+ * @param {number} aCP1x - The x coordinate of the first control point.
145
+ * @param {number} aCP1y - The y coordinate of the first control point.
146
+ * @param {number} aCP2x - The x coordinate of the second control point.
147
+ * @param {number} aCP2y - The y coordinate of the second control point.
148
+ * @param {number} aX - The x coordinate of the end point.
149
+ * @param {number} aY - The y coordinate of the end point.
150
+ * @return {Path} A reference to this path.
151
+ */
76
152
  bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {
77
153
 
78
154
  const curve = new CubicBezierCurve(
@@ -90,7 +166,14 @@ class Path extends CurvePath {
90
166
 
91
167
  }
92
168
 
93
- splineThru( pts /*Array of Vector*/ ) {
169
+ /**
170
+ * Adds an instance of {@link SplineCurve} to the path by connecting
171
+ * the current point with the given list of points.
172
+ *
173
+ * @param {Array<Vector2>} pts - An array of points in 2D space.
174
+ * @return {Path} A reference to this path.
175
+ */
176
+ splineThru( pts ) {
94
177
 
95
178
  const npts = [ this.currentPoint.clone() ].concat( pts );
96
179
 
@@ -103,6 +186,18 @@ class Path extends CurvePath {
103
186
 
104
187
  }
105
188
 
189
+ /**
190
+ * Adds an arc as an instance of {@link EllipseCurve} to the path, positioned relative
191
+ * to the current point.
192
+ *
193
+ * @param {number} aX - The x coordinate of the center of the arc offsetted from the previous curve.
194
+ * @param {number} aY - The y coordinate of the center of the arc offsetted from the previous curve.
195
+ * @param {number} aRadius - The radius of the arc.
196
+ * @param {number} aStartAngle - The start angle in radians.
197
+ * @param {number} aEndAngle - The end angle in radians.
198
+ * @param {boolean} [aClockwise=false] - Whether to sweep the arc clockwise or not.
199
+ * @return {Path} A reference to this path.
200
+ */
106
201
  arc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
107
202
 
108
203
  const x0 = this.currentPoint.x;
@@ -115,6 +210,17 @@ class Path extends CurvePath {
115
210
 
116
211
  }
117
212
 
213
+ /**
214
+ * Adds an absolutely positioned arc as an instance of {@link EllipseCurve} to the path.
215
+ *
216
+ * @param {number} aX - The x coordinate of the center of the arc.
217
+ * @param {number} aY - The y coordinate of the center of the arc.
218
+ * @param {number} aRadius - The radius of the arc.
219
+ * @param {number} aStartAngle - The start angle in radians.
220
+ * @param {number} aEndAngle - The end angle in radians.
221
+ * @param {boolean} [aClockwise=false] - Whether to sweep the arc clockwise or not.
222
+ * @return {Path} A reference to this path.
223
+ */
118
224
  absarc( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
119
225
 
120
226
  this.absellipse( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );
@@ -123,6 +229,20 @@ class Path extends CurvePath {
123
229
 
124
230
  }
125
231
 
232
+ /**
233
+ * Adds an ellipse as an instance of {@link EllipseCurve} to the path, positioned relative
234
+ * to the current point
235
+ *
236
+ * @param {number} aX - The x coordinate of the center of the ellipse offsetted from the previous curve.
237
+ * @param {number} aY - The y coordinate of the center of the ellipse offsetted from the previous curve.
238
+ * @param {number} xRadius - The radius of the ellipse in the x axis.
239
+ * @param {number} yRadius - The radius of the ellipse in the y axis.
240
+ * @param {number} aStartAngle - The start angle in radians.
241
+ * @param {number} aEndAngle - The end angle in radians.
242
+ * @param {boolean} [aClockwise=false] - Whether to sweep the ellipse clockwise or not.
243
+ * @param {number} [aRotation=0] - The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.
244
+ * @return {Path} A reference to this path.
245
+ */
126
246
  ellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {
127
247
 
128
248
  const x0 = this.currentPoint.x;
@@ -134,6 +254,19 @@ class Path extends CurvePath {
134
254
 
135
255
  }
136
256
 
257
+ /**
258
+ * Adds an absolutely positioned ellipse as an instance of {@link EllipseCurve} to the path.
259
+ *
260
+ * @param {number} aX - The x coordinate of the absolute center of the ellipse.
261
+ * @param {number} aY - The y coordinate of the absolute center of the ellipse.
262
+ * @param {number} xRadius - The radius of the ellipse in the x axis.
263
+ * @param {number} yRadius - The radius of the ellipse in the y axis.
264
+ * @param {number} aStartAngle - The start angle in radians.
265
+ * @param {number} aEndAngle - The end angle in radians.
266
+ * @param {boolean} [aClockwise=false] - Whether to sweep the ellipse clockwise or not.
267
+ * @param {number} [aRotation=0] - The rotation angle of the ellipse in radians, counterclockwise from the positive X axis.
268
+ * @return {Path} A reference to this path.
269
+ */
137
270
  absellipse( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation ) {
138
271
 
139
272
  const curve = new EllipseCurve( aX, aY, xRadius, yRadius, aStartAngle, aEndAngle, aClockwise, aRotation );
@@ -1,20 +1,76 @@
1
1
  import { Path } from './Path.js';
2
2
  import { generateUUID } from '../../math/MathUtils.js';
3
3
 
4
+ /**
5
+ * Defines an arbitrary 2d shape plane using paths with optional holes. It
6
+ * can be used with {@link ExtrudeGeometry}, {@link ShapeGeometry}, to get
7
+ * points, or to get triangulated faces.
8
+ *
9
+ * ```js
10
+ * const heartShape = new THREE.Shape();
11
+ *
12
+ * heartShape.moveTo( 25, 25 );
13
+ * heartShape.bezierCurveTo( 25, 25, 20, 0, 0, 0 );
14
+ * heartShape.bezierCurveTo( - 30, 0, - 30, 35, - 30, 35 );
15
+ * heartShape.bezierCurveTo( - 30, 55, - 10, 77, 25, 95 );
16
+ * heartShape.bezierCurveTo( 60, 77, 80, 55, 80, 35 );
17
+ * heartShape.bezierCurveTo( 80, 35, 80, 0, 50, 0 );
18
+ * heartShape.bezierCurveTo( 35, 0, 25, 25, 25, 25 );
19
+ *
20
+ * const extrudeSettings = {
21
+ * depth: 8,
22
+ * bevelEnabled: true,
23
+ * bevelSegments: 2,
24
+ * steps: 2,
25
+ * bevelSize: 1,
26
+ * bevelThickness: 1
27
+ * };
28
+ *
29
+ * const geometry = new THREE.ExtrudeGeometry( heartShape, extrudeSettings );
30
+ * const mesh = new THREE.Mesh( geometry, new THREE.MeshBasicMaterial() );
31
+ * ```
32
+ *
33
+ * @augments Path
34
+ */
4
35
  class Shape extends Path {
5
36
 
37
+ /**
38
+ * Constructs a new shape.
39
+ *
40
+ * @param {Array<Vector2>} [points] - An array of 2D points defining the shape.
41
+ */
6
42
  constructor( points ) {
7
43
 
8
44
  super( points );
9
45
 
46
+ /**
47
+ * The UUID of the shape.
48
+ *
49
+ * @type {string}
50
+ * @readonly
51
+ */
10
52
  this.uuid = generateUUID();
11
53
 
12
54
  this.type = 'Shape';
13
55
 
56
+ /**
57
+ * Defines the holes in the shape. Hole definitions must use the
58
+ * opposite winding order (CW/CCW) than the outer shape.
59
+ *
60
+ * @type {Array<Path>}
61
+ * @readonly
62
+ */
14
63
  this.holes = [];
15
64
 
16
65
  }
17
66
 
67
+ /**
68
+ * Returns an array representing each contour of the holes
69
+ * as a list of 2D points.
70
+ *
71
+ * @param {number} divisions - The fineness of the result.
72
+ * @return {Array<Array<Vector2>>} The holes as a series of 2D points.
73
+ */
18
74
  getPointsHoles( divisions ) {
19
75
 
20
76
  const holesPts = [];
@@ -31,6 +87,13 @@ class Shape extends Path {
31
87
 
32
88
  // get points of shape and holes (keypoints based on segments parameter)
33
89
 
90
+ /**
91
+ * Returns an object that holds contour data for the shape and its holes as
92
+ * arrays of 2D points.
93
+ *
94
+ * @param {number} divisions - The fineness of the result.
95
+ * @return {{shape:Array<Vector2>,holes:Array<Array<Vector2>>}} An object with contour data.
96
+ */
34
97
  extractPoints( divisions ) {
35
98
 
36
99
  return {
@@ -3,19 +3,51 @@ import { Path } from './Path.js';
3
3
  import { Shape } from './Shape.js';
4
4
  import { ShapeUtils } from '../ShapeUtils.js';
5
5
 
6
+ /**
7
+ * This class is used to convert a series of paths to an array of
8
+ * shapes. It is specifically used in context of fonts and SVG.
9
+ */
6
10
  class ShapePath {
7
11
 
12
+ /**
13
+ * Constructs a new shape path.
14
+ */
8
15
  constructor() {
9
16
 
10
17
  this.type = 'ShapePath';
11
18
 
19
+ /**
20
+ * The color of the shape.
21
+ *
22
+ * @type {Color}
23
+ */
12
24
  this.color = new Color();
13
25
 
26
+ /**
27
+ * The paths that have been generated for this shape.
28
+ *
29
+ * @type {Array<Path>}
30
+ * @default null
31
+ */
14
32
  this.subPaths = [];
33
+
34
+ /**
35
+ * The current path that is being generated.
36
+ *
37
+ * @type {?Path}
38
+ * @default null
39
+ */
15
40
  this.currentPath = null;
16
41
 
17
42
  }
18
43
 
44
+ /**
45
+ * Creates a new path and moves it current point to the given one.
46
+ *
47
+ * @param {number} x - The x coordinate.
48
+ * @param {number} y - The y coordinate.
49
+ * @return {ShapePath} A reference to this shape path.
50
+ */
19
51
  moveTo( x, y ) {
20
52
 
21
53
  this.currentPath = new Path();
@@ -26,6 +58,14 @@ class ShapePath {
26
58
 
27
59
  }
28
60
 
61
+ /**
62
+ * Adds an instance of {@link LineCurve} to the path by connecting
63
+ * the current point with the given one.
64
+ *
65
+ * @param {number} x - The x coordinate of the end point.
66
+ * @param {number} y - The y coordinate of the end point.
67
+ * @return {ShapePath} A reference to this shape path.
68
+ */
29
69
  lineTo( x, y ) {
30
70
 
31
71
  this.currentPath.lineTo( x, y );
@@ -34,6 +74,16 @@ class ShapePath {
34
74
 
35
75
  }
36
76
 
77
+ /**
78
+ * Adds an instance of {@link QuadraticBezierCurve} to the path by connecting
79
+ * the current point with the given one.
80
+ *
81
+ * @param {number} aCPx - The x coordinate of the control point.
82
+ * @param {number} aCPy - The y coordinate of the control point.
83
+ * @param {number} aX - The x coordinate of the end point.
84
+ * @param {number} aY - The y coordinate of the end point.
85
+ * @return {ShapePath} A reference to this shape path.
86
+ */
37
87
  quadraticCurveTo( aCPx, aCPy, aX, aY ) {
38
88
 
39
89
  this.currentPath.quadraticCurveTo( aCPx, aCPy, aX, aY );
@@ -42,6 +92,18 @@ class ShapePath {
42
92
 
43
93
  }
44
94
 
95
+ /**
96
+ * Adds an instance of {@link CubicBezierCurve} to the path by connecting
97
+ * the current point with the given one.
98
+ *
99
+ * @param {number} aCP1x - The x coordinate of the first control point.
100
+ * @param {number} aCP1y - The y coordinate of the first control point.
101
+ * @param {number} aCP2x - The x coordinate of the second control point.
102
+ * @param {number} aCP2y - The y coordinate of the second control point.
103
+ * @param {number} aX - The x coordinate of the end point.
104
+ * @param {number} aY - The y coordinate of the end point.
105
+ * @return {ShapePath} A reference to this shape path.
106
+ */
45
107
  bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY ) {
46
108
 
47
109
  this.currentPath.bezierCurveTo( aCP1x, aCP1y, aCP2x, aCP2y, aX, aY );
@@ -50,6 +112,13 @@ class ShapePath {
50
112
 
51
113
  }
52
114
 
115
+ /**
116
+ * Adds an instance of {@link SplineCurve} to the path by connecting
117
+ * the current point with the given list of points.
118
+ *
119
+ * @param {Array<Vector2>} pts - An array of points in 2D space.
120
+ * @return {ShapePath} A reference to this shape path.
121
+ */
53
122
  splineThru( pts ) {
54
123
 
55
124
  this.currentPath.splineThru( pts );
@@ -58,6 +127,13 @@ class ShapePath {
58
127
 
59
128
  }
60
129
 
130
+ /**
131
+ * Converts the paths into an array of shapes.
132
+ *
133
+ * @param {boolean} isCCW - By default solid shapes are defined clockwise (CW) and holes are defined counterclockwise (CCW).
134
+ * If this flag is set to `true`, then those are flipped.
135
+ * @return {Array<Shape>} An array of shapes.
136
+ */
61
137
  toShapes( isCCW ) {
62
138
 
63
139
  function toShapesNoHoles( inSubpaths ) {
@@ -1,11 +1,33 @@
1
1
  import { EllipseCurve } from './EllipseCurve.js';
2
2
 
3
+ /**
4
+ * A curve representing an arc.
5
+ *
6
+ * @augments EllipseCurve
7
+ */
3
8
  class ArcCurve extends EllipseCurve {
4
9
 
10
+ /**
11
+ * Constructs a new arc curve.
12
+ *
13
+ * @param {number} [aX=0] - The X center of the ellipse.
14
+ * @param {number} [aY=0] - The Y center of the ellipse.
15
+ * @param {number} [aRadius=1] - The radius of the ellipse in the x direction.
16
+ * @param {number} [aStartAngle=0] - The start angle of the curve in radians starting from the positive X axis.
17
+ * @param {number} [aEndAngle=Math.PI*2] - The end angle of the curve in radians starting from the positive X axis.
18
+ * @param {boolean} [aClockwise=false] - Whether the ellipse is drawn clockwise or not.
19
+ */
5
20
  constructor( aX, aY, aRadius, aStartAngle, aEndAngle, aClockwise ) {
6
21
 
7
22
  super( aX, aY, aRadius, aRadius, aStartAngle, aEndAngle, aClockwise );
8
23
 
24
+ /**
25
+ * This flag can be used for type testing.
26
+ *
27
+ * @type {boolean}
28
+ * @readonly
29
+ * @default true
30
+ */
9
31
  this.isArcCurve = true;
10
32
 
11
33
  this.type = 'ArcCurve';