@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
@@ -6,44 +6,61 @@ import {
6
6
  import { VolumeSlice } from '../misc/VolumeSlice.js';
7
7
 
8
8
  /**
9
- * This class had been written to handle the output of the NRRD loader.
10
- * It contains a volume of data and information about it.
11
- * For now it only handles 3 dimensional data.
12
- * See the webgl_loader_nrrd.html example and the loaderNRRD.js file to see how to use this class.
13
- * @class
9
+ * This class had been written to handle the output of the {@link NRRDLoader}.
10
+ * It contains a volume of data and information about it. For now it only handles 3 dimensional data.
14
11
  */
15
12
  class Volume {
16
13
 
17
14
  /**
18
- * @param {number} xLength Width of the volume
19
- * @param {number} yLength Length of the volume
20
- * @param {number} zLength Depth of the volume
21
- * @param {string} type The type of data (uint8, uint16, ...)
22
- * @param {ArrayBuffer} arrayBuffer The buffer with volume data
15
+ * Constructs a new volume.
16
+ *
17
+ * @param {number} [xLength] - Width of the volume.
18
+ * @param {number} [yLength] - Length of the volume.
19
+ * @param {number} [zLength] - Depth of the volume.
20
+ * @param {string} [type] - The type of data (uint8, uint16, ...).
21
+ * @param {ArrayBuffer} [arrayBuffer] - The buffer with volume data.
23
22
  */
24
23
  constructor( xLength, yLength, zLength, type, arrayBuffer ) {
25
24
 
26
25
  if ( xLength !== undefined ) {
27
26
 
28
27
  /**
29
- * @member {number} xLength Width of the volume in the IJK coordinate system
28
+ * Width of the volume in the IJK coordinate system.
29
+ *
30
+ * @type {number}
31
+ * @default 1
30
32
  */
31
33
  this.xLength = Number( xLength ) || 1;
34
+
32
35
  /**
33
- * @member {number} yLength Height of the volume in the IJK coordinate system
36
+ * Height of the volume in the IJK coordinate system.
37
+ *
38
+ * @type {number}
39
+ * @default 1
34
40
  */
35
41
  this.yLength = Number( yLength ) || 1;
42
+
36
43
  /**
37
- * @member {number} zLength Depth of the volume in the IJK coordinate system
44
+ * Depth of the volume in the IJK coordinate system.
45
+ *
46
+ * @type {number}
47
+ * @default 1
38
48
  */
39
49
  this.zLength = Number( zLength ) || 1;
50
+
40
51
  /**
41
- * @member {Array<string>} The order of the Axis dictated by the NRRD header
52
+ * The order of the Axis dictated by the NRRD header
53
+ *
54
+ * @type {Array<string>}
42
55
  */
43
56
  this.axisOrder = [ 'x', 'y', 'z' ];
57
+
44
58
  /**
45
- * @member {TypedArray} data Data of the volume
59
+ * The data of the volume.
60
+ *
61
+ * @type {TypedArray}
46
62
  */
63
+ this.data;
47
64
 
48
65
  switch ( type ) {
49
66
 
@@ -129,25 +146,34 @@ class Volume {
129
146
  }
130
147
 
131
148
  /**
132
- * @member {Array} spacing Spacing to apply to the volume from IJK to RAS coordinate system
149
+ * Spacing to apply to the volume from IJK to RAS coordinate system
150
+ *
151
+ * @type {Array<number>}
133
152
  */
134
153
  this.spacing = [ 1, 1, 1 ];
154
+
135
155
  /**
136
- * @member {Array} offset Offset of the volume in the RAS coordinate system
156
+ * Offset of the volume in the RAS coordinate system
157
+ *
158
+ * @type {Array<number>}
137
159
  */
138
160
  this.offset = [ 0, 0, 0 ];
161
+
139
162
  /**
140
- * @member {Martrix3} matrix The IJK to RAS matrix
163
+ * The IJK to RAS matrix.
164
+ *
165
+ * @type {Martrix3}
141
166
  */
142
167
  this.matrix = new Matrix3();
143
168
  this.matrix.identity();
169
+
144
170
  /**
145
- * @member {Martrix3} inverseMatrix The RAS to IJK matrix
146
- */
147
- /**
148
- * @member {number} lowerThreshold The voxels with values under this threshold won't appear in the slices.
149
- * If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume
171
+ * The RAS to IJK matrix.
172
+ *
173
+ * @type {Martrix3}
150
174
  */
175
+ this.inverseMatrix = new Matrix3();
176
+
151
177
  let lowerThreshold = - Infinity;
152
178
  Object.defineProperty( this, 'lowerThreshold', {
153
179
  get: function () {
@@ -155,6 +181,14 @@ class Volume {
155
181
  return lowerThreshold;
156
182
 
157
183
  },
184
+ /**
185
+ * The voxels with values under this threshold won't appear in the slices.
186
+ * If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume.
187
+ *
188
+ * @name Volume#lowerThreshold
189
+ * @type {number}
190
+ * @param {number} value
191
+ */
158
192
  set: function ( value ) {
159
193
 
160
194
  lowerThreshold = value;
@@ -166,10 +200,7 @@ class Volume {
166
200
 
167
201
  }
168
202
  } );
169
- /**
170
- * @member {number} upperThreshold The voxels with values over this threshold won't appear in the slices.
171
- * If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume
172
- */
203
+
173
204
  let upperThreshold = Infinity;
174
205
  Object.defineProperty( this, 'upperThreshold', {
175
206
  get: function () {
@@ -177,6 +208,14 @@ class Volume {
177
208
  return upperThreshold;
178
209
 
179
210
  },
211
+ /**
212
+ * The voxels with values over this threshold won't appear in the slices.
213
+ * If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume
214
+ *
215
+ * @name Volume#upperThreshold
216
+ * @type {number}
217
+ * @param {number} value
218
+ */
180
219
  set: function ( value ) {
181
220
 
182
221
  upperThreshold = value;
@@ -191,33 +230,38 @@ class Volume {
191
230
 
192
231
 
193
232
  /**
194
- * @member {Array} sliceList The list of all the slices associated to this volume
233
+ * The list of all the slices associated to this volume
234
+ *
235
+ * @type {Array}
195
236
  */
196
237
  this.sliceList = [];
197
238
 
198
-
199
239
  /**
200
- * @member {boolean} segmentation in segmentation mode, it can load 16-bits nrrds correctly
240
+ * Whether to use segmentation mode or not.
241
+ * It can load 16-bits nrrds correctly.
242
+ *
243
+ * @type {boolean}
244
+ * @default false
201
245
  */
202
246
  this.segmentation = false;
203
247
 
204
248
 
205
249
  /**
206
- * @member {Array} RASDimensions This array holds the dimensions of the volume in the RAS space
250
+ * This array holds the dimensions of the volume in the RAS space
251
+ *
252
+ * @type {Array<number>}
207
253
  */
208
-
209
-
254
+ this.RASDimensions = [];
210
255
 
211
256
  }
212
257
 
213
258
  /**
214
- * Shortcut for data[access(i,j,k)]
259
+ * Shortcut for data[access(i,j,k)].
215
260
  *
216
- * @memberof Volume
217
- * @param {number} i First coordinate
218
- * @param {number} j Second coordinate
219
- * @param {number} k Third coordinate
220
- * @returns {number} value in the data array
261
+ * @param {number} i - First coordinate.
262
+ * @param {number} j - Second coordinate.
263
+ * @param {number} k - Third coordinate.
264
+ * @returns {number} The value in the data array.
221
265
  */
222
266
  getData( i, j, k ) {
223
267
 
@@ -226,13 +270,12 @@ class Volume {
226
270
  }
227
271
 
228
272
  /**
229
- * Compute the index in the data array corresponding to the given coordinates in IJK system
273
+ * Compute the index in the data array corresponding to the given coordinates in IJK system.
230
274
  *
231
- * @memberof Volume
232
- * @param {number} i First coordinate
233
- * @param {number} j Second coordinate
234
- * @param {number} k Third coordinate
235
- * @returns {number} index
275
+ * @param {number} i - First coordinate.
276
+ * @param {number} j - Second coordinate.
277
+ * @param {number} k - Third coordinate.
278
+ * @returns {number} The index.
236
279
  */
237
280
  access( i, j, k ) {
238
281
 
@@ -241,11 +284,10 @@ class Volume {
241
284
  }
242
285
 
243
286
  /**
244
- * Retrieve the IJK coordinates of the voxel corresponding of the given index in the data
287
+ * Retrieve the IJK coordinates of the voxel corresponding of the given index in the data.
245
288
  *
246
- * @memberof Volume
247
- * @param {number} index index of the voxel
248
- * @returns {Array} [x,y,z]
289
+ * @param {number} index - Index of the voxel.
290
+ * @returns {Array<number>} The IJK coordinates as `[x,y,z]`.
249
291
  */
250
292
  reverseAccess( index ) {
251
293
 
@@ -257,15 +299,12 @@ class Volume {
257
299
  }
258
300
 
259
301
  /**
260
- * Apply a function to all the voxels, be careful, the value will be replaced
302
+ * Apply a function to all the voxels, be careful, the value will be replaced.
261
303
  *
262
- * @memberof Volume
263
- * @param {Function} functionToMap A function to apply to every voxel, will be called with the following parameters :
264
- * value of the voxel
265
- * index of the voxel
266
- * the data (TypedArray)
267
- * @param {Object} context You can specify a context in which call the function, default if this Volume
268
- * @returns {Volume} this
304
+ * @param {Function} functionToMap A function to apply to every voxel, will be called with the following parameters:
305
+ * value of the voxel, index of the voxel, the data (TypedArray).
306
+ * @param {Object} context - You can specify a context in which call the function, default if this Volume.
307
+ * @returns {Volume} A reference to this instance.
269
308
  */
270
309
  map( functionToMap, context ) {
271
310
 
@@ -283,12 +322,12 @@ class Volume {
283
322
  }
284
323
 
285
324
  /**
286
- * Compute the orientation of the slice and returns all the information relative to the geometry such as sliceAccess, the plane matrix (orientation and position in RAS coordinate) and the dimensions of the plane in both coordinate system.
325
+ * Compute the orientation of the slice and returns all the information relative to the geometry such as sliceAccess,
326
+ * the plane matrix (orientation and position in RAS coordinate) and the dimensions of the plane in both coordinate system.
287
327
  *
288
- * @memberof Volume
289
- * @param {string} axis the normal axis to the slice 'x' 'y' or 'z'
290
- * @param {number} RASIndex the index of the slice
291
- * @returns {Object} an object containing all the useful information on the geometry of the slice
328
+ * @param {('x'|'y'|'z')} axis - The normal axis to the slice.
329
+ * @param {number} RASIndex - The index of the slice.
330
+ * @returns {Object} An object containing all the useful information on the geometry of the slice.
292
331
  */
293
332
  extractPerpendicularPlane( axis, RASIndex ) {
294
333
 
@@ -411,10 +450,9 @@ class Volume {
411
450
  * Returns a slice corresponding to the given axis and index.
412
451
  * The coordinate are given in the Right Anterior Superior coordinate format.
413
452
  *
414
- * @memberof Volume
415
- * @param {string} axis the normal axis to the slice 'x' 'y' or 'z'
416
- * @param {number} index the index of the slice
417
- * @returns {VolumeSlice} the extracted slice
453
+ * @param {('x'|'y'|'z')} axis - The normal axis to the slice.
454
+ * @param {number} index - The index of the slice.
455
+ * @returns {VolumeSlice} The extracted slice.
418
456
  */
419
457
  extractSlice( axis, index ) {
420
458
 
@@ -425,11 +463,10 @@ class Volume {
425
463
  }
426
464
 
427
465
  /**
428
- * Call repaint on all the slices extracted from this volume
466
+ * Call repaint on all the slices extracted from this volume.
429
467
  *
430
468
  * @see {@link VolumeSlice#repaint}
431
- * @memberof Volume
432
- * @returns {Volume} this
469
+ * @returns {Volume} A reference to this volume.
433
470
  */
434
471
  repaintAllSlices() {
435
472
 
@@ -444,10 +481,9 @@ class Volume {
444
481
  }
445
482
 
446
483
  /**
447
- * Compute the minimum and the maximum of the data in the volume
484
+ * Compute the minimum and the maximum of the data in the volume.
448
485
  *
449
- * @memberof Volume
450
- * @returns {Array} [min,max]
486
+ * @returns {Array<number>} The min/max data as `[min,max]`.
451
487
  */
452
488
  computeMinMax() {
453
489
 
@@ -10,34 +10,45 @@ import {
10
10
  } from 'three';
11
11
 
12
12
  /**
13
- * This class has been made to hold a slice of a volume data
14
- * @class
13
+ * This class has been made to hold a slice of a volume data.
14
+ *
15
15
  * @see {@link Volume}
16
16
  */
17
17
  class VolumeSlice {
18
18
 
19
19
  /**
20
- * @param {Volume} volume The associated volume
21
- * @param {number} [index=0] The index of the slice
22
- * @param {string} [axis='z'] For now only 'x', 'y' or 'z' but later it will change to a normal vector
20
+ * Constructs a new volume slice.
21
+ *
22
+ * @param {Volume} volume - The associated volume.
23
+ * @param {number} [index=0] - The index of the slice.
24
+ * @param {('x'|'y'|'z')} [axis='z'] - For now only 'x', 'y' or 'z' but later it will change to a normal vector.
23
25
  */
24
- constructor( volume, index, axis ) {
26
+ constructor( volume, index = 0, axis = 'z' ) {
25
27
 
26
28
  const slice = this;
29
+
27
30
  /**
28
- * @member {Volume} volume The associated volume
31
+ * The associated volume.
32
+ *
33
+ * @type {Volume}
29
34
  */
30
35
  this.volume = volume;
31
- /**
32
- * @member {number} index The index of the slice, if changed, will automatically call updateGeometry at the next repaint
33
- */
34
- index = index || 0;
36
+
35
37
  Object.defineProperty( this, 'index', {
36
38
  get: function () {
37
39
 
38
40
  return index;
39
41
 
40
42
  },
43
+ /**
44
+ * The index of the slice, if changed, will automatically call updateGeometry at the next repaint.
45
+ *
46
+ * @name VolumeSlice#index
47
+ * @type {number}
48
+ * @default 0
49
+ * @param {number} value
50
+ * @return {number}
51
+ */
41
52
  set: function ( value ) {
42
53
 
43
54
  index = value;
@@ -46,25 +57,42 @@ class VolumeSlice {
46
57
 
47
58
  }
48
59
  } );
49
- /**
50
- * @member {string} axis The normal axis
51
- */
52
- this.axis = axis || 'z';
53
60
 
54
61
  /**
55
- * @member {HTMLCanvasElement} canvas The final canvas used for the texture
62
+ * The normal axis.
63
+ *
64
+ * @type {('x'|'y'|'z')}
56
65
  */
66
+ this.axis = axis;
67
+
57
68
  /**
58
- * @member {CanvasRenderingContext2D} ctx Context of the canvas
69
+ * The final canvas used for the texture.
70
+ *
71
+ * @type {HTMLCanvasElement}
59
72
  */
60
73
  this.canvas = document.createElement( 'canvas' );
74
+
61
75
  /**
62
- * @member {HTMLCanvasElement} canvasBuffer The intermediary canvas used to paint the data
76
+ * The rendering context of the canvas.
77
+ *
78
+ * @type {CanvasRenderingContext2D}
63
79
  */
80
+ this.ctx;
81
+
64
82
  /**
65
- * @member {CanvasRenderingContext2D} ctxBuffer Context of the canvas buffer
83
+ * The intermediary canvas used to paint the data.
84
+ *
85
+ * @type {HTMLCanvasElement}
66
86
  */
67
87
  this.canvasBuffer = document.createElement( 'canvas' );
88
+
89
+ /**
90
+ * The rendering context of the canvas buffer,
91
+ *
92
+ * @type {CanvasRenderingContext2D}
93
+ */
94
+ this.ctxBuffer;
95
+
68
96
  this.updateGeometry();
69
97
 
70
98
 
@@ -74,39 +102,52 @@ class VolumeSlice {
74
102
  canvasMap.wrapS = canvasMap.wrapT = ClampToEdgeWrapping;
75
103
  canvasMap.colorSpace = SRGBColorSpace;
76
104
  const material = new MeshBasicMaterial( { map: canvasMap, side: DoubleSide, transparent: true } );
105
+
77
106
  /**
78
- * @member {Mesh} mesh The mesh ready to get used in the scene
107
+ * The mesh ready to get used in the scene.
108
+ *
109
+ * @type {Mesh}
79
110
  */
80
111
  this.mesh = new Mesh( this.geometry, material );
81
112
  this.mesh.matrixAutoUpdate = false;
113
+
82
114
  /**
83
- * @member {boolean} geometryNeedsUpdate If set to true, updateGeometry will be triggered at the next repaint
115
+ * If set to `true`, `updateGeometry()` will be triggered at the next repaint.
116
+ *
117
+ * @type {boolean}
118
+ * @default true
84
119
  */
85
120
  this.geometryNeedsUpdate = true;
86
121
  this.repaint();
87
122
 
88
123
  /**
89
- * @member {number} iLength Width of slice in the original coordinate system, corresponds to the width of the buffer canvas
124
+ * Width of slice in the original coordinate system, corresponds to the width of the buffer canvas.
125
+ *
126
+ * @type {number}
127
+ * @default 0
90
128
  */
129
+ this.iLength = 0;
91
130
 
92
131
  /**
93
- * @member {number} jLength Height of slice in the original coordinate system, corresponds to the height of the buffer canvas
132
+ * Height of slice in the original coordinate system, corresponds to the height of the buffer canvas.
133
+ *
134
+ * @type {number}
135
+ * @default 0
94
136
  */
137
+ this.jLength = 0;
95
138
 
96
139
  /**
97
- * @member {Function} sliceAccess Function that allow the slice to access right data
140
+ * Function that allow the slice to access right data.
141
+ *
142
+ * @type {?Function}
98
143
  * @see {@link Volume#extractPerpendicularPlane}
99
- * @param {number} i The first coordinate
100
- * @param {number} j The second coordinate
101
- * @returns {number} the index corresponding to the voxel in volume.data of the given position in the slice
102
144
  */
103
-
145
+ this.sliceAccess = null;
104
146
 
105
147
  }
106
148
 
107
149
  /**
108
- * Refresh the texture and the geometry if geometryNeedsUpdate is set to true
109
- * @memberof VolumeSlice
150
+ * Refresh the texture and the geometry if geometryNeedsUpdate is set to `true`.
110
151
  */
111
152
  repaint() {
112
153
 
@@ -138,23 +179,26 @@ class VolumeSlice {
138
179
 
139
180
  if ( volume.dataType === 'label' ) {
140
181
 
141
- //this part is currently useless but will be used when colortables will be handled
142
- for ( let j = 0; j < jLength; j ++ ) {
182
+ console.error( 'THREE.VolumeSlice.repaint: label are not supported yet' );
143
183
 
144
- for ( let i = 0; i < iLength; i ++ ) {
184
+ // This part is currently useless but will be used when colortables will be handled
145
185
 
146
- let label = volumeData[ sliceAccess( i, j ) ];
147
- label = label >= this.colorMap.length ? ( label % this.colorMap.length ) + 1 : label;
148
- const color = this.colorMap[ label ];
149
- data[ 4 * pixelCount ] = ( color >> 24 ) & 0xff;
150
- data[ 4 * pixelCount + 1 ] = ( color >> 16 ) & 0xff;
151
- data[ 4 * pixelCount + 2 ] = ( color >> 8 ) & 0xff;
152
- data[ 4 * pixelCount + 3 ] = color & 0xff;
153
- pixelCount ++;
186
+ // for ( let j = 0; j < jLength; j ++ ) {
154
187
 
155
- }
188
+ // for ( let i = 0; i < iLength; i ++ ) {
156
189
 
157
- }
190
+ // let label = volumeData[ sliceAccess( i, j ) ];
191
+ // label = label >= this.colorMap.length ? ( label % this.colorMap.length ) + 1 : label;
192
+ // const color = this.colorMap[ label ];
193
+ // data[ 4 * pixelCount ] = ( color >> 24 ) & 0xff;
194
+ // data[ 4 * pixelCount + 1 ] = ( color >> 16 ) & 0xff;
195
+ // data[ 4 * pixelCount + 2 ] = ( color >> 8 ) & 0xff;
196
+ // data[ 4 * pixelCount + 3 ] = color & 0xff;
197
+ // pixelCount ++;
198
+
199
+ // }
200
+
201
+ // }
158
202
 
159
203
  } else {
160
204
 
@@ -191,9 +235,8 @@ class VolumeSlice {
191
235
  }
192
236
 
193
237
  /**
194
- * Refresh the geometry according to axis and index
238
+ * Refresh the geometry according to axis and index.
195
239
  * @see {@link Volume#extractPerpendicularPlane}
196
- * @memberof VolumeSlice
197
240
  */
198
241
  updateGeometry() {
199
242