@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
@@ -13,10 +13,20 @@ import {
13
13
  * https://prideout.net/blog/old/blog/index.html@p=44.html
14
14
  */
15
15
 
16
- // GrannyKnot
17
-
16
+ /**
17
+ * A Granny Knot curve.
18
+ *
19
+ * @augments Curve
20
+ */
18
21
  class GrannyKnot extends Curve {
19
22
 
23
+ /**
24
+ * This method returns a vector in 3D space for the given interpolation factor.
25
+ *
26
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
27
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
28
+ * @return {Vector3} The position on the curve.
29
+ */
20
30
  getPoint( t, optionalTarget = new Vector3() ) {
21
31
 
22
32
  const point = optionalTarget;
@@ -33,18 +43,39 @@ class GrannyKnot extends Curve {
33
43
 
34
44
  }
35
45
 
36
- // HeartCurve
37
-
46
+ /**
47
+ * A heart curve.
48
+ *
49
+ * @augments Curve
50
+ */
38
51
  class HeartCurve extends Curve {
39
52
 
53
+ /**
54
+ * Constructs a new heart curve.
55
+ *
56
+ * @param {number} [scale=5] - The curve's scale.
57
+ */
40
58
  constructor( scale = 5 ) {
41
59
 
42
60
  super();
43
61
 
62
+ /**
63
+ * The curve's scale.
64
+ *
65
+ * @type {number}
66
+ * @default 5
67
+ */
44
68
  this.scale = scale;
45
69
 
46
70
  }
47
71
 
72
+ /**
73
+ * This method returns a vector in 3D space for the given interpolation factor.
74
+ *
75
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
76
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
77
+ * @return {Vector3} The position on the curve.
78
+ */
48
79
  getPoint( t, optionalTarget = new Vector3() ) {
49
80
 
50
81
  const point = optionalTarget;
@@ -61,18 +92,39 @@ class HeartCurve extends Curve {
61
92
 
62
93
  }
63
94
 
64
- // Viviani's Curve
65
-
95
+ /**
96
+ * A Viviani curve.
97
+ *
98
+ * @augments Curve
99
+ */
66
100
  class VivianiCurve extends Curve {
67
101
 
102
+ /**
103
+ * Constructs a new Viviani curve.
104
+ *
105
+ * @param {number} [scale=70] - The curve's scale.
106
+ */
68
107
  constructor( scale = 70 ) {
69
108
 
70
109
  super();
71
110
 
111
+ /**
112
+ * The curve's scale.
113
+ *
114
+ * @type {number}
115
+ * @default 70
116
+ */
72
117
  this.scale = scale;
73
118
 
74
119
  }
75
120
 
121
+ /**
122
+ * This method returns a vector in 3D space for the given interpolation factor.
123
+ *
124
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
125
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
126
+ * @return {Vector3} The position on the curve.
127
+ */
76
128
  getPoint( t, optionalTarget = new Vector3() ) {
77
129
 
78
130
  const point = optionalTarget;
@@ -90,10 +142,20 @@ class VivianiCurve extends Curve {
90
142
 
91
143
  }
92
144
 
93
- // KnotCurve
94
-
145
+ /**
146
+ * A knot curve.
147
+ *
148
+ * @augments Curve
149
+ */
95
150
  class KnotCurve extends Curve {
96
151
 
152
+ /**
153
+ * This method returns a vector in 3D space for the given interpolation factor.
154
+ *
155
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
156
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
157
+ * @return {Vector3} The position on the curve.
158
+ */
97
159
  getPoint( t, optionalTarget = new Vector3() ) {
98
160
 
99
161
  const point = optionalTarget;
@@ -113,11 +175,20 @@ class KnotCurve extends Curve {
113
175
 
114
176
  }
115
177
 
116
-
117
- // HelixCurve
118
-
178
+ /**
179
+ * A helix curve.
180
+ *
181
+ * @augments Curve
182
+ */
119
183
  class HelixCurve extends Curve {
120
184
 
185
+ /**
186
+ * This method returns a vector in 3D space for the given interpolation factor.
187
+ *
188
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
189
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
190
+ * @return {Vector3} The position on the curve.
191
+ */
121
192
  getPoint( t, optionalTarget = new Vector3() ) {
122
193
 
123
194
  const point = optionalTarget;
@@ -137,18 +208,39 @@ class HelixCurve extends Curve {
137
208
 
138
209
  }
139
210
 
140
- // TrefoilKnot
141
-
211
+ /**
212
+ * A Trefoil Knot.
213
+ *
214
+ * @augments Curve
215
+ */
142
216
  class TrefoilKnot extends Curve {
143
217
 
218
+ /**
219
+ * Constructs a new Trefoil Knot.
220
+ *
221
+ * @param {number} [scale=10] - The curve's scale.
222
+ */
144
223
  constructor( scale = 10 ) {
145
224
 
146
225
  super();
147
226
 
227
+ /**
228
+ * The curve's scale.
229
+ *
230
+ * @type {number}
231
+ * @default 10
232
+ */
148
233
  this.scale = scale;
149
234
 
150
235
  }
151
236
 
237
+ /**
238
+ * This method returns a vector in 3D space for the given interpolation factor.
239
+ *
240
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
241
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
242
+ * @return {Vector3} The position on the curve.
243
+ */
152
244
  getPoint( t, optionalTarget = new Vector3() ) {
153
245
 
154
246
  const point = optionalTarget;
@@ -165,18 +257,39 @@ class TrefoilKnot extends Curve {
165
257
 
166
258
  }
167
259
 
168
- // TorusKnot
169
-
260
+ /**
261
+ * A torus knot.
262
+ *
263
+ * @augments Curve
264
+ */
170
265
  class TorusKnot extends Curve {
171
266
 
267
+ /**
268
+ * Constructs a new torus knot.
269
+ *
270
+ * @param {number} [scale=10] - The curve's scale.
271
+ */
172
272
  constructor( scale = 10 ) {
173
273
 
174
274
  super();
175
275
 
276
+ /**
277
+ * The curve's scale.
278
+ *
279
+ * @type {number}
280
+ * @default 10
281
+ */
176
282
  this.scale = scale;
177
283
 
178
284
  }
179
285
 
286
+ /**
287
+ * This method returns a vector in 3D space for the given interpolation factor.
288
+ *
289
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
290
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
291
+ * @return {Vector3} The position on the curve.
292
+ */
180
293
  getPoint( t, optionalTarget = new Vector3() ) {
181
294
 
182
295
  const point = optionalTarget;
@@ -196,18 +309,39 @@ class TorusKnot extends Curve {
196
309
 
197
310
  }
198
311
 
199
- // CinquefoilKnot
200
-
312
+ /**
313
+ * A Cinquefoil Knot.
314
+ *
315
+ * @augments Curve
316
+ */
201
317
  class CinquefoilKnot extends Curve {
202
318
 
319
+ /**
320
+ * Constructs a new Cinquefoil Knot.
321
+ *
322
+ * @param {number} [scale=10] - The curve's scale.
323
+ */
203
324
  constructor( scale = 10 ) {
204
325
 
205
326
  super();
206
327
 
328
+ /**
329
+ * The curve's scale.
330
+ *
331
+ * @type {number}
332
+ * @default 10
333
+ */
207
334
  this.scale = scale;
208
335
 
209
336
  }
210
337
 
338
+ /**
339
+ * This method returns a vector in 3D space for the given interpolation factor.
340
+ *
341
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
342
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
343
+ * @return {Vector3} The position on the curve.
344
+ */
211
345
  getPoint( t, optionalTarget = new Vector3() ) {
212
346
 
213
347
  const point = optionalTarget;
@@ -227,19 +361,39 @@ class CinquefoilKnot extends Curve {
227
361
 
228
362
  }
229
363
 
230
-
231
- // TrefoilPolynomialKnot
232
-
364
+ /**
365
+ * A Trefoil Polynomial Knot.
366
+ *
367
+ * @augments Curve
368
+ */
233
369
  class TrefoilPolynomialKnot extends Curve {
234
370
 
371
+ /**
372
+ * Constructs a new Trefoil Polynomial Knot.
373
+ *
374
+ * @param {number} [scale=10] - The curve's scale.
375
+ */
235
376
  constructor( scale = 10 ) {
236
377
 
237
378
  super();
238
379
 
380
+ /**
381
+ * The curve's scale.
382
+ *
383
+ * @type {number}
384
+ * @default 10
385
+ */
239
386
  this.scale = scale;
240
387
 
241
388
  }
242
389
 
390
+ /**
391
+ * This method returns a vector in 3D space for the given interpolation factor.
392
+ *
393
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
394
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
395
+ * @return {Vector3} The position on the curve.
396
+ */
243
397
  getPoint( t, optionalTarget = new Vector3() ) {
244
398
 
245
399
  const point = optionalTarget;
@@ -263,18 +417,39 @@ function scaleTo( x, y, t ) {
263
417
 
264
418
  }
265
419
 
266
- // FigureEightPolynomialKnot
267
-
420
+ /**
421
+ * A Figure Eight Polynomial Knot.
422
+ *
423
+ * @augments Curve
424
+ */
268
425
  class FigureEightPolynomialKnot extends Curve {
269
426
 
427
+ /**
428
+ * Constructs a new Figure Eight Polynomial Knot.
429
+ *
430
+ * @param {number} [scale=1] - The curve's scale.
431
+ */
270
432
  constructor( scale = 1 ) {
271
433
 
272
434
  super();
273
435
 
436
+ /**
437
+ * The curve's scale.
438
+ *
439
+ * @type {number}
440
+ * @default 1
441
+ */
274
442
  this.scale = scale;
275
443
 
276
444
  }
277
445
 
446
+ /**
447
+ * This method returns a vector in 3D space for the given interpolation factor.
448
+ *
449
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
450
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
451
+ * @return {Vector3} The position on the curve.
452
+ */
278
453
  getPoint( t, optionalTarget = new Vector3() ) {
279
454
 
280
455
  const point = optionalTarget;
@@ -291,18 +466,39 @@ class FigureEightPolynomialKnot extends Curve {
291
466
 
292
467
  }
293
468
 
294
- // DecoratedTorusKnot4a
295
-
469
+ /**
470
+ * A Decorated Torus Knot 4a.
471
+ *
472
+ * @augments Curve
473
+ */
296
474
  class DecoratedTorusKnot4a extends Curve {
297
475
 
476
+ /**
477
+ * Constructs a new Decorated Torus Knot 4a.
478
+ *
479
+ * @param {number} [scale=1] - The curve's scale.
480
+ */
298
481
  constructor( scale = 40 ) {
299
482
 
300
483
  super();
301
484
 
485
+ /**
486
+ * The curve's scale.
487
+ *
488
+ * @type {number}
489
+ * @default 40
490
+ */
302
491
  this.scale = scale;
303
492
 
304
493
  }
305
494
 
495
+ /**
496
+ * This method returns a vector in 3D space for the given interpolation factor.
497
+ *
498
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
499
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
500
+ * @return {Vector3} The position on the curve.
501
+ */
306
502
  getPoint( t, optionalTarget = new Vector3() ) {
307
503
 
308
504
  const point = optionalTarget;
@@ -319,18 +515,39 @@ class DecoratedTorusKnot4a extends Curve {
319
515
 
320
516
  }
321
517
 
322
- // DecoratedTorusKnot4b
323
-
518
+ /**
519
+ * A Decorated Torus Knot 4b.
520
+ *
521
+ * @augments Curve
522
+ */
324
523
  class DecoratedTorusKnot4b extends Curve {
325
524
 
525
+ /**
526
+ * Constructs a new Decorated Torus Knot 4b.
527
+ *
528
+ * @param {number} [scale=1] - The curve's scale.
529
+ */
326
530
  constructor( scale = 40 ) {
327
531
 
328
532
  super();
329
533
 
534
+ /**
535
+ * The curve's scale.
536
+ *
537
+ * @type {number}
538
+ * @default 40
539
+ */
330
540
  this.scale = scale;
331
541
 
332
542
  }
333
543
 
544
+ /**
545
+ * This method returns a vector in 3D space for the given interpolation factor.
546
+ *
547
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
548
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
549
+ * @return {Vector3} The position on the curve.
550
+ */
334
551
  getPoint( t, optionalTarget = new Vector3() ) {
335
552
 
336
553
  const point = optionalTarget;
@@ -347,19 +564,39 @@ class DecoratedTorusKnot4b extends Curve {
347
564
 
348
565
  }
349
566
 
350
-
351
- // DecoratedTorusKnot5a
352
-
567
+ /**
568
+ * A Decorated Torus Knot 5a.
569
+ *
570
+ * @augments Curve
571
+ */
353
572
  class DecoratedTorusKnot5a extends Curve {
354
573
 
574
+ /**
575
+ * Constructs a new Decorated Torus Knot 5a.
576
+ *
577
+ * @param {number} [scale=1] - The curve's scale.
578
+ */
355
579
  constructor( scale = 40 ) {
356
580
 
357
581
  super();
358
582
 
583
+ /**
584
+ * The curve's scale.
585
+ *
586
+ * @type {number}
587
+ * @default 40
588
+ */
359
589
  this.scale = scale;
360
590
 
361
591
  }
362
592
 
593
+ /**
594
+ * This method returns a vector in 3D space for the given interpolation factor.
595
+ *
596
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
597
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
598
+ * @return {Vector3} The position on the curve.
599
+ */
363
600
  getPoint( t, optionalTarget = new Vector3() ) {
364
601
 
365
602
  const point = optionalTarget;
@@ -376,18 +613,39 @@ class DecoratedTorusKnot5a extends Curve {
376
613
 
377
614
  }
378
615
 
379
- // DecoratedTorusKnot5c
380
-
616
+ /**
617
+ * A Decorated Torus Knot 5c.
618
+ *
619
+ * @augments Curve
620
+ */
381
621
  class DecoratedTorusKnot5c extends Curve {
382
622
 
623
+ /**
624
+ * Constructs a new Decorated Torus Knot 5c.
625
+ *
626
+ * @param {number} [scale=1] - The curve's scale.
627
+ */
383
628
  constructor( scale = 40 ) {
384
629
 
385
630
  super();
386
631
 
632
+ /**
633
+ * The curve's scale.
634
+ *
635
+ * @type {number}
636
+ * @default 40
637
+ */
387
638
  this.scale = scale;
388
639
 
389
640
  }
390
641
 
642
+ /**
643
+ * This method returns a vector in 3D space for the given interpolation factor.
644
+ *
645
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
646
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
647
+ * @return {Vector3} The position on the curve.
648
+ */
391
649
  getPoint( t, optionalTarget = new Vector3() ) {
392
650
 
393
651
  const point = optionalTarget;
@@ -6,34 +6,63 @@ import {
6
6
  import * as NURBSUtils from '../curves/NURBSUtils.js';
7
7
 
8
8
  /**
9
- * NURBS curve object
9
+ * This class represents a NURBS curve.
10
10
  *
11
- * Derives from Curve, overriding getPoint and getTangent.
11
+ * Implementation is based on `(x, y [, z=0 [, w=1]])` control points with `w=weight`.
12
12
  *
13
- * Implementation is based on (x, y [, z=0 [, w=1]]) control points with w=weight.
14
- *
15
- **/
16
-
13
+ * @augments Curve
14
+ */
17
15
  class NURBSCurve extends Curve {
18
16
 
19
- constructor(
20
- degree,
21
- knots /* array of reals */,
22
- controlPoints /* array of Vector(2|3|4) */,
23
- startKnot /* index in knots */,
24
- endKnot /* index in knots */
25
- ) {
17
+ /**
18
+ * Constructs a new NURBS curve.
19
+ *
20
+ * @param {number} degree - The NURBS degree.
21
+ * @param {Array<number>} knots - The knots as a flat array of numbers.
22
+ * @param {Array<Vector2|Vector3|Vector4>} controlPoints - An array holding control points.
23
+ * @param {number} [startKnot] - Index of the start knot into the `knots` array.
24
+ * @param {number} [endKnot] - Index of the end knot into the `knots` array.
25
+ */
26
+ constructor( degree, knots, controlPoints, startKnot, endKnot ) {
26
27
 
27
28
  super();
28
29
 
29
30
  const knotsLength = knots ? knots.length - 1 : 0;
30
31
  const pointsLength = controlPoints ? controlPoints.length : 0;
31
32
 
33
+ /**
34
+ * The NURBS degree.
35
+ *
36
+ * @type {number}
37
+ */
32
38
  this.degree = degree;
39
+
40
+ /**
41
+ * The knots as a flat array of numbers.
42
+ *
43
+ * @type {Array<number>}
44
+ */
33
45
  this.knots = knots;
46
+
47
+ /**
48
+ * An array of control points.
49
+ *
50
+ * @type {Array<Vector4>}
51
+ */
34
52
  this.controlPoints = [];
35
- // Used by periodic NURBS to remove hidden spans
53
+
54
+ /**
55
+ * Index of the start knot into the `knots` array.
56
+ *
57
+ * @type {number}
58
+ */
36
59
  this.startKnot = startKnot || 0;
60
+
61
+ /**
62
+ * Index of the end knot into the `knots` array.
63
+ *
64
+ * @type {number}
65
+ */
37
66
  this.endKnot = endKnot || knotsLength;
38
67
 
39
68
  for ( let i = 0; i < pointsLength; ++ i ) {
@@ -46,6 +75,13 @@ class NURBSCurve extends Curve {
46
75
 
47
76
  }
48
77
 
78
+ /**
79
+ * This method returns a vector in 3D space for the given interpolation factor.
80
+ *
81
+ * @param {number} t - A interpolation factor representing a position on the curve. Must be in the range `[0,1]`.
82
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
83
+ * @return {Vector3} The position on the curve.
84
+ */
49
85
  getPoint( t, optionalTarget = new Vector3() ) {
50
86
 
51
87
  const point = optionalTarget;
@@ -66,6 +102,13 @@ class NURBSCurve extends Curve {
66
102
 
67
103
  }
68
104
 
105
+ /**
106
+ * Returns a unit vector tangent for the given interpolation factor.
107
+ *
108
+ * @param {number} t - The interpolation factor.
109
+ * @param {Vector3} [optionalTarget] - The optional target vector the result is written to.
110
+ * @return {Vector3} The tangent vector.
111
+ */
69
112
  getTangent( t, optionalTarget = new Vector3() ) {
70
113
 
71
114
  const tangent = optionalTarget;
@@ -4,19 +4,56 @@ import {
4
4
  import * as NURBSUtils from '../curves/NURBSUtils.js';
5
5
 
6
6
  /**
7
- * NURBS surface object
7
+ * This class represents a NURBS surface.
8
8
  *
9
- * Implementation is based on (x, y [, z=0 [, w=1]]) control points with w=weight.
10
- **/
11
-
9
+ * Implementation is based on `(x, y [, z=0 [, w=1]])` control points with `w=weight`.
10
+ */
12
11
  class NURBSSurface {
13
12
 
14
- constructor( degree1, degree2, knots1, knots2 /* arrays of reals */, controlPoints /* array^2 of Vector(2|3|4) */ ) {
15
-
13
+ /**
14
+ * Constructs a new NURBS surface.
15
+ *
16
+ * @param {number} degree1 - The first NURBS degree.
17
+ * @param {number} degree2 - The second NURBS degree.
18
+ * @param {Array<number>} knots1 - The first knots as a flat array of numbers.
19
+ * @param {Array<number>} knots2 - The second knots as a flat array of numbers.
20
+ * @param {Array<Array<Vector2|Vector3|Vector4>>} controlPoints - An array^2 holding control points.
21
+ */
22
+ constructor( degree1, degree2, knots1, knots2, controlPoints ) {
23
+
24
+ /**
25
+ * The first NURBS degree.
26
+ *
27
+ * @type {number}
28
+ */
16
29
  this.degree1 = degree1;
30
+
31
+ /**
32
+ * The second NURBS degree.
33
+ *
34
+ * @type {number}
35
+ */
17
36
  this.degree2 = degree2;
37
+
38
+ /**
39
+ * The first knots as a flat array of numbers.
40
+ *
41
+ * @type {Array<number>}
42
+ */
18
43
  this.knots1 = knots1;
44
+
45
+ /**
46
+ * The second knots as a flat array of numbers.
47
+ *
48
+ * @type {Array<number>}
49
+ */
19
50
  this.knots2 = knots2;
51
+
52
+ /**
53
+ * An array holding arrays of control points.
54
+ *
55
+ * @type {Array<Array<Vector2|Vector3|Vector4>>}
56
+ */
20
57
  this.controlPoints = [];
21
58
 
22
59
  const len1 = knots1.length - degree1 - 1;
@@ -38,6 +75,13 @@ class NURBSSurface {
38
75
 
39
76
  }
40
77
 
78
+ /**
79
+ * This method returns a vector in 3D space for the given interpolation factor. This vector lies on the NURBS surface.
80
+ *
81
+ * @param {number} t1 - The first interpolation factor representing the `u` position on the surface. Must be in the range `[0,1]`.
82
+ * @param {number} t2 - The second interpolation factor representing the `v` position on the surface. Must be in the range `[0,1]`.
83
+ * @param {Vector3} target - The target vector the result is written to.
84
+ */
41
85
  getPoint( t1, t2, target ) {
42
86
 
43
87
  const u = this.knots1[ 0 ] + t1 * ( this.knots1[ this.knots1.length - 1 ] - this.knots1[ 0 ] ); // linear mapping t1->u