@plastic-software/three 0.174.0 → 0.175.0

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 (544) hide show
  1. package/build/three.cjs +10655 -1446
  2. package/build/three.core.js +9626 -1094
  3. package/build/three.core.min.js +1 -1
  4. package/build/three.module.js +834 -157
  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 +1429 -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 +53 -0
  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/UniformsLib.js +1 -4
  512. package/src/renderers/shaders/UniformsUtils.js +1 -3
  513. package/src/renderers/webgl/WebGLBackground.js +4 -2
  514. package/src/renderers/webgl/WebGLState.js +9 -9
  515. package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
  516. package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
  517. package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
  518. package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
  519. package/src/renderers/webgpu/WebGPUBackend.js +128 -87
  520. package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
  521. package/src/renderers/webgpu/WebGPURenderer.js +17 -11
  522. package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
  523. package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
  524. package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
  525. package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
  526. package/src/renderers/webxr/WebXRController.js +87 -2
  527. package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
  528. package/src/renderers/webxr/WebXRManager.js +173 -1
  529. package/src/scenes/Scene.js +2 -1
  530. package/src/textures/CanvasTexture.js +28 -0
  531. package/src/textures/CompressedArrayTexture.js +57 -0
  532. package/src/textures/CompressedCubeTexture.js +29 -0
  533. package/src/textures/CompressedTexture.js +64 -6
  534. package/src/textures/CubeTexture.js +52 -4
  535. package/src/textures/Data3DTexture.js +77 -0
  536. package/src/textures/DataArrayTexture.js +93 -0
  537. package/src/textures/DataTexture.js +65 -0
  538. package/src/textures/DepthTexture.js +59 -9
  539. package/src/textures/FramebufferTexture.js +62 -0
  540. package/src/textures/Source.js +69 -0
  541. package/src/textures/Texture.js +5 -5
  542. package/src/textures/VideoFrameTexture.js +43 -6
  543. package/src/textures/VideoTexture.js +49 -4
  544. package/examples/jsm/geometries/ParametricGeometries.js +0 -254
@@ -7,11 +7,7 @@ import {
7
7
  const _pointer = new Vector2();
8
8
  const _event = { type: '', data: _pointer };
9
9
 
10
- // TODO: Dispatch pointerevents too
11
-
12
- /**
13
- * The XR events that are mapped to "standard" pointer events
14
- */
10
+ // The XR events that are mapped to "standard" pointer events.
15
11
  const _events = {
16
12
  'move': 'mousemove',
17
13
  'select': 'click',
@@ -21,17 +17,58 @@ const _events = {
21
17
 
22
18
  const _raycaster = new Raycaster();
23
19
 
20
+ /**
21
+ * This class can be used to group 3D objects in an interactive group.
22
+ * The group itself can listen to Pointer, Mouse or XR controller events to
23
+ * detect selections of descendant 3D objects. If a 3D object is selected,
24
+ * the respective event is going to dispatched to it.
25
+ *
26
+ * ```js
27
+ * const group = new InteractiveGroup();
28
+ * group.listenToPointerEvents( renderer, camera );
29
+ * group.listenToXRControllerEvents( controller1 );
30
+ * group.listenToXRControllerEvents( controller2 );
31
+ * scene.add( group );
32
+ *
33
+ * // now add objects that should be interactive
34
+ * group.add( mesh1, mesh2, mesh3 );
35
+ * ```
36
+ * @augments Group
37
+ */
24
38
  class InteractiveGroup extends Group {
25
39
 
26
40
  constructor() {
27
41
 
28
42
  super();
29
43
 
44
+ /**
45
+ * The internal raycaster.
46
+ *
47
+ * @type {Raycaster}
48
+ */
30
49
  this.raycaster = new Raycaster();
31
50
 
51
+ /**
52
+ * The internal raycaster.
53
+ *
54
+ * @type {?HTMLDOMElement}
55
+ * @default null
56
+ */
32
57
  this.element = null;
58
+
59
+ /**
60
+ * The camera used for raycasting.
61
+ *
62
+ * @type {?Camera}
63
+ * @default null
64
+ */
33
65
  this.camera = null;
34
66
 
67
+ /**
68
+ * An array of XR controllers.
69
+ *
70
+ * @type {Array<Group>}
71
+ */
35
72
  this.controllers = [];
36
73
 
37
74
  this._onPointerEvent = this.onPointerEvent.bind( this );
@@ -92,6 +129,14 @@ class InteractiveGroup extends Group {
92
129
 
93
130
  }
94
131
 
132
+ /**
133
+ * Calling this method makes sure the interactive group listens to Pointer and Mouse events.
134
+ * The target is the `domElement` of the given renderer. The camera is required for the internal
135
+ * raycasting so 3D objects can be detected based on the events.
136
+ *
137
+ * @param {(WebGPURenderer|WebGLRenderer)} renderer - The renderer.
138
+ * @param {Camera} camera - The camera.
139
+ */
95
140
  listenToPointerEvents( renderer, camera ) {
96
141
 
97
142
  this.camera = camera;
@@ -107,6 +152,9 @@ class InteractiveGroup extends Group {
107
152
 
108
153
  }
109
154
 
155
+ /**
156
+ * Disconnects this interactive group from all Pointer and Mouse Events.
157
+ */
110
158
  disconnectionPointerEvents() {
111
159
 
112
160
  if ( this.element !== null ) {
@@ -123,6 +171,12 @@ class InteractiveGroup extends Group {
123
171
 
124
172
  }
125
173
 
174
+ /**
175
+ * Calling this method makes sure the interactive group listens to events of
176
+ * the given XR controller.
177
+ *
178
+ * @param {Group} controller - The XR controller.
179
+ */
126
180
  listenToXRControllerEvents( controller ) {
127
181
 
128
182
  this.controllers.push( controller );
@@ -133,6 +187,9 @@ class InteractiveGroup extends Group {
133
187
 
134
188
  }
135
189
 
190
+ /**
191
+ * Disconnects this interactive group from all XR controllers.
192
+ */
136
193
  disconnectXrControllerEvents() {
137
194
 
138
195
  for ( const controller of this.controllers ) {
@@ -146,6 +203,9 @@ class InteractiveGroup extends Group {
146
203
 
147
204
  }
148
205
 
206
+ /**
207
+ * Disconnects this interactive group from the DOM and all XR controllers.
208
+ */
149
209
  disconnect() {
150
210
 
151
211
  this.disconnectionPointerEvents();
@@ -5,10 +5,6 @@ import {
5
5
  Quaternion,
6
6
  } from 'three';
7
7
 
8
- /**
9
- * This is a class to check whether objects are in a selection area in 3D space
10
- */
11
-
12
8
  const _frustum = new Frustum();
13
9
  const _center = new Vector3();
14
10
 
@@ -33,34 +29,103 @@ const _matrix = new Matrix4();
33
29
  const _quaternion = new Quaternion();
34
30
  const _scale = new Vector3();
35
31
 
32
+ /**
33
+ * This class can be used to select 3D objects in a scene with a selection box.
34
+ * It is recommended to visualize the selected area with the help of {@link SelectionHelper}.
35
+ *
36
+ * ```js
37
+ * const selectionBox = new SelectionBox( camera, scene );
38
+ * const selectedObjects = selectionBox.select( startPoint, endPoint );
39
+ * ```
40
+ */
36
41
  class SelectionBox {
37
42
 
43
+ /**
44
+ * Constructs a new selection box.
45
+ *
46
+ * @param {Camera} camera - The camera the scene is rendered with.
47
+ * @param {Scene} scene - The scene.
48
+ * @param {number} [deep=Number.MAX_VALUE] - How deep the selection frustum of perspective cameras should extend.
49
+ */
38
50
  constructor( camera, scene, deep = Number.MAX_VALUE ) {
39
51
 
52
+ /**
53
+ * The camera the scene is rendered with.
54
+ *
55
+ * @type {Camera}
56
+ */
40
57
  this.camera = camera;
58
+
59
+ /**
60
+ * The camera the scene is rendered with.
61
+ *
62
+ * @type {Scene}
63
+ */
41
64
  this.scene = scene;
65
+
66
+ /**
67
+ * The start point of the selection.
68
+ *
69
+ * @type {Vector3}
70
+ */
42
71
  this.startPoint = new Vector3();
72
+
73
+ /**
74
+ * The end point of the selection.
75
+ *
76
+ * @type {Vector3}
77
+ */
43
78
  this.endPoint = new Vector3();
79
+
80
+ /**
81
+ * The selected 3D objects.
82
+ *
83
+ * @type {Array<Object3D>}
84
+ */
44
85
  this.collection = [];
86
+
87
+ /**
88
+ * The selected instance IDs of instanced meshes.
89
+ *
90
+ * @type {Object}
91
+ */
45
92
  this.instances = {};
93
+
94
+ /**
95
+ * How deep the selection frustum of perspective cameras should extend.
96
+ *
97
+ * @type {number}
98
+ * @default Number.MAX_VALUE
99
+ */
46
100
  this.deep = deep;
47
101
 
48
102
  }
49
103
 
104
+ /**
105
+ * This method selects 3D objects in the scene based on the given start
106
+ * and end point. If no parameters are provided, the method uses the start
107
+ * and end values of the respective members.
108
+ *
109
+ * @param {Vector3} [startPoint] - The start point.
110
+ * @param {Vector3} [endPoint] - The end point.
111
+ * @return {Array<Object3D>} The selected 3D objects.
112
+ */
50
113
  select( startPoint, endPoint ) {
51
114
 
52
115
  this.startPoint = startPoint || this.startPoint;
53
116
  this.endPoint = endPoint || this.endPoint;
54
117
  this.collection = [];
55
118
 
56
- this.updateFrustum( this.startPoint, this.endPoint );
57
- this.searchChildInFrustum( _frustum, this.scene );
119
+ this._updateFrustum( this.startPoint, this.endPoint );
120
+ this._searchChildInFrustum( _frustum, this.scene );
58
121
 
59
122
  return this.collection;
60
123
 
61
124
  }
62
125
 
63
- updateFrustum( startPoint, endPoint ) {
126
+ // private
127
+
128
+ _updateFrustum( startPoint, endPoint ) {
64
129
 
65
130
  startPoint = startPoint || this.startPoint;
66
131
  endPoint = endPoint || this.endPoint;
@@ -170,7 +235,7 @@ class SelectionBox {
170
235
 
171
236
  }
172
237
 
173
- searchChildInFrustum( frustum, object ) {
238
+ _searchChildInFrustum( frustum, object ) {
174
239
 
175
240
  if ( object.isMesh || object.isLine || object.isPoints ) {
176
241
 
@@ -214,7 +279,7 @@ class SelectionBox {
214
279
 
215
280
  for ( let x = 0; x < object.children.length; x ++ ) {
216
281
 
217
- this.searchChildInFrustum( frustum, object.children[ x ] );
282
+ this._searchChildInFrustum( frustum, object.children[ x ] );
218
283
 
219
284
  }
220
285
 
@@ -1,69 +1,111 @@
1
1
  import { Vector2 } from 'three';
2
2
 
3
+ /**
4
+ * A helper for {@link SelectionBox}.
5
+ *
6
+ * It visualizes the current selection box with a `div` container element.
7
+ */
3
8
  class SelectionHelper {
4
9
 
10
+ /**
11
+ * Constructs a new selection helper.
12
+ *
13
+ * @param {(WebGPURenderer|WebGLRenderer)} renderer - The renderer.
14
+ * @param {string} cssClassName - The CSS class name of the `div`.
15
+ */
5
16
  constructor( renderer, cssClassName ) {
6
17
 
18
+ /**
19
+ * The visualization of the selection box.
20
+ *
21
+ * @type {HTMLDivElement}
22
+ */
7
23
  this.element = document.createElement( 'div' );
8
24
  this.element.classList.add( cssClassName );
9
25
  this.element.style.pointerEvents = 'none';
10
26
 
27
+ /**
28
+ * A reference to the renderer.
29
+ *
30
+ * @type {(WebGPURenderer|WebGLRenderer)}
31
+ */
11
32
  this.renderer = renderer;
12
33
 
13
- this.startPoint = new Vector2();
14
- this.pointTopLeft = new Vector2();
15
- this.pointBottomRight = new Vector2();
16
-
34
+ /**
35
+ * Whether the mouse or pointer is pressed down.
36
+ *
37
+ * @type {boolean}
38
+ * @default false
39
+ */
17
40
  this.isDown = false;
41
+
42
+ /**
43
+ * Whether helper is enabled or not.
44
+ *
45
+ * @type {boolean}
46
+ * @default true
47
+ */
18
48
  this.enabled = true;
19
49
 
20
- this.onPointerDown = function ( event ) {
50
+ // private
51
+
52
+ this._startPoint = new Vector2();
53
+ this._pointTopLeft = new Vector2();
54
+ this._pointBottomRight = new Vector2();
55
+
56
+ this._onPointerDown = function ( event ) {
21
57
 
22
58
  if ( this.enabled === false ) return;
23
59
 
24
60
  this.isDown = true;
25
- this.onSelectStart( event );
61
+ this._onSelectStart( event );
26
62
 
27
63
  }.bind( this );
28
64
 
29
- this.onPointerMove = function ( event ) {
65
+ this._onPointerMove = function ( event ) {
30
66
 
31
67
  if ( this.enabled === false ) return;
32
68
 
33
69
  if ( this.isDown ) {
34
70
 
35
- this.onSelectMove( event );
71
+ this._onSelectMove( event );
36
72
 
37
73
  }
38
74
 
39
75
  }.bind( this );
40
76
 
41
- this.onPointerUp = function ( ) {
77
+ this._onPointerUp = function ( ) {
42
78
 
43
79
  if ( this.enabled === false ) return;
44
80
 
45
81
  this.isDown = false;
46
- this.onSelectOver();
82
+ this._onSelectOver();
47
83
 
48
84
  }.bind( this );
49
85
 
50
- this.renderer.domElement.addEventListener( 'pointerdown', this.onPointerDown );
51
- this.renderer.domElement.addEventListener( 'pointermove', this.onPointerMove );
52
- this.renderer.domElement.addEventListener( 'pointerup', this.onPointerUp );
86
+ this.renderer.domElement.addEventListener( 'pointerdown', this._onPointerDown );
87
+ this.renderer.domElement.addEventListener( 'pointermove', this._onPointerMove );
88
+ this.renderer.domElement.addEventListener( 'pointerup', this._onPointerUp );
53
89
 
54
90
  }
55
91
 
92
+ /**
93
+ * Call this method if you no longer want use to the controls. It frees all internal
94
+ * resources and removes all event listeners.
95
+ */
56
96
  dispose() {
57
97
 
58
- this.renderer.domElement.removeEventListener( 'pointerdown', this.onPointerDown );
59
- this.renderer.domElement.removeEventListener( 'pointermove', this.onPointerMove );
60
- this.renderer.domElement.removeEventListener( 'pointerup', this.onPointerUp );
98
+ this.renderer.domElement.removeEventListener( 'pointerdown', this._onPointerDown );
99
+ this.renderer.domElement.removeEventListener( 'pointermove', this._onPointerMove );
100
+ this.renderer.domElement.removeEventListener( 'pointerup', this._onPointerUp );
61
101
 
62
102
  this.element.remove(); // in case disposal happens while dragging
63
103
 
64
104
  }
65
105
 
66
- onSelectStart( event ) {
106
+ // private
107
+
108
+ _onSelectStart( event ) {
67
109
 
68
110
  this.element.style.display = 'none';
69
111
 
@@ -74,28 +116,28 @@ class SelectionHelper {
74
116
  this.element.style.width = '0px';
75
117
  this.element.style.height = '0px';
76
118
 
77
- this.startPoint.x = event.clientX;
78
- this.startPoint.y = event.clientY;
119
+ this._startPoint.x = event.clientX;
120
+ this._startPoint.y = event.clientY;
79
121
 
80
122
  }
81
123
 
82
- onSelectMove( event ) {
124
+ _onSelectMove( event ) {
83
125
 
84
126
  this.element.style.display = 'block';
85
127
 
86
- this.pointBottomRight.x = Math.max( this.startPoint.x, event.clientX );
87
- this.pointBottomRight.y = Math.max( this.startPoint.y, event.clientY );
88
- this.pointTopLeft.x = Math.min( this.startPoint.x, event.clientX );
89
- this.pointTopLeft.y = Math.min( this.startPoint.y, event.clientY );
128
+ this._pointBottomRight.x = Math.max( this._startPoint.x, event.clientX );
129
+ this._pointBottomRight.y = Math.max( this._startPoint.y, event.clientY );
130
+ this._pointTopLeft.x = Math.min( this._startPoint.x, event.clientX );
131
+ this._pointTopLeft.y = Math.min( this._startPoint.y, event.clientY );
90
132
 
91
- this.element.style.left = this.pointTopLeft.x + 'px';
92
- this.element.style.top = this.pointTopLeft.y + 'px';
93
- this.element.style.width = ( this.pointBottomRight.x - this.pointTopLeft.x ) + 'px';
94
- this.element.style.height = ( this.pointBottomRight.y - this.pointTopLeft.y ) + 'px';
133
+ this.element.style.left = this._pointTopLeft.x + 'px';
134
+ this.element.style.top = this._pointTopLeft.y + 'px';
135
+ this.element.style.width = ( this._pointBottomRight.x - this._pointTopLeft.x ) + 'px';
136
+ this.element.style.height = ( this._pointBottomRight.y - this._pointTopLeft.y ) + 'px';
95
137
 
96
138
  }
97
139
 
98
- onSelectOver() {
140
+ _onSelectOver() {
99
141
 
100
142
  this.element.remove();
101
143
 
@@ -338,7 +338,7 @@ class MotionController {
338
338
  /**
339
339
  * @param {Object} xrInputSource - The XRInputSource to build the MotionController around
340
340
  * @param {Object} profile - The best matched profile description for the supplied xrInputSource
341
- * @param {Object} assetUrl
341
+ * @param {string} assetUrl
342
342
  */
343
343
  constructor(xrInputSource, profile, assetUrl) {
344
344
  if (!xrInputSource) {
@@ -1,14 +1,37 @@
1
1
  import { Lighting } from 'three/webgpu';
2
2
  import { tiledLights } from '../tsl/lighting/TiledLightsNode.js';
3
3
 
4
+ /**
5
+ * A custom lighting implementation based on Tiled-Lighting that overwrites the default
6
+ * implementation in {@link WebGPURenderer}.
7
+ *
8
+ * ```js
9
+ * const lighting = new TiledLighting();
10
+ * renderer.lighting = lighting; // set lighting system
11
+ * ```
12
+ *
13
+ * @augments Lighting
14
+ */
4
15
  export class TiledLighting extends Lighting {
5
16
 
17
+ /**
18
+ * Constructs a new lighting system.
19
+ */
6
20
  constructor() {
7
21
 
8
22
  super();
9
23
 
10
24
  }
11
25
 
26
+ /**
27
+ * Creates a new tiled lights node for the given array of lights.
28
+ *
29
+ * This method is called internally by the renderer and must be overwritten by
30
+ * all custom lighting implementations.
31
+ *
32
+ * @param {Array<Light>} lights - The render object.
33
+ * @return {TiledLightsNode} The tiled lights node.
34
+ */
12
35
  createNode( lights = [] ) {
13
36
 
14
37
  return tiledLights().setLights( lights );
@@ -11,11 +11,24 @@ import {
11
11
  WebGLCoordinateSystem
12
12
  } from 'three';
13
13
 
14
+ /**
15
+ * Utility class for creating instances of {@link LightProbe}.
16
+ *
17
+ * @hideconstructor
18
+ */
14
19
  class LightProbeGenerator {
15
20
 
16
- // https://www.ppsloan.org/publications/StupidSH36.pdf
21
+ /**
22
+ * Creates a light probe from the given (radiance) environment map.
23
+ * The method expects that the environment map is represented as a cube texture.
24
+ *
25
+ * @param {CubeTexture} cubeTexture - The environment map.
26
+ * @return {LightProbe} The created light probe.
27
+ */
17
28
  static fromCubeTexture( cubeTexture ) {
18
29
 
30
+ // https://www.ppsloan.org/publications/StupidSH36.pdf
31
+
19
32
  let totalWeight = 0;
20
33
 
21
34
  const coord = new Vector3();
@@ -127,6 +140,18 @@ class LightProbeGenerator {
127
140
 
128
141
  }
129
142
 
143
+ /**
144
+ * Creates a light probe from the given (radiance) environment map.
145
+ * The method expects that the environment map is represented as a cube render target.
146
+ *
147
+ * The cube render target must be in RGBA so `cubeRenderTarget.texture.format` must be
148
+ * set to {@link RGBAFormat}.
149
+ *
150
+ * @async
151
+ * @param {WebGPURenderer|WebGLRenderer} renderer - The renderer.
152
+ * @param {CubeRenderTarget|WebGLCubeRenderTarget} cubeRenderTarget - The environment map.
153
+ * @return {Promise<LightProbe>} A Promise that resolves with the created light probe.
154
+ */
130
155
  static async fromCubeRenderTarget( renderer, cubeRenderTarget ) {
131
156
 
132
157
  const flip = renderer.coordinateSystem === WebGLCoordinateSystem ? - 1 : 1;