@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
@@ -11,16 +11,30 @@ import {
11
11
  MathUtils
12
12
  } from 'three';
13
13
 
14
- // OrbitControls performs orbiting, dollying (zooming), and panning.
15
- // Unlike TrackballControls, it maintains the "up" direction object.up (+Y by default).
16
- //
17
- // Orbit - left mouse / touch: one-finger move
18
- // Zoom - middle mouse, or mousewheel / touch: two-finger spread or squish
19
- // Pan - right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move
20
-
14
+ /**
15
+ * Fires when the camera has been transformed by the controls.
16
+ *
17
+ * @event OrbitControls#change
18
+ * @type {Object}
19
+ */
21
20
  const _changeEvent = { type: 'change' };
21
+
22
+ /**
23
+ * Fires when an interaction was initiated.
24
+ *
25
+ * @event OrbitControls#start
26
+ * @type {Object}
27
+ */
22
28
  const _startEvent = { type: 'start' };
29
+
30
+ /**
31
+ * Fires when an interaction has finished.
32
+ *
33
+ * @event OrbitControls#end
34
+ * @type {Object}
35
+ */
23
36
  const _endEvent = { type: 'end' };
37
+
24
38
  const _ray = new Ray();
25
39
  const _plane = new Plane();
26
40
  const _TILT_LIMIT = Math.cos( 70 * MathUtils.DEG2RAD );
@@ -40,84 +54,340 @@ const _STATE = {
40
54
  };
41
55
  const _EPS = 0.000001;
42
56
 
57
+
58
+ /**
59
+ * Orbit controls allow the camera to orbit around a target.
60
+ *
61
+ * OrbitControls performs orbiting, dollying (zooming), and panning. Unlike {@link TrackballControls},
62
+ * it maintains the "up" direction `object.up` (+Y by default).
63
+ *
64
+ * - Orbit: Left mouse / touch: one-finger move.
65
+ * - Zoom: Middle mouse, or mousewheel / touch: two-finger spread or squish.
66
+ * - Pan: Right mouse, or left mouse + ctrl/meta/shiftKey, or arrow keys / touch: two-finger move.
67
+ *
68
+ * ```js
69
+ * const controls = new OrbitControls( camera, renderer.domElement );
70
+ *
71
+ * // controls.update() must be called after any manual changes to the camera's transform
72
+ * camera.position.set( 0, 20, 100 );
73
+ * controls.update();
74
+ *
75
+ * function animate() {
76
+ *
77
+ * // required if controls.enableDamping or controls.autoRotate are set to true
78
+ * controls.update();
79
+ *
80
+ * renderer.render( scene, camera );
81
+ *
82
+ * }
83
+ * ```
84
+ *
85
+ * @augments Controls
86
+ */
43
87
  class OrbitControls extends Controls {
44
88
 
89
+ /**
90
+ * Constructs a new controls instance.
91
+ *
92
+ * @param {Object3D} object - The object that is managed by the controls.
93
+ * @param {?HTMLDOMElement} domElement - The HTML element used for event listeners.
94
+ */
45
95
  constructor( object, domElement = null ) {
46
96
 
47
97
  super( object, domElement );
48
98
 
49
99
  this.state = _STATE.NONE;
50
100
 
51
- // Set to false to disable this control
52
- this.enabled = true;
53
-
54
- // "target" sets the location of focus, where the object orbits around
101
+ /**
102
+ * The focus point of the controls, the `object` orbits around this.
103
+ * It can be updated manually at any point to change the focus of the controls.
104
+ *
105
+ * @type {Vector3}
106
+ */
55
107
  this.target = new Vector3();
56
108
 
57
- // Sets the 3D cursor (similar to Blender), from which the maxTargetRadius takes effect
109
+ /**
110
+ * The focus point of the `minTargetRadius` and `maxTargetRadius` limits.
111
+ * It can be updated manually at any point to change the center of interest
112
+ * for the `target`.
113
+ *
114
+ * @type {Vector3}
115
+ */
58
116
  this.cursor = new Vector3();
59
117
 
60
- // How far you can dolly in and out ( PerspectiveCamera only )
118
+ /**
119
+ * How far you can dolly in (perspective camera only).
120
+ *
121
+ * @type {number}
122
+ * @default 0
123
+ */
61
124
  this.minDistance = 0;
125
+
126
+ /**
127
+ * How far you can dolly out (perspective camera only).
128
+ *
129
+ * @type {number}
130
+ * @default Infinity
131
+ */
62
132
  this.maxDistance = Infinity;
63
133
 
64
- // How far you can zoom in and out ( OrthographicCamera only )
134
+ /**
135
+ * How far you can zoom in (orthographic camera only).
136
+ *
137
+ * @type {number}
138
+ * @default 0
139
+ */
65
140
  this.minZoom = 0;
141
+
142
+ /**
143
+ * How far you can zoom out (orthographic camera only).
144
+ *
145
+ * @type {number}
146
+ * @default Infinity
147
+ */
66
148
  this.maxZoom = Infinity;
67
149
 
68
- // Limit camera target within a spherical area around the cursor
150
+ /**
151
+ * How close you can get the target to the 3D `cursor`.
152
+ *
153
+ * @type {number}
154
+ * @default 0
155
+ */
69
156
  this.minTargetRadius = 0;
70
- this.maxTargetRadius = Infinity;
71
-
72
- // How far you can orbit vertically, upper and lower limits.
73
- // Range is 0 to Math.PI radians.
74
- this.minPolarAngle = 0; // radians
75
- this.maxPolarAngle = Math.PI; // radians
76
157
 
77
- // How far you can orbit horizontally, upper and lower limits.
78
- // If set, the interval [ min, max ] must be a sub-interval of [ - 2 PI, 2 PI ], with ( max - min < 2 PI )
79
- this.minAzimuthAngle = - Infinity; // radians
80
- this.maxAzimuthAngle = Infinity; // radians
158
+ /**
159
+ * How far you can move the target from the 3D `cursor`.
160
+ *
161
+ * @type {number}
162
+ * @default Infinity
163
+ */
164
+ this.maxTargetRadius = Infinity;
81
165
 
82
- // Set to true to enable damping (inertia)
83
- // If damping is enabled, you must call controls.update() in your animation loop
166
+ /**
167
+ * How far you can orbit vertically, lower limit. Range is `[0, Math.PI]` radians.
168
+ *
169
+ * @type {number}
170
+ * @default 0
171
+ */
172
+ this.minPolarAngle = 0;
173
+
174
+ /**
175
+ * How far you can orbit vertically, upper limit. Range is `[0, Math.PI]` radians.
176
+ *
177
+ * @type {number}
178
+ * @default Math.PI
179
+ */
180
+ this.maxPolarAngle = Math.PI;
181
+
182
+ /**
183
+ * How far you can orbit horizontally, lower limit. If set, the interval `[ min, max ]`
184
+ * must be a sub-interval of `[ - 2 PI, 2 PI ]`, with `( max - min < 2 PI )`.
185
+ *
186
+ * @type {number}
187
+ * @default -Infinity
188
+ */
189
+ this.minAzimuthAngle = - Infinity;
190
+
191
+ /**
192
+ * How far you can orbit horizontally, upper limit. If set, the interval `[ min, max ]`
193
+ * must be a sub-interval of `[ - 2 PI, 2 PI ]`, with `( max - min < 2 PI )`.
194
+ *
195
+ * @type {number}
196
+ * @default -Infinity
197
+ */
198
+ this.maxAzimuthAngle = Infinity;
199
+
200
+ /**
201
+ * Set to `true` to enable damping (inertia), which can be used to give a sense of weight
202
+ * to the controls. Note that if this is enabled, you must call `update()` in your animation
203
+ * loop.
204
+ *
205
+ * @type {boolean}
206
+ * @default false
207
+ */
84
208
  this.enableDamping = false;
209
+
210
+ /**
211
+ * The damping inertia used if `enableDamping` is set to `true`.
212
+ *
213
+ * Note that for this to work, you must call `update()` in your animation loop.
214
+ *
215
+ * @type {number}
216
+ * @default 0.05
217
+ */
85
218
  this.dampingFactor = 0.05;
86
219
 
87
- // This option actually enables dollying in and out; left as "zoom" for backwards compatibility.
88
- // Set to false to disable zooming
220
+ /**
221
+ * Enable or disable zooming (dollying) of the camera.
222
+ *
223
+ * @type {boolean}
224
+ * @default true
225
+ */
89
226
  this.enableZoom = true;
227
+
228
+ /**
229
+ * Speed of zooming / dollying.
230
+ *
231
+ * @type {number}
232
+ * @default 1
233
+ */
90
234
  this.zoomSpeed = 1.0;
91
235
 
92
- // Set to false to disable rotating
236
+ /**
237
+ * Enable or disable horizontal and vertical rotation of the camera.
238
+ *
239
+ * Note that it is possible to disable a single axis by setting the min and max of the
240
+ * `minPolarAngle` or `minAzimuthAngle` to the same value, which will cause the vertical
241
+ * or horizontal rotation to be fixed at that value.
242
+ *
243
+ * @type {boolean}
244
+ * @default true
245
+ */
93
246
  this.enableRotate = true;
247
+
248
+ /**
249
+ * Speed of rotation.
250
+ *
251
+ * @type {number}
252
+ * @default 1
253
+ */
94
254
  this.rotateSpeed = 1.0;
255
+
256
+ /**
257
+ * How fast to rotate the camera when the keyboard is used.
258
+ *
259
+ * @type {number}
260
+ * @default 1
261
+ */
95
262
  this.keyRotateSpeed = 1.0;
96
263
 
97
- // Set to false to disable panning
264
+ /**
265
+ * Enable or disable camera panning.
266
+ *
267
+ * @type {boolean}
268
+ * @default true
269
+ */
98
270
  this.enablePan = true;
271
+
272
+ /**
273
+ * Speed of panning.
274
+ *
275
+ * @type {number}
276
+ * @default 1
277
+ */
99
278
  this.panSpeed = 1.0;
100
- this.screenSpacePanning = true; // if false, pan orthogonal to world-space direction camera.up
101
- this.keyPanSpeed = 7.0; // pixels moved per arrow key push
279
+
280
+ /**
281
+ * Defines how the camera's position is translated when panning. If `true`, the camera pans
282
+ * in screen space. Otherwise, the camera pans in the plane orthogonal to the camera's up
283
+ * direction.
284
+ *
285
+ * @type {boolean}
286
+ * @default true
287
+ */
288
+ this.screenSpacePanning = true;
289
+
290
+ /**
291
+ * How fast to pan the camera when the keyboard is used in
292
+ * pixels per keypress.
293
+ *
294
+ * @type {number}
295
+ * @default 7
296
+ */
297
+ this.keyPanSpeed = 7.0;
298
+
299
+ /**
300
+ * Setting this property to `true` allows to zoom to the cursor's position.
301
+ *
302
+ * @type {boolean}
303
+ * @default false
304
+ */
102
305
  this.zoomToCursor = false;
103
306
 
104
- // Set to true to automatically rotate around the target
105
- // If auto-rotate is enabled, you must call controls.update() in your animation loop
307
+ /**
308
+ * Set to true to automatically rotate around the target
309
+ *
310
+ * Note that if this is enabled, you must call `update()` in your animation loop.
311
+ * If you want the auto-rotate speed to be independent of the frame rate (the refresh
312
+ * rate of the display), you must pass the time `deltaTime`, in seconds, to `update()`.
313
+ *
314
+ * @type {boolean}
315
+ * @default false
316
+ */
106
317
  this.autoRotate = false;
107
- this.autoRotateSpeed = 2.0; // 30 seconds per orbit when fps is 60
108
318
 
109
- // The four arrow keys
319
+ /**
320
+ * How fast to rotate around the target if `autoRotate` is `true`. The default equates to 30 seconds
321
+ * per orbit at 60fps.
322
+ *
323
+ * Note that if `autoRotate` is enabled, you must call `update()` in your animation loop.
324
+ *
325
+ * @type {number}
326
+ * @default 2
327
+ */
328
+ this.autoRotateSpeed = 2.0;
329
+
330
+ /**
331
+ * This object contains references to the keycodes for controlling camera panning.
332
+ *
333
+ * ```js
334
+ * controls.keys = {
335
+ * LEFT: 'ArrowLeft', //left arrow
336
+ * UP: 'ArrowUp', // up arrow
337
+ * RIGHT: 'ArrowRight', // right arrow
338
+ * BOTTOM: 'ArrowDown' // down arrow
339
+ * }
340
+ * ```
341
+ * @type {Object}
342
+ */
110
343
  this.keys = { LEFT: 'ArrowLeft', UP: 'ArrowUp', RIGHT: 'ArrowRight', BOTTOM: 'ArrowDown' };
111
344
 
112
- // Mouse buttons
345
+ /**
346
+ * This object contains references to the mouse actions used by the controls.
347
+ *
348
+ * ```js
349
+ * controls.mouseButtons = {
350
+ * LEFT: THREE.MOUSE.ROTATE,
351
+ * MIDDLE: THREE.MOUSE.DOLLY,
352
+ * RIGHT: THREE.MOUSE.PAN
353
+ * }
354
+ * ```
355
+ * @type {Object}
356
+ */
113
357
  this.mouseButtons = { LEFT: MOUSE.ROTATE, MIDDLE: MOUSE.DOLLY, RIGHT: MOUSE.PAN };
114
358
 
115
- // Touch fingers
359
+ /**
360
+ * This object contains references to the touch actions used by the controls.
361
+ *
362
+ * ```js
363
+ * controls.mouseButtons = {
364
+ * ONE: THREE.TOUCH.ROTATE,
365
+ * TWO: THREE.TOUCH.DOLLY_PAN
366
+ * }
367
+ * ```
368
+ * @type {Object}
369
+ */
116
370
  this.touches = { ONE: TOUCH.ROTATE, TWO: TOUCH.DOLLY_PAN };
117
371
 
118
- // for reset
372
+ /**
373
+ * Used internally by `saveState()` and `reset()`.
374
+ *
375
+ * @type {Vector3}
376
+ */
119
377
  this.target0 = this.target.clone();
378
+
379
+ /**
380
+ * Used internally by `saveState()` and `reset()`.
381
+ *
382
+ * @type {Vector3}
383
+ */
120
384
  this.position0 = this.object.position.clone();
385
+
386
+ /**
387
+ * Used internally by `saveState()` and `reset()`.
388
+ *
389
+ * @type {number}
390
+ */
121
391
  this.zoom0 = this.object.zoom;
122
392
 
123
393
  // the target DOM element for key events
@@ -183,7 +453,7 @@ class OrbitControls extends Controls {
183
453
 
184
454
  if ( this.domElement !== null ) {
185
455
 
186
- this.connect();
456
+ this.connect( this.domElement );
187
457
 
188
458
  }
189
459
 
@@ -191,7 +461,9 @@ class OrbitControls extends Controls {
191
461
 
192
462
  }
193
463
 
194
- connect() {
464
+ connect( element ) {
465
+
466
+ super.connect( element );
195
467
 
196
468
  this.domElement.addEventListener( 'pointerdown', this._onPointerDown );
197
469
  this.domElement.addEventListener( 'pointercancel', this._onPointerUp );
@@ -231,24 +503,45 @@ class OrbitControls extends Controls {
231
503
 
232
504
  }
233
505
 
506
+ /**
507
+ * Get the current vertical rotation, in radians.
508
+ *
509
+ * @return {number} The current vertical rotation, in radians.
510
+ */
234
511
  getPolarAngle() {
235
512
 
236
513
  return this._spherical.phi;
237
514
 
238
515
  }
239
516
 
517
+ /**
518
+ * Get the current horizontal rotation, in radians.
519
+ *
520
+ * @return {number} The current horizontal rotation, in radians.
521
+ */
240
522
  getAzimuthalAngle() {
241
523
 
242
524
  return this._spherical.theta;
243
525
 
244
526
  }
245
527
 
528
+ /**
529
+ * Returns the distance from the camera to the target.
530
+ *
531
+ * @return {number} The distance from the camera to the target.
532
+ */
246
533
  getDistance() {
247
534
 
248
535
  return this.object.position.distanceTo( this.target );
249
536
 
250
537
  }
251
538
 
539
+ /**
540
+ * Adds key event listeners to the given DOM element.
541
+ * `window` is a recommended argument for using this method.
542
+ *
543
+ * @param {HTMLDOMElement} domElement - The DOM element
544
+ */
252
545
  listenToKeyEvents( domElement ) {
253
546
 
254
547
  domElement.addEventListener( 'keydown', this._onKeyDown );
@@ -256,6 +549,9 @@ class OrbitControls extends Controls {
256
549
 
257
550
  }
258
551
 
552
+ /**
553
+ * Removes the key event listener previously defined with `listenToKeyEvents()`.
554
+ */
259
555
  stopListenToKeyEvents() {
260
556
 
261
557
  if ( this._domElementKeyEvents !== null ) {
@@ -267,6 +563,9 @@ class OrbitControls extends Controls {
267
563
 
268
564
  }
269
565
 
566
+ /**
567
+ * Save the current state of the controls. This can later be recovered with `reset()`.
568
+ */
270
569
  saveState() {
271
570
 
272
571
  this.target0.copy( this.target );
@@ -275,6 +574,10 @@ class OrbitControls extends Controls {
275
574
 
276
575
  }
277
576
 
577
+ /**
578
+ * Reset the controls to their state from either the last time the `saveState()`
579
+ * was called, or the initial state.
580
+ */
278
581
  reset() {
279
582
 
280
583
  this.target.copy( this.target0 );
@@ -7,25 +7,98 @@ import {
7
7
  const _euler = new Euler( 0, 0, 0, 'YXZ' );
8
8
  const _vector = new Vector3();
9
9
 
10
+ /**
11
+ * Fires when the user moves the mouse.
12
+ *
13
+ * @event PointerLockControls#change
14
+ * @type {Object}
15
+ */
10
16
  const _changeEvent = { type: 'change' };
17
+
18
+ /**
19
+ * Fires when the pointer lock status is "locked" (in other words: the mouse is captured).
20
+ *
21
+ * @event PointerLockControls#lock
22
+ * @type {Object}
23
+ */
11
24
  const _lockEvent = { type: 'lock' };
25
+
26
+ /**
27
+ * Fires when the pointer lock status is "unlocked" (in other words: the mouse is not captured anymore).
28
+ *
29
+ * @event PointerLockControls#unlock
30
+ * @type {Object}
31
+ */
12
32
  const _unlockEvent = { type: 'unlock' };
13
33
 
14
34
  const _PI_2 = Math.PI / 2;
15
35
 
36
+ /**
37
+ * The implementation of this class is based on the [Pointer Lock API]{@link https://developer.mozilla.org/en-US/docs/Web/API/Pointer_Lock_API}.
38
+ * `PointerLockControls` is a perfect choice for first person 3D games.
39
+ *
40
+ * ```js
41
+ * const controls = new PointerLockControls( camera, document.body );
42
+ *
43
+ * // add event listener to show/hide a UI (e.g. the game's menu)
44
+ * controls.addEventListener( 'lock', function () {
45
+ *
46
+ * menu.style.display = 'none';
47
+ *
48
+ * } );
49
+ *
50
+ * controls.addEventListener( 'unlock', function () {
51
+ *
52
+ * menu.style.display = 'block';
53
+ *
54
+ * } );
55
+ * ```
56
+ *
57
+ * @augments Controls
58
+ */
16
59
  class PointerLockControls extends Controls {
17
60
 
61
+ /**
62
+ * Constructs a new controls instance.
63
+ *
64
+ * @param {Camera} camera - The camera that is managed by the controls.
65
+ * @param {?HTMLDOMElement} domElement - The HTML element used for event listeners.
66
+ */
18
67
  constructor( camera, domElement = null ) {
19
68
 
20
69
  super( camera, domElement );
21
70
 
71
+ /**
72
+ * Whether the controls are locked or not.
73
+ *
74
+ * @type {boolean}
75
+ * @readonly
76
+ * @default false
77
+ */
22
78
  this.isLocked = false;
23
79
 
24
- // Set to constrain the pitch of the camera
25
- // Range is 0 to Math.PI radians
26
- this.minPolarAngle = 0; // radians
27
- this.maxPolarAngle = Math.PI; // radians
28
-
80
+ /**
81
+ * Camera pitch, lower limit. Range is '[0, Math.PI]' in radians.
82
+ *
83
+ * @type {number}
84
+ * @default 0
85
+ */
86
+ this.minPolarAngle = 0;
87
+
88
+ /**
89
+ * Camera pitch, upper limit. Range is '[0, Math.PI]' in radians.
90
+ *
91
+ * @type {number}
92
+ * @default Math.PI
93
+ */
94
+ this.maxPolarAngle = Math.PI;
95
+
96
+ /**
97
+ * Multiplier for how much the pointer movement influences the camera rotation.
98
+ *
99
+ * @type {number}
100
+ * @default 1
101
+ */
29
102
  this.pointerSpeed = 1.0;
30
103
 
31
104
  // event listeners
@@ -36,13 +109,15 @@ class PointerLockControls extends Controls {
36
109
 
37
110
  if ( this.domElement !== null ) {
38
111
 
39
- this.connect();
112
+ this.connect( this.domElement );
40
113
 
41
114
  }
42
115
 
43
116
  }
44
117
 
45
- connect() {
118
+ connect( element ) {
119
+
120
+ super.connect( element );
46
121
 
47
122
  this.domElement.ownerDocument.addEventListener( 'mousemove', this._onMouseMove );
48
123
  this.domElement.ownerDocument.addEventListener( 'pointerlockchange', this._onPointerlockChange );
@@ -72,12 +147,23 @@ class PointerLockControls extends Controls {
72
147
 
73
148
  }
74
149
 
150
+ /**
151
+ * Returns the look direction of the camera.
152
+ *
153
+ * @param {Vector3} v - The target vector that is used to store the method's result.
154
+ * @return {Vector3} The normalized direction vector.
155
+ */
75
156
  getDirection( v ) {
76
157
 
77
158
  return v.set( 0, 0, - 1 ).applyQuaternion( this.object.quaternion );
78
159
 
79
160
  }
80
161
 
162
+ /**
163
+ * Moves the camera forward parallel to the xz-plane. Assumes camera.up is y-up.
164
+ *
165
+ * @param {number} distance - The signed distance.
166
+ */
81
167
  moveForward( distance ) {
82
168
 
83
169
  if ( this.enabled === false ) return;
@@ -95,6 +181,11 @@ class PointerLockControls extends Controls {
95
181
 
96
182
  }
97
183
 
184
+ /**
185
+ * Moves the camera sidewards parallel to the xz-plane.
186
+ *
187
+ * @param {number} distance - The signed distance.
188
+ */
98
189
  moveRight( distance ) {
99
190
 
100
191
  if ( this.enabled === false ) return;
@@ -107,12 +198,23 @@ class PointerLockControls extends Controls {
107
198
 
108
199
  }
109
200
 
110
- lock() {
201
+ /**
202
+ * Activates the pointer lock.
203
+ *
204
+ * @param {boolean} [unadjustedMovement=false] - Disables OS-level adjustment for mouse acceleration, and accesses raw mouse input instead.
205
+ * Setting it to true will disable mouse acceleration.
206
+ */
207
+ lock( unadjustedMovement = false ) {
111
208
 
112
- this.domElement.requestPointerLock();
209
+ this.domElement.requestPointerLock( {
210
+ unadjustedMovement
211
+ } );
113
212
 
114
213
  }
115
214
 
215
+ /**
216
+ * Exits the pointer lock.
217
+ */
116
218
  unlock() {
117
219
 
118
220
  this.domElement.ownerDocument.exitPointerLock();