@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
@@ -7,8 +7,28 @@ import {
7
7
  Vector3
8
8
  } from 'three';
9
9
 
10
+ /**
11
+ * Fires when the camera has been transformed by the controls.
12
+ *
13
+ * @event TrackballControls#change
14
+ * @type {Object}
15
+ */
10
16
  const _changeEvent = { type: 'change' };
17
+
18
+ /**
19
+ * Fires when an interaction was initiated.
20
+ *
21
+ * @event TrackballControls#start
22
+ * @type {Object}
23
+ */
11
24
  const _startEvent = { type: 'start' };
25
+
26
+ /**
27
+ * Fires when an interaction has finished.
28
+ *
29
+ * @event TrackballControls#end
30
+ * @type {Object}
31
+ */
12
32
  const _endEvent = { type: 'end' };
13
33
 
14
34
  const _EPS = 0.000001;
@@ -25,45 +45,168 @@ const _objectUpDirection = new Vector3();
25
45
  const _objectSidewaysDirection = new Vector3();
26
46
  const _moveDirection = new Vector3();
27
47
 
48
+ /**
49
+ * This class is similar to {@link OrbitControls}. However, it does not maintain a constant camera
50
+ * `up` vector. That means if the camera orbits over the “north” and “south” poles, it does not flip
51
+ * to stay "right side up".
52
+ *
53
+ * @augments Controls
54
+ */
28
55
  class TrackballControls extends Controls {
29
56
 
57
+ /**
58
+ * Constructs a new controls instance.
59
+ *
60
+ * @param {Object3D} object - The object that is managed by the controls.
61
+ * @param {?HTMLDOMElement} domElement - The HTML element used for event listeners.
62
+ */
30
63
  constructor( object, domElement = null ) {
31
64
 
32
65
  super( object, domElement );
33
66
 
34
- // API
35
-
36
- this.enabled = true;
37
-
67
+ /**
68
+ * Represents the properties of the screen. Automatically set when `handleResize()` is called.
69
+ *
70
+ * @type {Object}
71
+ * @readonly
72
+ */
38
73
  this.screen = { left: 0, top: 0, width: 0, height: 0 };
39
74
 
75
+ /**
76
+ * The rotation speed.
77
+ *
78
+ * @type {number}
79
+ * @default 1
80
+ */
40
81
  this.rotateSpeed = 1.0;
82
+
83
+ /**
84
+ * The zoom speed.
85
+ *
86
+ * @type {number}
87
+ * @default 1.2
88
+ */
41
89
  this.zoomSpeed = 1.2;
90
+
91
+ /**
92
+ * The pan speed.
93
+ *
94
+ * @type {number}
95
+ * @default 0.3
96
+ */
42
97
  this.panSpeed = 0.3;
43
98
 
99
+ /**
100
+ * Whether rotation is disabled or not.
101
+ *
102
+ * @type {boolean}
103
+ * @default false
104
+ */
44
105
  this.noRotate = false;
106
+
107
+ /**
108
+ * Whether zooming is disabled or not.
109
+ *
110
+ * @type {boolean}
111
+ * @default false
112
+ */
45
113
  this.noZoom = false;
114
+
115
+ /**
116
+ * Whether panning is disabled or not.
117
+ *
118
+ * @type {boolean}
119
+ * @default false
120
+ */
46
121
  this.noPan = false;
47
122
 
123
+ /**
124
+ * Whether damping is disabled or not.
125
+ *
126
+ * @type {boolean}
127
+ * @default false
128
+ */
48
129
  this.staticMoving = false;
130
+
131
+ /**
132
+ * Defines the intensity of damping. Only considered if `staticMoving` is set to `false`.
133
+ *
134
+ * @type {number}
135
+ * @default 0.2
136
+ */
49
137
  this.dynamicDampingFactor = 0.2;
50
138
 
139
+ /**
140
+ * How far you can dolly in (perspective camera only).
141
+ *
142
+ * @type {number}
143
+ * @default 0
144
+ */
51
145
  this.minDistance = 0;
146
+
147
+ /**
148
+ * How far you can dolly out (perspective camera only).
149
+ *
150
+ * @type {number}
151
+ * @default Infinity
152
+ */
52
153
  this.maxDistance = Infinity;
53
154
 
155
+ /**
156
+ * How far you can zoom in (orthographic camera only).
157
+ *
158
+ * @type {number}
159
+ * @default 0
160
+ */
54
161
  this.minZoom = 0;
162
+
163
+ /**
164
+ * How far you can zoom out (orthographic camera only).
165
+ *
166
+ * @type {number}
167
+ * @default Infinity
168
+ */
55
169
  this.maxZoom = Infinity;
56
170
 
171
+ /**
172
+ * This array holds keycodes for controlling interactions.
173
+ *
174
+ * - When the first defined key is pressed, all mouse interactions (left, middle, right) performs orbiting.
175
+ * - When the second defined key is pressed, all mouse interactions (left, middle, right) performs zooming.
176
+ * - When the third defined key is pressed, all mouse interactions (left, middle, right) performs panning.
177
+ *
178
+ * Default is *KeyA, KeyS, KeyD* which represents A, S, D.
179
+ *
180
+ * @type {Array<string>}
181
+ */
57
182
  this.keys = [ 'KeyA' /*A*/, 'KeyS' /*S*/, 'KeyD' /*D*/ ];
58
183
 
184
+ /**
185
+ * This object contains references to the mouse actions used by the controls.
186
+ *
187
+ * ```js
188
+ * controls.mouseButtons = {
189
+ * LEFT: THREE.MOUSE.ROTATE,
190
+ * MIDDLE: THREE.MOUSE.DOLLY,
191
+ * RIGHT: THREE.MOUSE.PAN
192
+ * }
193
+ * ```
194
+ * @type {Object}
195
+ */
59
196
  this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };
60
- this.state = _STATE.NONE;
61
- this.keyState = _STATE.NONE;
62
197
 
198
+ /**
199
+ * The focus point of the controls.
200
+ *
201
+ * @type {Vector3}
202
+ */
63
203
  this.target = new Vector3();
64
204
 
65
205
  // internals
66
206
 
207
+ this.state = _STATE.NONE;
208
+ this.keyState = _STATE.NONE;
209
+
67
210
  this._lastPosition = new Vector3();
68
211
  this._lastZoom = 1;
69
212
  this._touchZoomDistanceStart = 0;
@@ -114,7 +257,7 @@ class TrackballControls extends Controls {
114
257
 
115
258
  if ( domElement !== null ) {
116
259
 
117
- this.connect();
260
+ this.connect( domElement );
118
261
 
119
262
  this.handleResize();
120
263
 
@@ -125,7 +268,9 @@ class TrackballControls extends Controls {
125
268
 
126
269
  }
127
270
 
128
- connect() {
271
+ connect( element ) {
272
+
273
+ super.connect( element );
129
274
 
130
275
  window.addEventListener( 'keydown', this._onKeyDown );
131
276
  window.addEventListener( 'keyup', this._onKeyUp );
@@ -161,6 +306,9 @@ class TrackballControls extends Controls {
161
306
 
162
307
  }
163
308
 
309
+ /**
310
+ * Must be called if the application window is resized.
311
+ */
164
312
  handleResize() {
165
313
 
166
314
  const box = this.domElement.getBoundingClientRect();
@@ -233,6 +381,9 @@ class TrackballControls extends Controls {
233
381
 
234
382
  }
235
383
 
384
+ /**
385
+ * Resets the controls to its initial state.
386
+ */
236
387
  reset() {
237
388
 
238
389
  this.state = _STATE.NONE;
@@ -32,13 +32,55 @@ const _unit = {
32
32
  Z: new Vector3( 0, 0, 1 )
33
33
  };
34
34
 
35
+ /**
36
+ * Fires if any type of change (object or property change) is performed. Property changes
37
+ * are separate events you can add event listeners to. The event type is "propertyname-changed".
38
+ *
39
+ * @event TransformControls#change
40
+ * @type {Object}
41
+ */
35
42
  const _changeEvent = { type: 'change' };
43
+
44
+ /**
45
+ * Fires if a pointer (mouse/touch) becomes active.
46
+ *
47
+ * @event TransformControls#mouseDown
48
+ * @type {Object}
49
+ */
36
50
  const _mouseDownEvent = { type: 'mouseDown', mode: null };
51
+
52
+ /**
53
+ * Fires if a pointer (mouse/touch) is no longer active.
54
+ *
55
+ * @event TransformControls#mouseUp
56
+ * @type {Object}
57
+ */
37
58
  const _mouseUpEvent = { type: 'mouseUp', mode: null };
59
+
60
+ /**
61
+ * Fires if the controlled 3D object is changed.
62
+ *
63
+ * @event TransformControls#objectChange
64
+ * @type {Object}
65
+ */
38
66
  const _objectChangeEvent = { type: 'objectChange' };
39
67
 
68
+ /**
69
+ * This class can be used to transform objects in 3D space by adapting a similar interaction model
70
+ * of DCC tools like Blender. Unlike other controls, it is not intended to transform the scene's camera.
71
+ *
72
+ * `TransformControls` expects that its attached 3D object is part of the scene graph.
73
+ *
74
+ * @augments Controls
75
+ */
40
76
  class TransformControls extends Controls {
41
77
 
78
+ /**
79
+ * Constructs a new controls instance.
80
+ *
81
+ * @param {Camera} camera - The camera of the rendered scene.
82
+ * @param {?HTMLDOMElement} domElement - The HTML element used for event listeners.
83
+ */
42
84
  constructor( camera, domElement = null ) {
43
85
 
44
86
  super( undefined, domElement );
@@ -96,25 +138,170 @@ class TransformControls extends Controls {
96
138
  // Setting the defined property will automatically trigger change event
97
139
  // Defined properties are passed down to gizmo and plane
98
140
 
141
+ /**
142
+ * The camera of the rendered scene.
143
+ *
144
+ * @name TransformControls#camera
145
+ * @type {Camera}
146
+ */
99
147
  defineProperty( 'camera', camera );
100
148
  defineProperty( 'object', undefined );
101
149
  defineProperty( 'enabled', true );
150
+
151
+ /**
152
+ * The current transformation axis.
153
+ *
154
+ * @name TransformControls#axis
155
+ * @type {string}
156
+ */
102
157
  defineProperty( 'axis', null );
158
+
159
+ /**
160
+ * The current transformation axis.
161
+ *
162
+ * @name TransformControls#mode
163
+ * @type {('translate'|'rotate'|'scale')}
164
+ * @default 'translate'
165
+ */
103
166
  defineProperty( 'mode', 'translate' );
167
+
168
+ /**
169
+ * By default, 3D objects are continuously translated. If you set this property to a numeric
170
+ * value (world units), you can define in which steps the 3D object should be translated.
171
+ *
172
+ * @name TransformControls#translationSnap
173
+ * @type {?number}
174
+ * @default null
175
+ */
104
176
  defineProperty( 'translationSnap', null );
177
+
178
+ /**
179
+ * By default, 3D objects are continuously rotated. If you set this property to a numeric
180
+ * value (radians), you can define in which steps the 3D object should be rotated.
181
+ *
182
+ * @name TransformControls#rotationSnap
183
+ * @type {?number}
184
+ * @default null
185
+ */
105
186
  defineProperty( 'rotationSnap', null );
187
+
188
+ /**
189
+ * By default, 3D objects are continuously scaled. If you set this property to a numeric
190
+ * value, you can define in which steps the 3D object should be scaled.
191
+ *
192
+ * @name TransformControls#scaleSnap
193
+ * @type {?number}
194
+ * @default null
195
+ */
106
196
  defineProperty( 'scaleSnap', null );
197
+
198
+ /**
199
+ * Defines in which coordinate space transformations should be performed.
200
+ *
201
+ * @name TransformControls#space
202
+ * @type {('world'|'local')}
203
+ * @default 'world'
204
+ */
107
205
  defineProperty( 'space', 'world' );
206
+
207
+ /**
208
+ * The size of the helper UI (axes/planes).
209
+ *
210
+ * @name TransformControls#size
211
+ * @type {number}
212
+ * @default 1
213
+ */
108
214
  defineProperty( 'size', 1 );
215
+
216
+ /**
217
+ * Whether dragging is currently performed or not.
218
+ *
219
+ * @name TransformControls#dragging
220
+ * @type {boolean}
221
+ * @readonly
222
+ * @default false
223
+ */
109
224
  defineProperty( 'dragging', false );
225
+
226
+ /**
227
+ * Whether the x-axis helper should be visible or not.
228
+ *
229
+ * @name TransformControls#showX
230
+ * @type {boolean}
231
+ * @default true
232
+ */
110
233
  defineProperty( 'showX', true );
234
+
235
+ /**
236
+ * Whether the y-axis helper should be visible or not.
237
+ *
238
+ * @name TransformControls#showY
239
+ * @type {boolean}
240
+ * @default true
241
+ */
111
242
  defineProperty( 'showY', true );
243
+
244
+ /**
245
+ * Whether the z-axis helper should be visible or not.
246
+ *
247
+ * @name TransformControls#showZ
248
+ * @type {boolean}
249
+ * @default true
250
+ */
112
251
  defineProperty( 'showZ', true );
252
+
253
+ /**
254
+ * The minimum allowed X position during translation.
255
+ *
256
+ * @name TransformControls#minX
257
+ * @type {number}
258
+ * @default -Infinity
259
+ */
113
260
  defineProperty( 'minX', - Infinity );
261
+
262
+ /**
263
+ * The maximum allowed X position during translation.
264
+ *
265
+ * @name TransformControls#maxX
266
+ * @type {number}
267
+ * @default Infinity
268
+ */
114
269
  defineProperty( 'maxX', Infinity );
270
+
271
+ /**
272
+ * The minimum allowed y position during translation.
273
+ *
274
+ * @name TransformControls#minY
275
+ * @type {number}
276
+ * @default -Infinity
277
+ */
115
278
  defineProperty( 'minY', - Infinity );
279
+
280
+ /**
281
+ * The maximum allowed Y position during translation.
282
+ *
283
+ * @name TransformControls#maxY
284
+ * @type {number}
285
+ * @default Infinity
286
+ */
116
287
  defineProperty( 'maxY', Infinity );
288
+
289
+ /**
290
+ * The minimum allowed z position during translation.
291
+ *
292
+ * @name TransformControls#minZ
293
+ * @type {number}
294
+ * @default -Infinity
295
+ */
117
296
  defineProperty( 'minZ', - Infinity );
297
+
298
+ /**
299
+ * The maximum allowed Z position during translation.
300
+ *
301
+ * @name TransformControls#maxZ
302
+ * @type {number}
303
+ * @default Infinity
304
+ */
118
305
  defineProperty( 'maxZ', Infinity );
119
306
 
120
307
  // Reusable utility variables
@@ -171,13 +358,15 @@ class TransformControls extends Controls {
171
358
 
172
359
  if ( domElement !== null ) {
173
360
 
174
- this.connect();
361
+ this.connect( domElement );
175
362
 
176
363
  }
177
364
 
178
365
  }
179
366
 
180
- connect() {
367
+ connect( element ) {
368
+
369
+ super.connect( element );
181
370
 
182
371
  this.domElement.addEventListener( 'pointerdown', this._onPointerDown );
183
372
  this.domElement.addEventListener( 'pointermove', this._onPointerHover );
@@ -198,6 +387,12 @@ class TransformControls extends Controls {
198
387
 
199
388
  }
200
389
 
390
+ /**
391
+ * Returns the visual representation of the controls. Add the helper to your scene to
392
+ * visually transform the attached 3D object.
393
+ *
394
+ * @return {TransformControlsRoot} The helper.
395
+ */
201
396
  getHelper() {
202
397
 
203
398
  return this._root;
@@ -550,7 +745,12 @@ class TransformControls extends Controls {
550
745
 
551
746
  }
552
747
 
553
- // Set current object
748
+ /**
749
+ * Sets the 3D object that should be transformed and ensures the controls UI is visible.
750
+ *
751
+ * @param {Object3D} object - The 3D object that should be transformed.
752
+ * @return {TransformControls} A reference to this controls.
753
+ */
554
754
  attach( object ) {
555
755
 
556
756
  this.object = object;
@@ -560,7 +760,11 @@ class TransformControls extends Controls {
560
760
 
561
761
  }
562
762
 
563
- // Detach from object
763
+ /**
764
+ * Removes the current 3D object from the controls and makes the helper UI invisible.
765
+ *
766
+ * @return {TransformControls} A reference to this controls.
767
+ */
564
768
  detach() {
565
769
 
566
770
  this.object = undefined;
@@ -572,6 +776,9 @@ class TransformControls extends Controls {
572
776
 
573
777
  }
574
778
 
779
+ /**
780
+ * Resets the object's position, rotation and scale to when the current transform began.
781
+ */
575
782
  reset() {
576
783
 
577
784
  if ( ! this.enabled ) return;
@@ -591,50 +798,89 @@ class TransformControls extends Controls {
591
798
 
592
799
  }
593
800
 
801
+ /**
802
+ * Returns the raycaster that is used for user interaction. This object is shared between all
803
+ * instances of `TransformControls`.
804
+ *
805
+ * @returns {Raycaster} The internal raycaster.
806
+ */
594
807
  getRaycaster() {
595
808
 
596
809
  return _raycaster;
597
810
 
598
811
  }
599
812
 
600
- // TODO: deprecate
601
-
813
+ /**
814
+ * Returns the transformation mode.
815
+ *
816
+ * @returns {'translate'|'rotate'|'scale'} The transformation mode.
817
+ */
602
818
  getMode() {
603
819
 
604
820
  return this.mode;
605
821
 
606
822
  }
607
823
 
824
+ /**
825
+ * Sets the given transformation mode.
826
+ *
827
+ * @param {'translate'|'rotate'|'scale'} mode - The transformation mode to set.
828
+ */
608
829
  setMode( mode ) {
609
830
 
610
831
  this.mode = mode;
611
832
 
612
833
  }
613
834
 
835
+ /**
836
+ * Sets the translation snap.
837
+ *
838
+ * @param {?number} translationSnap - The translation snap to set.
839
+ */
614
840
  setTranslationSnap( translationSnap ) {
615
841
 
616
842
  this.translationSnap = translationSnap;
617
843
 
618
844
  }
619
845
 
846
+ /**
847
+ * Sets the rotation snap.
848
+ *
849
+ * @param {?number} rotationSnap - The rotation snap to set.
850
+ */
620
851
  setRotationSnap( rotationSnap ) {
621
852
 
622
853
  this.rotationSnap = rotationSnap;
623
854
 
624
855
  }
625
856
 
857
+ /**
858
+ * Sets the scale snap.
859
+ *
860
+ * @param {?number} scaleSnap - The scale snap to set.
861
+ */
626
862
  setScaleSnap( scaleSnap ) {
627
863
 
628
864
  this.scaleSnap = scaleSnap;
629
865
 
630
866
  }
631
867
 
868
+ /**
869
+ * Sets the size of the helper UI.
870
+ *
871
+ * @param {number} size - The size to set.
872
+ */
632
873
  setSize( size ) {
633
874
 
634
875
  this.size = size;
635
876
 
636
877
  }
637
878
 
879
+ /**
880
+ * Sets the coordinate space in which transformations are applied.
881
+ *
882
+ * @param {'world'|'local'} space - The space to set.
883
+ */
638
884
  setSpace( space ) {
639
885
 
640
886
  this.space = space;