@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
@@ -9,8 +9,23 @@ const _vector2 = /*@__PURE__*/ new Vector2();
9
9
 
10
10
  let _id = 0;
11
11
 
12
+ /**
13
+ * This class stores data for an attribute (such as vertex positions, face
14
+ * indices, normals, colors, UVs, and any custom attributes ) associated with
15
+ * a geometry, which allows for more efficient passing of data to the GPU.
16
+ *
17
+ * When working with vector-like data, the `fromBufferAttribute( attribute, index )`
18
+ * helper methods on vector and color class might be helpful. E.g. {@link Vector3#fromBufferAttribute}.
19
+ */
12
20
  class BufferAttribute {
13
21
 
22
+ /**
23
+ * Constructs a new buffer attribute.
24
+ *
25
+ * @param {TypedArray} array - The array holding the attribute data.
26
+ * @param {number} itemSize - The item size.
27
+ * @param {boolean} [normalized=false] - Whether the data are normalized or not.
28
+ */
14
29
  constructor( array, itemSize, normalized = false ) {
15
30
 
16
31
  if ( Array.isArray( array ) ) {
@@ -19,33 +34,133 @@ class BufferAttribute {
19
34
 
20
35
  }
21
36
 
37
+ /**
38
+ * This flag can be used for type testing.
39
+ *
40
+ * @type {boolean}
41
+ * @readonly
42
+ * @default true
43
+ */
22
44
  this.isBufferAttribute = true;
23
45
 
46
+ /**
47
+ * The ID of the buffer attribute.
48
+ *
49
+ * @name BufferAttribute#id
50
+ * @type {number}
51
+ * @readonly
52
+ */
24
53
  Object.defineProperty( this, 'id', { value: _id ++ } );
25
54
 
55
+ /**
56
+ * The name of the buffer attribute.
57
+ *
58
+ * @type {string}
59
+ */
26
60
  this.name = '';
27
61
 
62
+ /**
63
+ * The array holding the attribute data. It should have `itemSize * numVertices`
64
+ * elements, where `numVertices` is the number of vertices in the associated geometry.
65
+ *
66
+ * @type {TypedArray}
67
+ */
28
68
  this.array = array;
69
+
70
+ /**
71
+ * The number of values of the array that should be associated with a particular vertex.
72
+ * For instance, if this attribute is storing a 3-component vector (such as a position,
73
+ * normal, or color), then the value should be `3`.
74
+ *
75
+ * @type {number}
76
+ */
29
77
  this.itemSize = itemSize;
78
+
79
+ /**
80
+ * Represents the number of items this buffer attribute stores. It is internally computed
81
+ * by dividing the `array` length by the `itemSize`.
82
+ *
83
+ * @type {number}
84
+ * @readonly
85
+ */
30
86
  this.count = array !== undefined ? array.length / itemSize : 0;
87
+
88
+ /**
89
+ * Applies to integer data only. Indicates how the underlying data in the buffer maps to
90
+ * the values in the GLSL code. For instance, if `array` is an instance of `UInt16Array`,
91
+ * and `normalized` is `true`, the values `0 -+65535` in the array data will be mapped to
92
+ * `0.0f - +1.0f` in the GLSL attribute. If `normalized` is `false`, the values will be converted
93
+ * to floats unmodified, i.e. `65535` becomes `65535.0f`.
94
+ *
95
+ * @type {boolean}
96
+ */
31
97
  this.normalized = normalized;
32
98
 
99
+ /**
100
+ * Defines the intended usage pattern of the data store for optimization purposes.
101
+ *
102
+ * Note: After the initial use of a buffer, its usage cannot be changed. Instead,
103
+ * instantiate a new one and set the desired usage before the next render.
104
+ *
105
+ * @type {(StaticDrawUsage|DynamicDrawUsage|StreamDrawUsage|StaticReadUsage|DynamicReadUsage|StreamReadUsage|StaticCopyUsage|DynamicCopyUsage|StreamCopyUsage)}
106
+ * @default StaticDrawUsage
107
+ */
33
108
  this.usage = StaticDrawUsage;
109
+
110
+ /**
111
+ * This can be used to only update some components of stored vectors (for example, just the
112
+ * component related to color). Use the `addUpdateRange()` function to add ranges to this array.
113
+ *
114
+ * @type {Array<Object>}
115
+ */
34
116
  this.updateRanges = [];
117
+
118
+ /**
119
+ * Configures the bound GPU type for use in shaders.
120
+ *
121
+ * Note: this only has an effect for integer arrays and is not configurable for float arrays.
122
+ * For lower precision float types, use `Float16BufferAttribute`.
123
+ *
124
+ * @type {(FloatType|IntType)}
125
+ * @default FloatType
126
+ */
35
127
  this.gpuType = FloatType;
36
128
 
129
+ /**
130
+ * A version number, incremented every time the `needsUpdate` is set to `true`.
131
+ *
132
+ * @type {number}
133
+ */
37
134
  this.version = 0;
38
135
 
39
136
  }
40
137
 
138
+ /**
139
+ * A callback function that is executed after the renderer has transferred the attribute
140
+ * array data to the GPU.
141
+ */
41
142
  onUploadCallback() {}
42
143
 
144
+ /**
145
+ * Flag to indicate that this attribute has changed and should be re-sent to
146
+ * the GPU. Set this to `true` when you modify the value of the array.
147
+ *
148
+ * @type {number}
149
+ * @default false
150
+ * @param {boolean} value
151
+ */
43
152
  set needsUpdate( value ) {
44
153
 
45
154
  if ( value === true ) this.version ++;
46
155
 
47
156
  }
48
157
 
158
+ /**
159
+ * Sets the usage of this buffer attribute.
160
+ *
161
+ * @param {(StaticDrawUsage|DynamicDrawUsage|StreamDrawUsage|StaticReadUsage|DynamicReadUsage|StreamReadUsage|StaticCopyUsage|DynamicCopyUsage|StreamCopyUsage)} value - The usage to set.
162
+ * @return {BufferAttribute} A reference to this buffer attribute.
163
+ */
49
164
  setUsage( value ) {
50
165
 
51
166
  this.usage = value;
@@ -54,18 +169,33 @@ class BufferAttribute {
54
169
 
55
170
  }
56
171
 
172
+ /**
173
+ * Adds a range of data in the data array to be updated on the GPU.
174
+ *
175
+ * @param {number} start - Position at which to start update.
176
+ * @param {number} count - The number of components to update.
177
+ */
57
178
  addUpdateRange( start, count ) {
58
179
 
59
180
  this.updateRanges.push( { start, count } );
60
181
 
61
182
  }
62
183
 
184
+ /**
185
+ * Clears the update ranges.
186
+ */
63
187
  clearUpdateRanges() {
64
188
 
65
189
  this.updateRanges.length = 0;
66
190
 
67
191
  }
68
192
 
193
+ /**
194
+ * Copies the values of the given buffer attribute to this instance.
195
+ *
196
+ * @param {BufferAttribute} source - The buffer attribute to copy.
197
+ * @return {BufferAttribute} A reference to this instance.
198
+ */
69
199
  copy( source ) {
70
200
 
71
201
  this.name = source.name;
@@ -81,6 +211,16 @@ class BufferAttribute {
81
211
 
82
212
  }
83
213
 
214
+ /**
215
+ * Copies a vector from the given buffer attribute to this one. The start
216
+ * and destination position in the attribute buffers are represented by the
217
+ * given indices.
218
+ *
219
+ * @param {number} index1 - The destination index into this buffer attribute.
220
+ * @param {BufferAttribute} attribute - The buffer attribute to copy from.
221
+ * @param {number} index2 - The source index into the given buffer attribute.
222
+ * @return {BufferAttribute} A reference to this instance.
223
+ */
84
224
  copyAt( index1, attribute, index2 ) {
85
225
 
86
226
  index1 *= this.itemSize;
@@ -96,6 +236,12 @@ class BufferAttribute {
96
236
 
97
237
  }
98
238
 
239
+ /**
240
+ * Copies the given array data into this buffer attribute.
241
+ *
242
+ * @param {(TypedArray|Array)} array - The array to copy.
243
+ * @return {BufferAttribute} A reference to this instance.
244
+ */
99
245
  copyArray( array ) {
100
246
 
101
247
  this.array.set( array );
@@ -104,6 +250,13 @@ class BufferAttribute {
104
250
 
105
251
  }
106
252
 
253
+ /**
254
+ * Applies the given 3x3 matrix to the given attribute. Works with
255
+ * item size `2` and `3`.
256
+ *
257
+ * @param {Matrix3} m - The matrix to apply.
258
+ * @return {BufferAttribute} A reference to this instance.
259
+ */
107
260
  applyMatrix3( m ) {
108
261
 
109
262
  if ( this.itemSize === 2 ) {
@@ -134,6 +287,13 @@ class BufferAttribute {
134
287
 
135
288
  }
136
289
 
290
+ /**
291
+ * Applies the given 4x4 matrix to the given attribute. Only works with
292
+ * item size `3`.
293
+ *
294
+ * @param {Matrix4} m - The matrix to apply.
295
+ * @return {BufferAttribute} A reference to this instance.
296
+ */
137
297
  applyMatrix4( m ) {
138
298
 
139
299
  for ( let i = 0, l = this.count; i < l; i ++ ) {
@@ -150,6 +310,13 @@ class BufferAttribute {
150
310
 
151
311
  }
152
312
 
313
+ /**
314
+ * Applies the given 3x3 normal matrix to the given attribute. Only works with
315
+ * item size `3`.
316
+ *
317
+ * @param {Matrix3} m - The normal matrix to apply.
318
+ * @return {BufferAttribute} A reference to this instance.
319
+ */
153
320
  applyNormalMatrix( m ) {
154
321
 
155
322
  for ( let i = 0, l = this.count; i < l; i ++ ) {
@@ -166,6 +333,13 @@ class BufferAttribute {
166
333
 
167
334
  }
168
335
 
336
+ /**
337
+ * Applies the given 4x4 matrix to the given attribute. Only works with
338
+ * item size `3` and with direction vectors.
339
+ *
340
+ * @param {Matrix4} m - The matrix to apply.
341
+ * @return {BufferAttribute} A reference to this instance.
342
+ */
169
343
  transformDirection( m ) {
170
344
 
171
345
  for ( let i = 0, l = this.count; i < l; i ++ ) {
@@ -182,6 +356,13 @@ class BufferAttribute {
182
356
 
183
357
  }
184
358
 
359
+ /**
360
+ * Sets the given array data in the buffer attribute.
361
+ *
362
+ * @param {(TypedArray|Array)} value - The array data to set.
363
+ * @param {number} [offset=0] - The offset in this buffer attribute's array.
364
+ * @return {BufferAttribute} A reference to this instance.
365
+ */
185
366
  set( value, offset = 0 ) {
186
367
 
187
368
  // Matching BufferAttribute constructor, do not normalize the array.
@@ -191,6 +372,13 @@ class BufferAttribute {
191
372
 
192
373
  }
193
374
 
375
+ /**
376
+ * Returns the given component of the vector at the given index.
377
+ *
378
+ * @param {number} index - The index into the buffer attribute.
379
+ * @param {number} component - The component index.
380
+ * @return {number} The returned value.
381
+ */
194
382
  getComponent( index, component ) {
195
383
 
196
384
  let value = this.array[ index * this.itemSize + component ];
@@ -201,6 +389,14 @@ class BufferAttribute {
201
389
 
202
390
  }
203
391
 
392
+ /**
393
+ * Sets the given value to the given component of the vector at the given index.
394
+ *
395
+ * @param {number} index - The index into the buffer attribute.
396
+ * @param {number} component - The component index.
397
+ * @param {number} value - The value to set.
398
+ * @return {BufferAttribute} A reference to this instance.
399
+ */
204
400
  setComponent( index, component, value ) {
205
401
 
206
402
  if ( this.normalized ) value = normalize( value, this.array );
@@ -211,6 +407,12 @@ class BufferAttribute {
211
407
 
212
408
  }
213
409
 
410
+ /**
411
+ * Returns the x component of the vector at the given index.
412
+ *
413
+ * @param {number} index - The index into the buffer attribute.
414
+ * @return {number} The x component.
415
+ */
214
416
  getX( index ) {
215
417
 
216
418
  let x = this.array[ index * this.itemSize ];
@@ -221,6 +423,13 @@ class BufferAttribute {
221
423
 
222
424
  }
223
425
 
426
+ /**
427
+ * Sets the x component of the vector at the given index.
428
+ *
429
+ * @param {number} index - The index into the buffer attribute.
430
+ * @param {number} x - The value to set.
431
+ * @return {BufferAttribute} A reference to this instance.
432
+ */
224
433
  setX( index, x ) {
225
434
 
226
435
  if ( this.normalized ) x = normalize( x, this.array );
@@ -231,6 +440,12 @@ class BufferAttribute {
231
440
 
232
441
  }
233
442
 
443
+ /**
444
+ * Returns the y component of the vector at the given index.
445
+ *
446
+ * @param {number} index - The index into the buffer attribute.
447
+ * @return {number} The y component.
448
+ */
234
449
  getY( index ) {
235
450
 
236
451
  let y = this.array[ index * this.itemSize + 1 ];
@@ -241,6 +456,13 @@ class BufferAttribute {
241
456
 
242
457
  }
243
458
 
459
+ /**
460
+ * Sets the y component of the vector at the given index.
461
+ *
462
+ * @param {number} index - The index into the buffer attribute.
463
+ * @param {number} y - The value to set.
464
+ * @return {BufferAttribute} A reference to this instance.
465
+ */
244
466
  setY( index, y ) {
245
467
 
246
468
  if ( this.normalized ) y = normalize( y, this.array );
@@ -251,6 +473,12 @@ class BufferAttribute {
251
473
 
252
474
  }
253
475
 
476
+ /**
477
+ * Returns the z component of the vector at the given index.
478
+ *
479
+ * @param {number} index - The index into the buffer attribute.
480
+ * @return {number} The z component.
481
+ */
254
482
  getZ( index ) {
255
483
 
256
484
  let z = this.array[ index * this.itemSize + 2 ];
@@ -261,6 +489,13 @@ class BufferAttribute {
261
489
 
262
490
  }
263
491
 
492
+ /**
493
+ * Sets the z component of the vector at the given index.
494
+ *
495
+ * @param {number} index - The index into the buffer attribute.
496
+ * @param {number} z - The value to set.
497
+ * @return {BufferAttribute} A reference to this instance.
498
+ */
264
499
  setZ( index, z ) {
265
500
 
266
501
  if ( this.normalized ) z = normalize( z, this.array );
@@ -271,6 +506,12 @@ class BufferAttribute {
271
506
 
272
507
  }
273
508
 
509
+ /**
510
+ * Returns the w component of the vector at the given index.
511
+ *
512
+ * @param {number} index - The index into the buffer attribute.
513
+ * @return {number} The w component.
514
+ */
274
515
  getW( index ) {
275
516
 
276
517
  let w = this.array[ index * this.itemSize + 3 ];
@@ -281,6 +522,13 @@ class BufferAttribute {
281
522
 
282
523
  }
283
524
 
525
+ /**
526
+ * Sets the w component of the vector at the given index.
527
+ *
528
+ * @param {number} index - The index into the buffer attribute.
529
+ * @param {number} w - The value to set.
530
+ * @return {BufferAttribute} A reference to this instance.
531
+ */
284
532
  setW( index, w ) {
285
533
 
286
534
  if ( this.normalized ) w = normalize( w, this.array );
@@ -291,6 +539,14 @@ class BufferAttribute {
291
539
 
292
540
  }
293
541
 
542
+ /**
543
+ * Sets the x and y component of the vector at the given index.
544
+ *
545
+ * @param {number} index - The index into the buffer attribute.
546
+ * @param {number} x - The value for the x component to set.
547
+ * @param {number} y - The value for the y component to set.
548
+ * @return {BufferAttribute} A reference to this instance.
549
+ */
294
550
  setXY( index, x, y ) {
295
551
 
296
552
  index *= this.itemSize;
@@ -309,6 +565,15 @@ class BufferAttribute {
309
565
 
310
566
  }
311
567
 
568
+ /**
569
+ * Sets the x, y and z component of the vector at the given index.
570
+ *
571
+ * @param {number} index - The index into the buffer attribute.
572
+ * @param {number} x - The value for the x component to set.
573
+ * @param {number} y - The value for the y component to set.
574
+ * @param {number} z - The value for the z component to set.
575
+ * @return {BufferAttribute} A reference to this instance.
576
+ */
312
577
  setXYZ( index, x, y, z ) {
313
578
 
314
579
  index *= this.itemSize;
@@ -329,6 +594,16 @@ class BufferAttribute {
329
594
 
330
595
  }
331
596
 
597
+ /**
598
+ * Sets the x, y, z and w component of the vector at the given index.
599
+ *
600
+ * @param {number} index - The index into the buffer attribute.
601
+ * @param {number} x - The value for the x component to set.
602
+ * @param {number} y - The value for the y component to set.
603
+ * @param {number} z - The value for the z component to set.
604
+ * @param {number} w - The value for the w component to set.
605
+ * @return {BufferAttribute} A reference to this instance.
606
+ */
332
607
  setXYZW( index, x, y, z, w ) {
333
608
 
334
609
  index *= this.itemSize;
@@ -351,6 +626,14 @@ class BufferAttribute {
351
626
 
352
627
  }
353
628
 
629
+ /**
630
+ * Sets the given callback function that is executed after the Renderer has transferred
631
+ * the attribute array data to the GPU. Can be used to perform clean-up operations after
632
+ * the upload when attribute data are not needed anymore on the CPU side.
633
+ *
634
+ * @param {Function} callback - The `onUpload()` callback.
635
+ * @return {BufferAttribute} A reference to this instance.
636
+ */
354
637
  onUpload( callback ) {
355
638
 
356
639
  this.onUploadCallback = callback;
@@ -359,12 +642,22 @@ class BufferAttribute {
359
642
 
360
643
  }
361
644
 
645
+ /**
646
+ * Returns a new buffer attribute with copied values from this instance.
647
+ *
648
+ * @return {BufferAttribute} A clone of this instance.
649
+ */
362
650
  clone() {
363
651
 
364
652
  return new this.constructor( this.array, this.itemSize ).copy( this );
365
653
 
366
654
  }
367
655
 
656
+ /**
657
+ * Serializes the buffer attribute into JSON.
658
+ *
659
+ * @return {Object} A JSON object representing the serialized buffer attribute.
660
+ */
368
661
  toJSON() {
369
662
 
370
663
  const data = {
@@ -383,10 +676,21 @@ class BufferAttribute {
383
676
 
384
677
  }
385
678
 
386
- //
387
-
679
+ /**
680
+ * Convenient class that can be used when creating a `Int8` buffer attribute with
681
+ * a plain `Array` instance.
682
+ *
683
+ * @augments BufferAttribute
684
+ */
388
685
  class Int8BufferAttribute extends BufferAttribute {
389
686
 
687
+ /**
688
+ * Constructs a new buffer attribute.
689
+ *
690
+ * @param {(Array<number>|Int8Array)} array - The array holding the attribute data.
691
+ * @param {number} itemSize - The item size.
692
+ * @param {boolean} [normalized=false] - Whether the data are normalized or not.
693
+ */
390
694
  constructor( array, itemSize, normalized ) {
391
695
 
392
696
  super( new Int8Array( array ), itemSize, normalized );
@@ -395,8 +699,21 @@ class Int8BufferAttribute extends BufferAttribute {
395
699
 
396
700
  }
397
701
 
702
+ /**
703
+ * Convenient class that can be used when creating a `UInt8` buffer attribute with
704
+ * a plain `Array` instance.
705
+ *
706
+ * @augments BufferAttribute
707
+ */
398
708
  class Uint8BufferAttribute extends BufferAttribute {
399
709
 
710
+ /**
711
+ * Constructs a new buffer attribute.
712
+ *
713
+ * @param {(Array<number>|Uint8Array)} array - The array holding the attribute data.
714
+ * @param {number} itemSize - The item size.
715
+ * @param {boolean} [normalized=false] - Whether the data are normalized or not.
716
+ */
400
717
  constructor( array, itemSize, normalized ) {
401
718
 
402
719
  super( new Uint8Array( array ), itemSize, normalized );
@@ -405,8 +722,21 @@ class Uint8BufferAttribute extends BufferAttribute {
405
722
 
406
723
  }
407
724
 
725
+ /**
726
+ * Convenient class that can be used when creating a `UInt8Clamped` buffer attribute with
727
+ * a plain `Array` instance.
728
+ *
729
+ * @augments BufferAttribute
730
+ */
408
731
  class Uint8ClampedBufferAttribute extends BufferAttribute {
409
732
 
733
+ /**
734
+ * Constructs a new buffer attribute.
735
+ *
736
+ * @param {(Array<number>|Uint8ClampedArray)} array - The array holding the attribute data.
737
+ * @param {number} itemSize - The item size.
738
+ * @param {boolean} [normalized=false] - Whether the data are normalized or not.
739
+ */
410
740
  constructor( array, itemSize, normalized ) {
411
741
 
412
742
  super( new Uint8ClampedArray( array ), itemSize, normalized );
@@ -415,8 +745,21 @@ class Uint8ClampedBufferAttribute extends BufferAttribute {
415
745
 
416
746
  }
417
747
 
748
+ /**
749
+ * Convenient class that can be used when creating a `Int16` buffer attribute with
750
+ * a plain `Array` instance.
751
+ *
752
+ * @augments BufferAttribute
753
+ */
418
754
  class Int16BufferAttribute extends BufferAttribute {
419
755
 
756
+ /**
757
+ * Constructs a new buffer attribute.
758
+ *
759
+ * @param {(Array<number>|Int16Array)} array - The array holding the attribute data.
760
+ * @param {number} itemSize - The item size.
761
+ * @param {boolean} [normalized=false] - Whether the data are normalized or not.
762
+ */
420
763
  constructor( array, itemSize, normalized ) {
421
764
 
422
765
  super( new Int16Array( array ), itemSize, normalized );
@@ -425,8 +768,21 @@ class Int16BufferAttribute extends BufferAttribute {
425
768
 
426
769
  }
427
770
 
771
+ /**
772
+ * Convenient class that can be used when creating a `UInt16` buffer attribute with
773
+ * a plain `Array` instance.
774
+ *
775
+ * @augments BufferAttribute
776
+ */
428
777
  class Uint16BufferAttribute extends BufferAttribute {
429
778
 
779
+ /**
780
+ * Constructs a new buffer attribute.
781
+ *
782
+ * @param {(Array<number>|Uint16Array)} array - The array holding the attribute data.
783
+ * @param {number} itemSize - The item size.
784
+ * @param {boolean} [normalized=false] - Whether the data are normalized or not.
785
+ */
430
786
  constructor( array, itemSize, normalized ) {
431
787
 
432
788
  super( new Uint16Array( array ), itemSize, normalized );
@@ -435,8 +791,21 @@ class Uint16BufferAttribute extends BufferAttribute {
435
791
 
436
792
  }
437
793
 
794
+ /**
795
+ * Convenient class that can be used when creating a `Int32` buffer attribute with
796
+ * a plain `Array` instance.
797
+ *
798
+ * @augments BufferAttribute
799
+ */
438
800
  class Int32BufferAttribute extends BufferAttribute {
439
801
 
802
+ /**
803
+ * Constructs a new buffer attribute.
804
+ *
805
+ * @param {(Array<number>|Int32Array)} array - The array holding the attribute data.
806
+ * @param {number} itemSize - The item size.
807
+ * @param {boolean} [normalized=false] - Whether the data are normalized or not.
808
+ */
440
809
  constructor( array, itemSize, normalized ) {
441
810
 
442
811
  super( new Int32Array( array ), itemSize, normalized );
@@ -445,8 +814,21 @@ class Int32BufferAttribute extends BufferAttribute {
445
814
 
446
815
  }
447
816
 
817
+ /**
818
+ * Convenient class that can be used when creating a `UInt32` buffer attribute with
819
+ * a plain `Array` instance.
820
+ *
821
+ * @augments BufferAttribute
822
+ */
448
823
  class Uint32BufferAttribute extends BufferAttribute {
449
824
 
825
+ /**
826
+ * Constructs a new buffer attribute.
827
+ *
828
+ * @param {(Array<number>|Uint32Array)} array - The array holding the attribute data.
829
+ * @param {number} itemSize - The item size.
830
+ * @param {boolean} [normalized=false] - Whether the data are normalized or not.
831
+ */
450
832
  constructor( array, itemSize, normalized ) {
451
833
 
452
834
  super( new Uint32Array( array ), itemSize, normalized );
@@ -455,8 +837,24 @@ class Uint32BufferAttribute extends BufferAttribute {
455
837
 
456
838
  }
457
839
 
840
+ /**
841
+ * Convenient class that can be used when creating a `Float16` buffer attribute with
842
+ * a plain `Array` instance.
843
+ *
844
+ * This class automatically converts to to and from FP16 since `Float16Array` is not
845
+ * natively supported in JavaScript.
846
+ *
847
+ * @augments BufferAttribute
848
+ */
458
849
  class Float16BufferAttribute extends BufferAttribute {
459
850
 
851
+ /**
852
+ * Constructs a new buffer attribute.
853
+ *
854
+ * @param {(Array<number>|Uint16Array)} array - The array holding the attribute data.
855
+ * @param {number} itemSize - The item size.
856
+ * @param {boolean} [normalized=false] - Whether the data are normalized or not.
857
+ */
460
858
  constructor( array, itemSize, normalized ) {
461
859
 
462
860
  super( new Uint16Array( array ), itemSize, normalized );
@@ -607,9 +1005,21 @@ class Float16BufferAttribute extends BufferAttribute {
607
1005
 
608
1006
  }
609
1007
 
610
-
1008
+ /**
1009
+ * Convenient class that can be used when creating a `Float32` buffer attribute with
1010
+ * a plain `Array` instance.
1011
+ *
1012
+ * @augments BufferAttribute
1013
+ */
611
1014
  class Float32BufferAttribute extends BufferAttribute {
612
1015
 
1016
+ /**
1017
+ * Constructs a new buffer attribute.
1018
+ *
1019
+ * @param {(Array<number>|Float32Array)} array - The array holding the attribute data.
1020
+ * @param {number} itemSize - The item size.
1021
+ * @param {boolean} [normalized=false] - Whether the data are normalized or not.
1022
+ */
613
1023
  constructor( array, itemSize, normalized ) {
614
1024
 
615
1025
  super( new Float32Array( array ), itemSize, normalized );