@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
@@ -19,45 +19,191 @@ const _box = /*@__PURE__*/ new Box3();
19
19
  const _boxMorphTargets = /*@__PURE__*/ new Box3();
20
20
  const _vector = /*@__PURE__*/ new Vector3();
21
21
 
22
+ /**
23
+ * A representation of mesh, line, or point geometry. Includes vertex
24
+ * positions, face indices, normals, colors, UVs, and custom attributes
25
+ * within buffers, reducing the cost of passing all this data to the GPU.
26
+ *
27
+ * ```js
28
+ * const geometry = new THREE.BufferGeometry();
29
+ * // create a simple square shape. We duplicate the top left and bottom right
30
+ * // vertices because each vertex needs to appear once per triangle.
31
+ * const vertices = new Float32Array( [
32
+ * -1.0, -1.0, 1.0, // v0
33
+ * 1.0, -1.0, 1.0, // v1
34
+ * 1.0, 1.0, 1.0, // v2
35
+ *
36
+ * 1.0, 1.0, 1.0, // v3
37
+ * -1.0, 1.0, 1.0, // v4
38
+ * -1.0, -1.0, 1.0 // v5
39
+ * ] );
40
+ * // itemSize = 3 because there are 3 values (components) per vertex
41
+ * geometry.setAttribute( 'position', new THREE.BufferAttribute( vertices, 3 ) );
42
+ * const material = new THREE.MeshBasicMaterial( { color: 0xff0000 } );
43
+ * const mesh = new THREE.Mesh( geometry, material );
44
+ * ```
45
+ *
46
+ * @augments EventDispatcher
47
+ */
22
48
  class BufferGeometry extends EventDispatcher {
23
49
 
50
+ /**
51
+ * Constructs a new geometry.
52
+ */
24
53
  constructor() {
25
54
 
26
55
  super();
27
56
 
57
+ /**
58
+ * This flag can be used for type testing.
59
+ *
60
+ * @type {boolean}
61
+ * @readonly
62
+ * @default true
63
+ */
28
64
  this.isBufferGeometry = true;
29
65
 
66
+ /**
67
+ * The ID of the geometry.
68
+ *
69
+ * @name BufferGeometry#id
70
+ * @type {number}
71
+ * @readonly
72
+ */
30
73
  Object.defineProperty( this, 'id', { value: _id ++ } );
31
74
 
75
+ /**
76
+ * The UUID of the geometry.
77
+ *
78
+ * @type {string}
79
+ * @readonly
80
+ */
32
81
  this.uuid = generateUUID();
33
82
 
83
+ /**
84
+ * The name of the geometry.
85
+ *
86
+ * @type {string}
87
+ */
34
88
  this.name = '';
35
89
  this.type = 'BufferGeometry';
36
90
 
91
+ /**
92
+ * Allows for vertices to be re-used across multiple triangles; this is
93
+ * called using "indexed triangles". Each triangle is associated with the
94
+ * indices of three vertices. This attribute therefore stores the index of
95
+ * each vertex for each triangular face. If this attribute is not set, the
96
+ * renderer assumes that each three contiguous positions represent a single triangle.
97
+ *
98
+ * @type {?BufferAttribute}
99
+ * @default null
100
+ */
37
101
  this.index = null;
102
+
103
+ /**
104
+ * A (storage) buffer attribute which was generated with a compute shader and
105
+ * now defines indirect draw calls.
106
+ *
107
+ * Can only be used with {@link WebGPURenderer} and a WebGPU backend.
108
+ *
109
+ * @type {?BufferAttribute}
110
+ * @default null
111
+ */
38
112
  this.indirect = null;
113
+
114
+ /**
115
+ * This dictionary has as id the name of the attribute to be set and as value
116
+ * the buffer attribute to set it to. Rather than accessing this property directly,
117
+ * use `setAttribute()` and `getAttribute()` to access attributes of this geometry.
118
+ *
119
+ * @type {Object<string,(BufferAttribute|InterleavedBufferAttribute)>}
120
+ */
39
121
  this.attributes = {};
40
122
 
123
+ /**
124
+ * This dictionary holds the morph targets of the geometry.
125
+ *
126
+ * Note: Once the geometry has been rendered, the morph attribute data cannot
127
+ * be changed. You will have to call `dispose()?, and create a new geometry instance.
128
+ *
129
+ * @type {Object}
130
+ */
41
131
  this.morphAttributes = {};
132
+
133
+ /**
134
+ * Used to control the morph target behavior; when set to `true`, the morph
135
+ * target data is treated as relative offsets, rather than as absolute
136
+ * positions/normals.
137
+ *
138
+ * @type {boolean}
139
+ * @default false
140
+ */
42
141
  this.morphTargetsRelative = false;
43
142
 
143
+ /**
144
+ * Split the geometry into groups, each of which will be rendered in a
145
+ * separate draw call. This allows an array of materials to be used with the geometry.
146
+ *
147
+ * Use `addGroup()` and `clearGroups()` to edit groups, rather than modifying this array directly.
148
+ *
149
+ * Every vertex and index must belong to exactly one group — groups must not share vertices or
150
+ * indices, and must not leave vertices or indices unused.
151
+ *
152
+ * @type {Array<Object>}
153
+ */
44
154
  this.groups = [];
45
155
 
156
+ /**
157
+ * Bounding box for the geometry which can be calculated with `computeBoundingBox()`.
158
+ *
159
+ * @type {Box3}
160
+ * @default null
161
+ */
46
162
  this.boundingBox = null;
163
+
164
+ /**
165
+ * Bounding sphere for the geometry which can be calculated with `computeBoundingSphere()`.
166
+ *
167
+ * @type {Sphere}
168
+ * @default null
169
+ */
47
170
  this.boundingSphere = null;
48
171
 
172
+ /**
173
+ * Determines the part of the geometry to render. This should not be set directly,
174
+ * instead use `setDrawRange()`.
175
+ *
176
+ * @type {{start:number,count:number}}
177
+ */
49
178
  this.drawRange = { start: 0, count: Infinity };
50
179
 
180
+ /**
181
+ * An object that can be used to store custom data about the geometry.
182
+ * It should not hold references to functions as these will not be cloned.
183
+ *
184
+ * @type {Object}
185
+ */
51
186
  this.userData = {};
52
187
 
53
188
  }
54
189
 
190
+ /**
191
+ * Returns the index of this geometry.
192
+ *
193
+ * @return {?BufferAttribute} The index. Returns `null` if no index is defined.
194
+ */
55
195
  getIndex() {
56
196
 
57
197
  return this.index;
58
198
 
59
199
  }
60
200
 
201
+ /**
202
+ * Sets the given index to this geometry.
203
+ *
204
+ * @param {Array<number>|BufferAttribute} index - The index to set.
205
+ * @return {BufferGeometry} A reference to this instance.
206
+ */
61
207
  setIndex( index ) {
62
208
 
63
209
  if ( Array.isArray( index ) ) {
@@ -74,6 +220,12 @@ class BufferGeometry extends EventDispatcher {
74
220
 
75
221
  }
76
222
 
223
+ /**
224
+ * Sets the given indirect attribute to this geometry.
225
+ *
226
+ * @param {BufferAttribute} indirect - The attribute holding indirect draw calls.
227
+ * @return {BufferGeometry} A reference to this instance.
228
+ */
77
229
  setIndirect( indirect ) {
78
230
 
79
231
  this.indirect = indirect;
@@ -82,18 +234,37 @@ class BufferGeometry extends EventDispatcher {
82
234
 
83
235
  }
84
236
 
237
+ /**
238
+ * Returns the indirect attribute of this geometry.
239
+ *
240
+ * @return {?BufferAttribute} The indirect attribute. Returns `null` if no indirect attribute is defined.
241
+ */
85
242
  getIndirect() {
86
243
 
87
244
  return this.indirect;
88
245
 
89
246
  }
90
247
 
248
+ /**
249
+ * Returns the buffer attribute for the given name.
250
+ *
251
+ * @param {string} name - The attribute name.
252
+ * @return {BufferAttribute|InterleavedBufferAttribute|undefined} The buffer attribute.
253
+ * Returns `undefined` if not attribute has been found.
254
+ */
91
255
  getAttribute( name ) {
92
256
 
93
257
  return this.attributes[ name ];
94
258
 
95
259
  }
96
260
 
261
+ /**
262
+ * Sets the given attribute for the given name.
263
+ *
264
+ * @param {string} name - The attribute name.
265
+ * @param {BufferAttribute|InterleavedBufferAttribute} attribute - The attribute to set.
266
+ * @return {BufferGeometry} A reference to this instance.
267
+ */
97
268
  setAttribute( name, attribute ) {
98
269
 
99
270
  this.attributes[ name ] = attribute;
@@ -102,6 +273,12 @@ class BufferGeometry extends EventDispatcher {
102
273
 
103
274
  }
104
275
 
276
+ /**
277
+ * Deletes the attribute for the given name.
278
+ *
279
+ * @param {string} name - The attribute name to delete.
280
+ * @return {BufferGeometry} A reference to this instance.
281
+ */
105
282
  deleteAttribute( name ) {
106
283
 
107
284
  delete this.attributes[ name ];
@@ -110,12 +287,26 @@ class BufferGeometry extends EventDispatcher {
110
287
 
111
288
  }
112
289
 
290
+ /**
291
+ * Returns `true` if this geometry has an attribute for the given name.
292
+ *
293
+ * @param {string} name - The attribute name.
294
+ * @return {boolean} Whether this geometry has an attribute for the given name or not.
295
+ */
113
296
  hasAttribute( name ) {
114
297
 
115
298
  return this.attributes[ name ] !== undefined;
116
299
 
117
300
  }
118
301
 
302
+ /**
303
+ * Adds a group to this geometry.
304
+ *
305
+ * @param {number} start - The first element in this draw call. That is the first
306
+ * vertex for non-indexed geometry, otherwise the first triangle index.
307
+ * @param {number} count - Specifies how many vertices (or indices) are part of this group.
308
+ * @param {number} [materialIndex=0] - The material array index to use.
309
+ */
119
310
  addGroup( start, count, materialIndex = 0 ) {
120
311
 
121
312
  this.groups.push( {
@@ -128,12 +319,22 @@ class BufferGeometry extends EventDispatcher {
128
319
 
129
320
  }
130
321
 
322
+ /**
323
+ * Clears all groups.
324
+ */
131
325
  clearGroups() {
132
326
 
133
327
  this.groups = [];
134
328
 
135
329
  }
136
330
 
331
+ /**
332
+ * Sets the draw range for this geometry.
333
+ *
334
+ * @param {number} start - The first vertex for non-indexed geometry, otherwise the first triangle index.
335
+ * @param {number} count - For non-indexed BufferGeometry, `count` is the number of vertices to render.
336
+ * For indexed BufferGeometry, `count` is the number of indices to render.
337
+ */
137
338
  setDrawRange( start, count ) {
138
339
 
139
340
  this.drawRange.start = start;
@@ -141,6 +342,12 @@ class BufferGeometry extends EventDispatcher {
141
342
 
142
343
  }
143
344
 
345
+ /**
346
+ * Applies the given 4x4 transformation matrix to the geometry.
347
+ *
348
+ * @param {Matrix4} matrix - The matrix to apply.
349
+ * @return {BufferGeometry} A reference to this instance.
350
+ */
144
351
  applyMatrix4( matrix ) {
145
352
 
146
353
  const position = this.attributes.position;
@@ -191,6 +398,12 @@ class BufferGeometry extends EventDispatcher {
191
398
 
192
399
  }
193
400
 
401
+ /**
402
+ * Applies the rotation represented by the Quaternion to the geometry.
403
+ *
404
+ * @param {Quaternion} q - The Quaternion to apply.
405
+ * @return {BufferGeometry} A reference to this instance.
406
+ */
194
407
  applyQuaternion( q ) {
195
408
 
196
409
  _m1.makeRotationFromQuaternion( q );
@@ -201,6 +414,14 @@ class BufferGeometry extends EventDispatcher {
201
414
 
202
415
  }
203
416
 
417
+ /**
418
+ * Rotates the geometry about the X axis. This is typically done as a one time
419
+ * operation, and not during a loop. Use {@link Object3D#rotation} for typical
420
+ * real-time mesh rotation.
421
+ *
422
+ * @param {number} angle - The angle in radians.
423
+ * @return {BufferGeometry} A reference to this instance.
424
+ */
204
425
  rotateX( angle ) {
205
426
 
206
427
  // rotate geometry around world x-axis
@@ -213,6 +434,14 @@ class BufferGeometry extends EventDispatcher {
213
434
 
214
435
  }
215
436
 
437
+ /**
438
+ * Rotates the geometry about the Y axis. This is typically done as a one time
439
+ * operation, and not during a loop. Use {@link Object3D#rotation} for typical
440
+ * real-time mesh rotation.
441
+ *
442
+ * @param {number} angle - The angle in radians.
443
+ * @return {BufferGeometry} A reference to this instance.
444
+ */
216
445
  rotateY( angle ) {
217
446
 
218
447
  // rotate geometry around world y-axis
@@ -225,6 +454,14 @@ class BufferGeometry extends EventDispatcher {
225
454
 
226
455
  }
227
456
 
457
+ /**
458
+ * Rotates the geometry about the Z axis. This is typically done as a one time
459
+ * operation, and not during a loop. Use {@link Object3D#rotation} for typical
460
+ * real-time mesh rotation.
461
+ *
462
+ * @param {number} angle - The angle in radians.
463
+ * @return {BufferGeometry} A reference to this instance.
464
+ */
228
465
  rotateZ( angle ) {
229
466
 
230
467
  // rotate geometry around world z-axis
@@ -237,6 +474,16 @@ class BufferGeometry extends EventDispatcher {
237
474
 
238
475
  }
239
476
 
477
+ /**
478
+ * Translates the geometry. This is typically done as a one time
479
+ * operation, and not during a loop. Use {@link Object3D#position} for typical
480
+ * real-time mesh rotation.
481
+ *
482
+ * @param {number} x - The x offset.
483
+ * @param {number} y - The y offset.
484
+ * @param {number} z - The z offset.
485
+ * @return {BufferGeometry} A reference to this instance.
486
+ */
240
487
  translate( x, y, z ) {
241
488
 
242
489
  // translate geometry
@@ -249,6 +496,16 @@ class BufferGeometry extends EventDispatcher {
249
496
 
250
497
  }
251
498
 
499
+ /**
500
+ * Scales the geometry. This is typically done as a one time
501
+ * operation, and not during a loop. Use {@link Object3D#scale} for typical
502
+ * real-time mesh rotation.
503
+ *
504
+ * @param {number} x - The x scale.
505
+ * @param {number} y - The y scale.
506
+ * @param {number} z - The z scale.
507
+ * @return {BufferGeometry} A reference to this instance.
508
+ */
252
509
  scale( x, y, z ) {
253
510
 
254
511
  // scale geometry
@@ -261,6 +518,14 @@ class BufferGeometry extends EventDispatcher {
261
518
 
262
519
  }
263
520
 
521
+ /**
522
+ * Rotates the geometry to face a point in 3D space. This is typically done as a one time
523
+ * operation, and not during a loop. Use {@link Object3D#lookAt} for typical
524
+ * real-time mesh rotation.
525
+ *
526
+ * @param {Vector3} vector - The target point.
527
+ * @return {BufferGeometry} A reference to this instance.
528
+ */
264
529
  lookAt( vector ) {
265
530
 
266
531
  _obj.lookAt( vector );
@@ -273,6 +538,11 @@ class BufferGeometry extends EventDispatcher {
273
538
 
274
539
  }
275
540
 
541
+ /**
542
+ * Center the geometry based on its bounding box.
543
+ *
544
+ * @return {BufferGeometry} A reference to this instance.
545
+ */
276
546
  center() {
277
547
 
278
548
  this.computeBoundingBox();
@@ -285,6 +555,17 @@ class BufferGeometry extends EventDispatcher {
285
555
 
286
556
  }
287
557
 
558
+ /**
559
+ * Defines a geometry by creating a `position` attribute based on the given array of points. The array
560
+ * can hold 2D or 3D vectors. When using two-dimensional data, the `z` coordinate for all vertices is
561
+ * set to `0`.
562
+ *
563
+ * If the method is used with an existing `position` attribute, the vertex data are overwritten with the
564
+ * data from the array. The length of the array must match the vertex count.
565
+ *
566
+ * @param {Array<Vector2>|Array<Vector3>} points - The points.
567
+ * @return {BufferGeometry} A reference to this instance.
568
+ */
288
569
  setFromPoints( points ) {
289
570
 
290
571
  const positionAttribute = this.getAttribute( 'position' );
@@ -327,6 +608,11 @@ class BufferGeometry extends EventDispatcher {
327
608
 
328
609
  }
329
610
 
611
+ /**
612
+ * Computes the bounding box of the geometry, and updates the `boundingBox` member.
613
+ * The bounding box is not computed by the engine; it must be computed by your app.
614
+ * You may need to recompute the bounding box if the geometry vertices are modified.
615
+ */
330
616
  computeBoundingBox() {
331
617
 
332
618
  if ( this.boundingBox === null ) {
@@ -397,6 +683,11 @@ class BufferGeometry extends EventDispatcher {
397
683
 
398
684
  }
399
685
 
686
+ /**
687
+ * Computes the bounding sphere of the geometry, and updates the `boundingSphere` member.
688
+ * The engine automatically computes the bounding sphere when it is needed, e.g., for ray casting or view frustum culling.
689
+ * You may need to recompute the bounding sphere if the geometry vertices are modified.
690
+ */
400
691
  computeBoundingSphere() {
401
692
 
402
693
  if ( this.boundingSphere === null ) {
@@ -509,6 +800,13 @@ class BufferGeometry extends EventDispatcher {
509
800
 
510
801
  }
511
802
 
803
+ /**
804
+ * Calculates and adds a tangent attribute to this geometry.
805
+ *
806
+ * The computation is only supported for indexed geometries and if position, normal, and uv attributes
807
+ * are defined. When using a tangent space normal map, prefer the MikkTSpace algorithm provided by
808
+ * {@link BufferGeometryUtils#computeMikkTSpaceTangents} instead.
809
+ */
512
810
  computeTangents() {
513
811
 
514
812
  const index = this.index;
@@ -668,6 +966,12 @@ class BufferGeometry extends EventDispatcher {
668
966
 
669
967
  }
670
968
 
969
+ /**
970
+ * Computes vertex normals for the given vertex data. For indexed geometries, the method sets
971
+ * each vertex normal to be the average of the face normals of the faces that share that vertex.
972
+ * For non-indexed geometries, vertices are not shared, and the method sets each vertex normal
973
+ * to be the same as the face normal.
974
+ */
671
975
  computeVertexNormals() {
672
976
 
673
977
  const index = this.index;
@@ -760,6 +1064,10 @@ class BufferGeometry extends EventDispatcher {
760
1064
 
761
1065
  }
762
1066
 
1067
+ /**
1068
+ * Ensures every normal vector in a geometry will have a magnitude of `1`. This will
1069
+ * correct lighting on the geometry surfaces.
1070
+ */
763
1071
  normalizeNormals() {
764
1072
 
765
1073
  const normals = this.attributes.normal;
@@ -776,6 +1084,12 @@ class BufferGeometry extends EventDispatcher {
776
1084
 
777
1085
  }
778
1086
 
1087
+ /**
1088
+ * Return a new non-index version of this indexed geometry. If the geometry
1089
+ * is already non-indexed, the method is a NOOP.
1090
+ *
1091
+ * @return {BufferGeometry} The non-indexed version of this indexed geometry.
1092
+ */
779
1093
  toNonIndexed() {
780
1094
 
781
1095
  function convertBufferAttribute( attribute, indices ) {
@@ -878,6 +1192,11 @@ class BufferGeometry extends EventDispatcher {
878
1192
 
879
1193
  }
880
1194
 
1195
+ /**
1196
+ * Serializes the geometry into JSON.
1197
+ *
1198
+ * @return {Object} A JSON object representing the serialized geometry.
1199
+ */
881
1200
  toJSON() {
882
1201
 
883
1202
  const data = {
@@ -991,12 +1310,23 @@ class BufferGeometry extends EventDispatcher {
991
1310
 
992
1311
  }
993
1312
 
1313
+ /**
1314
+ * Returns a new geometry with copied values from this instance.
1315
+ *
1316
+ * @return {BufferGeometry} A clone of this instance.
1317
+ */
994
1318
  clone() {
995
1319
 
996
1320
  return new this.constructor().copy( this );
997
1321
 
998
1322
  }
999
1323
 
1324
+ /**
1325
+ * Copies the values of the given geometry to this instance.
1326
+ *
1327
+ * @param {BufferGeometry} source - The geometry to copy.
1328
+ * @return {BufferGeometry} A reference to this instance.
1329
+ */
1000
1330
  copy( source ) {
1001
1331
 
1002
1332
  // reset
@@ -1022,7 +1352,7 @@ class BufferGeometry extends EventDispatcher {
1022
1352
 
1023
1353
  if ( index !== null ) {
1024
1354
 
1025
- this.setIndex( index.clone( data ) );
1355
+ this.setIndex( index.clone() );
1026
1356
 
1027
1357
  }
1028
1358
 
@@ -1102,6 +1432,12 @@ class BufferGeometry extends EventDispatcher {
1102
1432
 
1103
1433
  }
1104
1434
 
1435
+ /**
1436
+ * Frees the GPU-related resources allocated by this instance. Call this
1437
+ * method whenever this instance is no longer used in your app.
1438
+ *
1439
+ * @fires BufferGeometry#dispose
1440
+ */
1105
1441
  dispose() {
1106
1442
 
1107
1443
  this.dispatchEvent( { type: 'dispose' } );
package/src/core/Clock.js CHANGED
@@ -1,17 +1,64 @@
1
+ /**
2
+ * Class for keeping track of time.
3
+ */
1
4
  class Clock {
2
5
 
6
+ /**
7
+ * Constructs a new clock.
8
+ *
9
+ * @param {boolean} [autoStart=true] - Whether to automatically start the clock when
10
+ * `getDelta()` is called for the first time.
11
+ */
3
12
  constructor( autoStart = true ) {
4
13
 
14
+ /**
15
+ * If set to `true`, the clock starts automatically when `getDelta()` is called
16
+ * for the first time.
17
+ *
18
+ * @type {boolean}
19
+ * @default true
20
+ */
5
21
  this.autoStart = autoStart;
6
22
 
23
+ /**
24
+ * Holds the time at which the clock's `start()` method was last called.
25
+ *
26
+ * @type {number}
27
+ * @default 0
28
+ */
7
29
  this.startTime = 0;
30
+
31
+ /**
32
+ * Holds the time at which the clock's `start()`, `getElapsedTime()` or
33
+ * `getDelta()` methods were last called.
34
+ *
35
+ * @type {number}
36
+ * @default 0
37
+ */
8
38
  this.oldTime = 0;
39
+
40
+ /**
41
+ * Keeps track of the total time that the clock has been running.
42
+ *
43
+ * @type {number}
44
+ * @default 0
45
+ */
9
46
  this.elapsedTime = 0;
10
47
 
48
+ /**
49
+ * Whether the clock is running or not.
50
+ *
51
+ * @type {boolean}
52
+ * @default true
53
+ */
11
54
  this.running = false;
12
55
 
13
56
  }
14
57
 
58
+ /**
59
+ * Starts the clock. When `autoStart` is set to `true`, the method is automatically
60
+ * called by the class.
61
+ */
15
62
  start() {
16
63
 
17
64
  this.startTime = now();
@@ -22,6 +69,9 @@ class Clock {
22
69
 
23
70
  }
24
71
 
72
+ /**
73
+ * Stops the clock.
74
+ */
25
75
  stop() {
26
76
 
27
77
  this.getElapsedTime();
@@ -30,6 +80,11 @@ class Clock {
30
80
 
31
81
  }
32
82
 
83
+ /**
84
+ * Returns the elapsed time in seconds.
85
+ *
86
+ * @return {number} The elapsed time.
87
+ */
33
88
  getElapsedTime() {
34
89
 
35
90
  this.getDelta();
@@ -37,6 +92,11 @@ class Clock {
37
92
 
38
93
  }
39
94
 
95
+ /**
96
+ * Returns the delta time in seconds.
97
+ *
98
+ * @return {number} The delta time.
99
+ */
40
100
  getDelta() {
41
101
 
42
102
  let diff = 0;