@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.
- package/build/three.cjs +10655 -1446
- package/build/three.core.js +9626 -1094
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +834 -157
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1429 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +53 -0
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/UniformsLib.js +1 -4
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- 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
|
|
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
|
-
*
|
|
19
|
-
*
|
|
20
|
-
* @param
|
|
21
|
-
* @param
|
|
22
|
-
* @param
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
* @
|
|
217
|
-
* @param {number}
|
|
218
|
-
* @param {number}
|
|
219
|
-
* @
|
|
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
|
-
* @
|
|
232
|
-
* @param {number}
|
|
233
|
-
* @param {number}
|
|
234
|
-
* @
|
|
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
|
-
* @
|
|
247
|
-
* @
|
|
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
|
-
* @
|
|
263
|
-
*
|
|
264
|
-
*
|
|
265
|
-
*
|
|
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,
|
|
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
|
-
* @
|
|
289
|
-
* @param {
|
|
290
|
-
* @
|
|
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
|
-
* @
|
|
415
|
-
* @param {
|
|
416
|
-
* @
|
|
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
|
-
* @
|
|
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
|
-
* @
|
|
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
|
-
*
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
* @param {
|
|
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
|
-
*
|
|
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
|
-
*
|
|
62
|
+
* The normal axis.
|
|
63
|
+
*
|
|
64
|
+
* @type {('x'|'y'|'z')}
|
|
56
65
|
*/
|
|
66
|
+
this.axis = axis;
|
|
67
|
+
|
|
57
68
|
/**
|
|
58
|
-
*
|
|
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
|
-
*
|
|
76
|
+
* The rendering context of the canvas.
|
|
77
|
+
*
|
|
78
|
+
* @type {CanvasRenderingContext2D}
|
|
63
79
|
*/
|
|
80
|
+
this.ctx;
|
|
81
|
+
|
|
64
82
|
/**
|
|
65
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
-
|
|
142
|
-
for ( let j = 0; j < jLength; j ++ ) {
|
|
182
|
+
console.error( 'THREE.VolumeSlice.repaint: label are not supported yet' );
|
|
143
183
|
|
|
144
|
-
|
|
184
|
+
// This part is currently useless but will be used when colortables will be handled
|
|
145
185
|
|
|
146
|
-
|
|
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
|
|