super-three 0.141.0 → 0.144.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/README.md +8 -8
- package/build/three.cjs +1558 -1034
- package/build/three.js +1558 -1034
- package/build/three.min.js +1 -1
- package/build/three.module.js +2012 -1243
- package/examples/js/animation/MMDPhysics.js +1 -16
- package/examples/js/controls/ArcballControls.js +16 -3
- package/examples/js/controls/FirstPersonControls.js +0 -7
- package/examples/js/controls/FlyControls.js +0 -8
- package/examples/js/controls/OrbitControls.js +0 -4
- package/examples/js/controls/PointerLockControls.js +0 -8
- package/examples/js/controls/TrackballControls.js +0 -2
- package/examples/js/controls/TransformControls.js +20 -16
- package/examples/js/effects/AnaglyphEffect.js +2 -2
- package/examples/js/effects/OutlineEffect.js +4 -24
- package/examples/js/effects/ParallaxBarrierEffect.js +2 -2
- package/examples/js/effects/PeppersGhostEffect.js +2 -2
- package/examples/js/effects/StereoEffect.js +2 -2
- package/examples/js/environments/RoomEnvironment.js +22 -0
- package/examples/js/exporters/ColladaExporter.js +4 -13
- package/examples/js/exporters/DRACOExporter.js +0 -12
- package/examples/js/exporters/GLTFExporter.js +28 -29
- package/examples/js/exporters/OBJExporter.js +2 -23
- package/examples/js/exporters/PLYExporter.js +12 -24
- package/examples/js/exporters/STLExporter.js +0 -7
- package/examples/js/exporters/USDZExporter.js +6 -0
- package/examples/js/geometries/ConvexGeometry.js +1 -1
- package/examples/js/geometries/ParametricGeometry.js +1 -8
- package/examples/js/interactive/SelectionHelper.js +2 -0
- package/examples/js/libs/ktx-parse.umd.js +1 -0
- package/examples/js/libs/meshopt_decoder.js +98 -32
- package/examples/js/loaders/ColladaLoader.js +1 -0
- package/examples/js/loaders/DRACOLoader.js +2 -25
- package/examples/js/loaders/EXRLoader.js +2 -13
- package/examples/js/loaders/FBXLoader.js +10 -3
- package/examples/js/loaders/FontLoader.js +3 -16
- package/examples/js/loaders/GLTFLoader.js +52 -36
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -11
- package/examples/js/loaders/LDrawLoader.js +139 -74
- package/examples/js/loaders/OBJLoader.js +7 -13
- package/examples/js/loaders/PCDLoader.js +59 -14
- package/examples/js/loaders/PLYLoader.js +3 -3
- package/examples/js/loaders/SVGLoader.js +4 -3
- package/examples/js/loaders/TIFFLoader.js +31 -0
- package/examples/js/loaders/VRMLLoader.js +33 -24
- package/examples/js/loaders/VTKLoader.js +1 -1
- package/examples/js/loaders/lwo/LWO2Parser.js +8 -7
- package/examples/js/loaders/lwo/LWO3Parser.js +8 -7
- package/examples/js/materials/MeshGouraudMaterial.js +385 -0
- package/examples/js/math/ColorConverter.js +0 -50
- package/examples/js/misc/GPUComputationRenderer.js +23 -0
- package/examples/js/misc/Volume.js +198 -190
- package/examples/js/misc/VolumeSlice.js +90 -88
- package/examples/js/modifiers/SimplifyModifier.js +1 -1
- package/examples/js/objects/GroundProjectedEnv.js +193 -0
- package/examples/js/objects/Reflector.js +9 -2
- package/examples/js/objects/ReflectorForSSRPass.js +3 -4
- package/examples/js/objects/Refractor.js +10 -4
- package/examples/js/objects/ShadowMesh.js +5 -1
- package/examples/js/postprocessing/OutlinePass.js +5 -3
- package/examples/js/renderers/CSS2DRenderer.js +2 -2
- package/examples/js/renderers/CSS3DRenderer.js +2 -2
- package/examples/js/renderers/Projector.js +2 -23
- package/examples/js/shaders/LuminosityShader.js +1 -1
- package/examples/js/shaders/MMDToonShader.js +6 -2
- package/examples/js/shaders/ToneMapShader.js +1 -1
- package/examples/js/utils/BufferGeometryUtils.js +1 -1
- package/examples/js/utils/GeometryUtils.js +2 -18
- package/examples/js/utils/PackedPhongMaterial.js +1 -1
- package/examples/js/utils/SceneUtils.js +0 -16
- package/examples/jsm/animation/MMDPhysics.js +3 -22
- package/examples/jsm/controls/ArcballControls.js +17 -2
- package/examples/jsm/controls/FirstPersonControls.js +0 -7
- package/examples/jsm/controls/FlyControls.js +0 -7
- package/examples/jsm/controls/OrbitControls.js +0 -5
- package/examples/jsm/controls/PointerLockControls.js +0 -7
- package/examples/jsm/controls/TrackballControls.js +0 -3
- package/examples/jsm/controls/TransformControls.js +18 -16
- package/examples/jsm/effects/AnaglyphEffect.js +2 -2
- package/examples/jsm/effects/OutlineEffect.js +4 -25
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
- package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
- package/examples/jsm/effects/StereoEffect.js +2 -2
- package/examples/jsm/environments/RoomEnvironment.js +23 -0
- package/examples/jsm/exporters/ColladaExporter.js +4 -13
- package/examples/jsm/exporters/DRACOExporter.js +0 -13
- package/examples/jsm/exporters/GLTFExporter.js +29 -31
- package/examples/jsm/exporters/KTX2Exporter.js +29 -29
- package/examples/jsm/exporters/OBJExporter.js +0 -18
- package/examples/jsm/exporters/PLYExporter.js +14 -22
- package/examples/jsm/exporters/STLExporter.js +1 -9
- package/examples/jsm/exporters/USDZExporter.js +14 -3
- package/examples/jsm/geometries/ConvexGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +0 -6
- package/examples/jsm/interactive/HTMLMesh.js +9 -9
- package/examples/jsm/interactive/SelectionHelper.js +5 -3
- package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
- package/examples/jsm/libs/utif.module.js +1579 -0
- package/examples/jsm/libs/zstddec.module.js +1 -0
- package/examples/jsm/loaders/ColladaLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -28
- package/examples/jsm/loaders/EXRLoader.js +3 -13
- package/examples/jsm/loaders/FBXLoader.js +10 -3
- package/examples/jsm/loaders/FontLoader.js +3 -16
- package/examples/jsm/loaders/GLTFLoader.js +52 -36
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
- package/examples/jsm/loaders/KTX2Loader.js +192 -30
- package/examples/jsm/loaders/LDrawLoader.js +135 -74
- package/examples/jsm/loaders/OBJLoader.js +6 -14
- package/examples/jsm/loaders/PCDLoader.js +59 -13
- package/examples/jsm/loaders/PLYLoader.js +3 -3
- package/examples/jsm/loaders/RGBELoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +4 -3
- package/examples/jsm/loaders/TIFFLoader.js +36 -0
- package/examples/jsm/loaders/USDZLoader.js +393 -0
- package/examples/jsm/loaders/VRMLLoader.js +23 -25
- package/examples/jsm/loaders/VTKLoader.js +1 -1
- package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
- package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
- package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
- package/examples/jsm/math/ColorConverter.js +1 -49
- package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
- package/examples/jsm/misc/Volume.js +169 -171
- package/examples/jsm/misc/VolumeSlice.js +78 -80
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
- package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
- package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +1 -1
- package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +1 -1
- package/examples/jsm/node-editor/math/AngleEditor.js +1 -1
- package/examples/jsm/node-editor/math/DotEditor.js +1 -1
- package/examples/jsm/node-editor/math/InvertEditor.js +1 -1
- package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
- package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
- package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
- package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
- package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
- package/examples/jsm/node-editor/utils/PreviewEditor.js +3 -3
- package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
- package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
- package/examples/jsm/nodes/Nodes.js +43 -13
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
- package/examples/jsm/nodes/accessors/NormalNode.js +4 -4
- package/examples/jsm/nodes/accessors/PositionNode.js +5 -5
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
- package/examples/jsm/nodes/core/AttributeNode.js +3 -3
- package/examples/jsm/nodes/core/CodeNode.js +3 -3
- package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
- package/examples/jsm/nodes/core/FunctionNode.js +2 -2
- package/examples/jsm/nodes/core/Node.js +14 -12
- package/examples/jsm/nodes/core/NodeBuilder.js +12 -12
- package/examples/jsm/nodes/core/NodeUtils.js +23 -1
- package/examples/jsm/nodes/core/{NodeVary.js → NodeVarying.js} +3 -3
- package/examples/jsm/nodes/core/{VaryNode.js → VaryingNode.js} +7 -7
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +94 -0
- package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -0
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
- package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
- package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +31 -0
- package/examples/jsm/nodes/materials/Materials.js +13 -25
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
- package/examples/jsm/nodes/materials/NodeMaterial.js +2 -2
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
- package/examples/jsm/nodes/materialx/Disclaimer.md +199 -0
- package/examples/jsm/nodes/materialx/functions/lib/mx_hsv.js +56 -0
- package/examples/jsm/nodes/materialx/functions/lib/mx_noise.js +607 -0
- package/examples/jsm/nodes/math/MathNode.js +2 -12
- package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
- package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
- package/examples/jsm/nodes/shadernode/ShaderNode.js +5 -5
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +8 -5
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +20 -6
- package/examples/jsm/nodes/utils/ConvertNode.js +8 -3
- package/examples/jsm/nodes/utils/JoinNode.js +7 -7
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +2 -1
- package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
- package/examples/jsm/nodes/utils/SplitNode.js +21 -5
- package/examples/jsm/nodes/utils/TimerNode.js +2 -2
- package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
- package/examples/jsm/objects/Reflector.js +12 -5
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
- package/examples/jsm/objects/Refractor.js +12 -6
- package/examples/jsm/objects/ShadowMesh.js +8 -2
- package/examples/jsm/postprocessing/OutlinePass.js +5 -3
- package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
- package/examples/jsm/renderers/Projector.js +2 -24
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +329 -218
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +39 -3
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
- package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
- package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
- package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +66 -81
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +25 -30
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/shaders/LuminosityShader.js +1 -1
- package/examples/jsm/shaders/MMDToonShader.js +2 -2
- package/examples/jsm/shaders/ToneMapShader.js +1 -1
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -1
- package/examples/jsm/utils/GeometryUtils.js +17 -25
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
- package/examples/jsm/utils/SceneUtils.js +1 -21
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
- package/examples/jsm/webxr/VRButton.js +1 -7
- package/package.json +18 -14
- package/src/Three.Legacy.js +262 -36
- package/src/Three.js +3 -2
- package/src/animation/AnimationAction.js +6 -5
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +1 -1
- package/src/animation/AnimationUtils.js +204 -199
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/PropertyBinding.js +24 -5
- package/src/cameras/CubeCamera.js +0 -7
- package/src/constants.js +2 -4
- package/src/core/BufferAttribute.js +81 -111
- package/src/core/BufferGeometry.js +3 -41
- package/src/core/InstancedBufferAttribute.js +0 -10
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +56 -7
- package/src/core/Object3D.js +22 -5
- package/src/core/Uniform.js +0 -7
- package/src/core/UniformsGroup.js +92 -0
- package/src/extras/DataUtils.js +104 -88
- package/src/extras/core/Path.js +1 -0
- package/src/extras/core/ShapePath.js +1 -4
- package/src/extras/curves/CatmullRomCurve3.js +4 -2
- package/src/geometries/BoxGeometry.js +1 -1
- package/src/geometries/CapsuleGeometry.js +1 -1
- package/src/geometries/CircleGeometry.js +1 -1
- package/src/geometries/ConeGeometry.js +1 -1
- package/src/geometries/CylinderGeometry.js +2 -1
- package/src/geometries/DodecahedronGeometry.js +1 -1
- package/src/geometries/EdgesGeometry.js +5 -4
- package/src/geometries/ExtrudeGeometry.js +2 -11
- package/src/geometries/IcosahedronGeometry.js +1 -1
- package/src/geometries/LatheGeometry.js +2 -2
- package/src/geometries/OctahedronGeometry.js +1 -1
- package/src/geometries/PlaneGeometry.js +2 -1
- package/src/geometries/PolyhedronGeometry.js +1 -1
- package/src/geometries/RingGeometry.js +1 -1
- package/src/geometries/ShapeGeometry.js +2 -1
- package/src/geometries/SphereGeometry.js +2 -1
- package/src/geometries/TetrahedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +2 -1
- package/src/geometries/TorusKnotGeometry.js +2 -1
- package/src/geometries/TubeGeometry.js +2 -1
- package/src/geometries/WireframeGeometry.js +1 -0
- package/src/helpers/CameraHelper.js +97 -38
- package/src/helpers/DirectionalLightHelper.js +1 -0
- package/src/helpers/HemisphereLightHelper.js +1 -0
- package/src/helpers/PlaneHelper.js +6 -9
- package/src/helpers/PolarGridHelper.js +18 -14
- package/src/helpers/SpotLightHelper.js +1 -0
- package/src/lights/SpotLight.js +2 -0
- package/src/loaders/FileLoader.js +12 -1
- package/src/loaders/LoadingManager.js +1 -1
- package/src/loaders/MaterialLoader.js +49 -7
- package/src/loaders/ObjectLoader.js +4 -41
- package/src/materials/Material.js +1 -33
- package/src/materials/Materials.js +0 -27
- package/src/materials/MeshLambertMaterial.js +28 -1
- package/src/materials/ShaderMaterial.js +3 -7
- package/src/math/Color.js +3 -13
- package/src/math/MathUtils.js +1 -7
- package/src/math/Matrix3.js +1 -7
- package/src/math/Matrix4.js +3 -27
- package/src/math/Quaternion.js +1 -21
- package/src/math/Vector2.js +4 -24
- package/src/math/Vector3.js +7 -46
- package/src/math/Vector4.js +4 -24
- package/src/renderers/WebGLRenderer.js +84 -8
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
- package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -12
- package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +30 -0
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib.js +31 -31
- package/src/renderers/shaders/UniformsLib.js +12 -11
- package/src/renderers/shaders/UniformsUtils.js +14 -0
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +37 -13
- package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
- package/src/renderers/webgl/WebGLProgram.js +6 -11
- package/src/renderers/webgl/WebGLPrograms.js +30 -26
- package/src/renderers/webgl/WebGLRenderLists.js +5 -4
- package/src/renderers/webgl/WebGLRenderStates.js +5 -4
- package/src/renderers/webgl/WebGLShaderCache.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +10 -15
- package/src/renderers/webgl/WebGLState.js +47 -0
- package/src/renderers/webgl/WebGLUniforms.js +4 -4
- package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
- package/src/renderers/webgl/WebGLUtils.js +2 -0
- package/src/renderers/webvr/WebVRManager.js +42 -9
- package/src/renderers/webvr/WebVRUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +45 -37
- package/src/renderers/webxr/WebXRManager.js +58 -33
- package/src/scenes/Scene.js +16 -3
- package/src/textures/Source.js +1 -1
- package/src/utils.js +1 -1
- package/examples/js/controls/experimental/CameraControls.js +0 -1048
- package/examples/js/loaders/KTX2Loader.js +0 -558
- package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
- package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
- package/examples/jsm/package.json +0 -3
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
- package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
|
@@ -13,205 +13,203 @@
|
|
|
13
13
|
* @param {ArrayBuffer} arrayBuffer The buffer with volume data
|
|
14
14
|
*/
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
class Volume {
|
|
17
|
+
|
|
18
|
+
constructor( xLength, yLength, zLength, type, arrayBuffer ) {
|
|
19
|
+
|
|
20
|
+
if ( xLength !== undefined ) {
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* @member {number} xLength Width of the volume in the IJK coordinate system
|
|
24
|
+
*/
|
|
25
|
+
this.xLength = Number( xLength ) || 1;
|
|
26
|
+
/**
|
|
27
|
+
* @member {number} yLength Height of the volume in the IJK coordinate system
|
|
28
|
+
*/
|
|
29
|
+
|
|
30
|
+
this.yLength = Number( yLength ) || 1;
|
|
31
|
+
/**
|
|
32
|
+
* @member {number} zLength Depth of the volume in the IJK coordinate system
|
|
33
|
+
*/
|
|
34
|
+
|
|
35
|
+
this.zLength = Number( zLength ) || 1;
|
|
36
|
+
/**
|
|
37
|
+
* @member {Array<string>} The order of the Axis dictated by the NRRD header
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
this.axisOrder = [ 'x', 'y', 'z' ];
|
|
41
|
+
/**
|
|
42
|
+
* @member {TypedArray} data Data of the volume
|
|
43
|
+
*/
|
|
44
|
+
|
|
45
|
+
switch ( type ) {
|
|
46
|
+
|
|
47
|
+
case 'Uint8':
|
|
48
|
+
case 'uint8':
|
|
49
|
+
case 'uchar':
|
|
50
|
+
case 'unsigned char':
|
|
51
|
+
case 'uint8_t':
|
|
52
|
+
this.data = new Uint8Array( arrayBuffer );
|
|
53
|
+
break;
|
|
54
|
+
|
|
55
|
+
case 'Int8':
|
|
56
|
+
case 'int8':
|
|
57
|
+
case 'signed char':
|
|
58
|
+
case 'int8_t':
|
|
59
|
+
this.data = new Int8Array( arrayBuffer );
|
|
60
|
+
break;
|
|
61
|
+
|
|
62
|
+
case 'Int16':
|
|
63
|
+
case 'int16':
|
|
64
|
+
case 'short':
|
|
65
|
+
case 'short int':
|
|
66
|
+
case 'signed short':
|
|
67
|
+
case 'signed short int':
|
|
68
|
+
case 'int16_t':
|
|
69
|
+
this.data = new Int16Array( arrayBuffer );
|
|
70
|
+
break;
|
|
71
|
+
|
|
72
|
+
case 'Uint16':
|
|
73
|
+
case 'uint16':
|
|
74
|
+
case 'ushort':
|
|
75
|
+
case 'unsigned short':
|
|
76
|
+
case 'unsigned short int':
|
|
77
|
+
case 'uint16_t':
|
|
78
|
+
this.data = new Uint16Array( arrayBuffer );
|
|
79
|
+
break;
|
|
80
|
+
|
|
81
|
+
case 'Int32':
|
|
82
|
+
case 'int32':
|
|
83
|
+
case 'int':
|
|
84
|
+
case 'signed int':
|
|
85
|
+
case 'int32_t':
|
|
86
|
+
this.data = new Int32Array( arrayBuffer );
|
|
87
|
+
break;
|
|
88
|
+
|
|
89
|
+
case 'Uint32':
|
|
90
|
+
case 'uint32':
|
|
91
|
+
case 'uint':
|
|
92
|
+
case 'unsigned int':
|
|
93
|
+
case 'uint32_t':
|
|
94
|
+
this.data = new Uint32Array( arrayBuffer );
|
|
95
|
+
break;
|
|
96
|
+
|
|
97
|
+
case 'longlong':
|
|
98
|
+
case 'long long':
|
|
99
|
+
case 'long long int':
|
|
100
|
+
case 'signed long long':
|
|
101
|
+
case 'signed long long int':
|
|
102
|
+
case 'int64':
|
|
103
|
+
case 'int64_t':
|
|
104
|
+
case 'ulonglong':
|
|
105
|
+
case 'unsigned long long':
|
|
106
|
+
case 'unsigned long long int':
|
|
107
|
+
case 'uint64':
|
|
108
|
+
case 'uint64_t':
|
|
109
|
+
throw new Error( 'Error in Volume constructor : this type is not supported in JavaScript' );
|
|
110
|
+
break;
|
|
111
|
+
|
|
112
|
+
case 'Float32':
|
|
113
|
+
case 'float32':
|
|
114
|
+
case 'float':
|
|
115
|
+
this.data = new Float32Array( arrayBuffer );
|
|
116
|
+
break;
|
|
117
|
+
|
|
118
|
+
case 'Float64':
|
|
119
|
+
case 'float64':
|
|
120
|
+
case 'double':
|
|
121
|
+
this.data = new Float64Array( arrayBuffer );
|
|
122
|
+
break;
|
|
123
|
+
|
|
124
|
+
default:
|
|
125
|
+
this.data = new Uint8Array( arrayBuffer );
|
|
17
126
|
|
|
18
|
-
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
if ( this.data.length !== this.xLength * this.yLength * this.zLength ) {
|
|
19
130
|
|
|
131
|
+
throw new Error( 'Error in Volume constructor, lengths are not matching arrayBuffer size' );
|
|
132
|
+
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
}
|
|
20
136
|
/**
|
|
21
|
-
* @member {
|
|
137
|
+
* @member {Array} spacing Spacing to apply to the volume from IJK to RAS coordinate system
|
|
22
138
|
*/
|
|
23
|
-
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
this.spacing = [ 1, 1, 1 ];
|
|
24
142
|
/**
|
|
25
|
-
* @member {
|
|
143
|
+
* @member {Array} offset Offset of the volume in the RAS coordinate system
|
|
26
144
|
*/
|
|
27
145
|
|
|
28
|
-
this.
|
|
146
|
+
this.offset = [ 0, 0, 0 ];
|
|
29
147
|
/**
|
|
30
|
-
* @member {
|
|
148
|
+
* @member {Martrix3} matrix The IJK to RAS matrix
|
|
31
149
|
*/
|
|
32
150
|
|
|
33
|
-
this.
|
|
151
|
+
this.matrix = new THREE.Matrix3();
|
|
152
|
+
this.matrix.identity();
|
|
34
153
|
/**
|
|
35
|
-
* @member {
|
|
154
|
+
* @member {Martrix3} inverseMatrix The RAS to IJK matrix
|
|
36
155
|
*/
|
|
37
156
|
|
|
38
|
-
this.axisOrder = [ 'x', 'y', 'z' ];
|
|
39
157
|
/**
|
|
40
|
-
* @member {
|
|
158
|
+
* @member {number} lowerThreshold The voxels with values under this threshold won't appear in the slices.
|
|
159
|
+
* If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume
|
|
41
160
|
*/
|
|
42
161
|
|
|
43
|
-
|
|
162
|
+
let lowerThreshold = - Infinity;
|
|
163
|
+
Object.defineProperty( this, 'lowerThreshold', {
|
|
164
|
+
get: function () {
|
|
44
165
|
|
|
45
|
-
|
|
46
|
-
case 'uint8':
|
|
47
|
-
case 'uchar':
|
|
48
|
-
case 'unsigned char':
|
|
49
|
-
case 'uint8_t':
|
|
50
|
-
this.data = new Uint8Array( arrayBuffer );
|
|
51
|
-
break;
|
|
166
|
+
return lowerThreshold;
|
|
52
167
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
case 'signed char':
|
|
56
|
-
case 'int8_t':
|
|
57
|
-
this.data = new Int8Array( arrayBuffer );
|
|
58
|
-
break;
|
|
168
|
+
},
|
|
169
|
+
set: function ( value ) {
|
|
59
170
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
case 'short':
|
|
63
|
-
case 'short int':
|
|
64
|
-
case 'signed short':
|
|
65
|
-
case 'signed short int':
|
|
66
|
-
case 'int16_t':
|
|
67
|
-
this.data = new Int16Array( arrayBuffer );
|
|
68
|
-
break;
|
|
171
|
+
lowerThreshold = value;
|
|
172
|
+
this.sliceList.forEach( function ( slice ) {
|
|
69
173
|
|
|
70
|
-
|
|
71
|
-
case 'uint16':
|
|
72
|
-
case 'ushort':
|
|
73
|
-
case 'unsigned short':
|
|
74
|
-
case 'unsigned short int':
|
|
75
|
-
case 'uint16_t':
|
|
76
|
-
this.data = new Uint16Array( arrayBuffer );
|
|
77
|
-
break;
|
|
174
|
+
slice.geometryNeedsUpdate = true;
|
|
78
175
|
|
|
79
|
-
|
|
80
|
-
case 'int32':
|
|
81
|
-
case 'int':
|
|
82
|
-
case 'signed int':
|
|
83
|
-
case 'int32_t':
|
|
84
|
-
this.data = new Int32Array( arrayBuffer );
|
|
85
|
-
break;
|
|
176
|
+
} );
|
|
86
177
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
break;
|
|
178
|
+
}
|
|
179
|
+
} );
|
|
180
|
+
/**
|
|
181
|
+
* @member {number} upperThreshold The voxels with values over this threshold won't appear in the slices.
|
|
182
|
+
* If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume
|
|
183
|
+
*/
|
|
94
184
|
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
case 'signed long long':
|
|
99
|
-
case 'signed long long int':
|
|
100
|
-
case 'int64':
|
|
101
|
-
case 'int64_t':
|
|
102
|
-
case 'ulonglong':
|
|
103
|
-
case 'unsigned long long':
|
|
104
|
-
case 'unsigned long long int':
|
|
105
|
-
case 'uint64':
|
|
106
|
-
case 'uint64_t':
|
|
107
|
-
throw new Error( 'Error in Volume constructor : this type is not supported in JavaScript' );
|
|
108
|
-
break;
|
|
185
|
+
let upperThreshold = Infinity;
|
|
186
|
+
Object.defineProperty( this, 'upperThreshold', {
|
|
187
|
+
get: function () {
|
|
109
188
|
|
|
110
|
-
|
|
111
|
-
case 'float32':
|
|
112
|
-
case 'float':
|
|
113
|
-
this.data = new Float32Array( arrayBuffer );
|
|
114
|
-
break;
|
|
189
|
+
return upperThreshold;
|
|
115
190
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
case 'double':
|
|
119
|
-
this.data = new Float64Array( arrayBuffer );
|
|
120
|
-
break;
|
|
191
|
+
},
|
|
192
|
+
set: function ( value ) {
|
|
121
193
|
|
|
122
|
-
|
|
123
|
-
this.
|
|
194
|
+
upperThreshold = value;
|
|
195
|
+
this.sliceList.forEach( function ( slice ) {
|
|
124
196
|
|
|
125
|
-
|
|
197
|
+
slice.geometryNeedsUpdate = true;
|
|
126
198
|
|
|
127
|
-
|
|
199
|
+
} );
|
|
128
200
|
|
|
129
|
-
|
|
201
|
+
}
|
|
202
|
+
} );
|
|
203
|
+
/**
|
|
204
|
+
* @member {Array} sliceList The list of all the slices associated to this volume
|
|
205
|
+
*/
|
|
130
206
|
|
|
131
|
-
|
|
207
|
+
this.sliceList = [];
|
|
208
|
+
/**
|
|
209
|
+
* @member {Array} RASDimensions This array holds the dimensions of the volume in the RAS space
|
|
210
|
+
*/
|
|
132
211
|
|
|
133
212
|
}
|
|
134
|
-
/**
|
|
135
|
-
* @member {Array} spacing Spacing to apply to the volume from IJK to RAS coordinate system
|
|
136
|
-
*/
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
this.spacing = [ 1, 1, 1 ];
|
|
140
|
-
/**
|
|
141
|
-
* @member {Array} offset Offset of the volume in the RAS coordinate system
|
|
142
|
-
*/
|
|
143
|
-
|
|
144
|
-
this.offset = [ 0, 0, 0 ];
|
|
145
|
-
/**
|
|
146
|
-
* @member {Martrix3} matrix The IJK to RAS matrix
|
|
147
|
-
*/
|
|
148
|
-
|
|
149
|
-
this.matrix = new THREE.Matrix3();
|
|
150
|
-
this.matrix.identity();
|
|
151
|
-
/**
|
|
152
|
-
* @member {Martrix3} inverseMatrix The RAS to IJK matrix
|
|
153
|
-
*/
|
|
154
|
-
|
|
155
|
-
/**
|
|
156
|
-
* @member {number} lowerThreshold The voxels with values under this threshold won't appear in the slices.
|
|
157
|
-
* If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume
|
|
158
|
-
*/
|
|
159
|
-
|
|
160
|
-
let lowerThreshold = - Infinity;
|
|
161
|
-
Object.defineProperty( this, 'lowerThreshold', {
|
|
162
|
-
get: function () {
|
|
163
|
-
|
|
164
|
-
return lowerThreshold;
|
|
165
|
-
|
|
166
|
-
},
|
|
167
|
-
set: function ( value ) {
|
|
168
|
-
|
|
169
|
-
lowerThreshold = value;
|
|
170
|
-
this.sliceList.forEach( function ( slice ) {
|
|
171
|
-
|
|
172
|
-
slice.geometryNeedsUpdate = true;
|
|
173
|
-
|
|
174
|
-
} );
|
|
175
|
-
|
|
176
|
-
}
|
|
177
|
-
} );
|
|
178
|
-
/**
|
|
179
|
-
* @member {number} upperThreshold The voxels with values over this threshold won't appear in the slices.
|
|
180
|
-
* If changed, geometryNeedsUpdate is automatically set to true on all the slices associated to this volume
|
|
181
|
-
*/
|
|
182
|
-
|
|
183
|
-
let upperThreshold = Infinity;
|
|
184
|
-
Object.defineProperty( this, 'upperThreshold', {
|
|
185
|
-
get: function () {
|
|
186
|
-
|
|
187
|
-
return upperThreshold;
|
|
188
|
-
|
|
189
|
-
},
|
|
190
|
-
set: function ( value ) {
|
|
191
|
-
|
|
192
|
-
upperThreshold = value;
|
|
193
|
-
this.sliceList.forEach( function ( slice ) {
|
|
194
|
-
|
|
195
|
-
slice.geometryNeedsUpdate = true;
|
|
196
|
-
|
|
197
|
-
} );
|
|
198
|
-
|
|
199
|
-
}
|
|
200
|
-
} );
|
|
201
|
-
/**
|
|
202
|
-
* @member {Array} sliceList The list of all the slices associated to this volume
|
|
203
|
-
*/
|
|
204
|
-
|
|
205
|
-
this.sliceList = [];
|
|
206
|
-
/**
|
|
207
|
-
* @member {Array} RASDimensions This array holds the dimensions of the volume in the RAS space
|
|
208
|
-
*/
|
|
209
|
-
|
|
210
|
-
}
|
|
211
|
-
|
|
212
|
-
Volume.prototype = {
|
|
213
|
-
constructor: Volume,
|
|
214
|
-
|
|
215
213
|
/**
|
|
216
214
|
* @member {Function} getData Shortcut for data[access(i,j,k)]
|
|
217
215
|
* @memberof Volume
|
|
@@ -220,12 +218,13 @@
|
|
|
220
218
|
* @param {number} k Third coordinate
|
|
221
219
|
* @returns {number} value in the data array
|
|
222
220
|
*/
|
|
223
|
-
getData: function ( i, j, k ) {
|
|
224
221
|
|
|
225
|
-
return this.data[ k * this.xLength * this.yLength + j * this.xLength + i ];
|
|
226
222
|
|
|
227
|
-
|
|
223
|
+
getData( i, j, k ) {
|
|
224
|
+
|
|
225
|
+
return this.data[ k * this.xLength * this.yLength + j * this.xLength + i ];
|
|
228
226
|
|
|
227
|
+
}
|
|
229
228
|
/**
|
|
230
229
|
* @member {Function} access compute the index in the data array corresponding to the given coordinates in IJK system
|
|
231
230
|
* @memberof Volume
|
|
@@ -234,27 +233,29 @@
|
|
|
234
233
|
* @param {number} k Third coordinate
|
|
235
234
|
* @returns {number} index
|
|
236
235
|
*/
|
|
237
|
-
access: function ( i, j, k ) {
|
|
238
236
|
|
|
239
|
-
return k * this.xLength * this.yLength + j * this.xLength + i;
|
|
240
237
|
|
|
241
|
-
|
|
238
|
+
access( i, j, k ) {
|
|
239
|
+
|
|
240
|
+
return k * this.xLength * this.yLength + j * this.xLength + i;
|
|
242
241
|
|
|
242
|
+
}
|
|
243
243
|
/**
|
|
244
244
|
* @member {Function} reverseAccess Retrieve the IJK coordinates of the voxel corresponding of the given index in the data
|
|
245
245
|
* @memberof Volume
|
|
246
246
|
* @param {number} index index of the voxel
|
|
247
247
|
* @returns {Array} [x,y,z]
|
|
248
248
|
*/
|
|
249
|
-
|
|
249
|
+
|
|
250
|
+
|
|
251
|
+
reverseAccess( index ) {
|
|
250
252
|
|
|
251
253
|
const z = Math.floor( index / ( this.yLength * this.xLength ) );
|
|
252
254
|
const y = Math.floor( ( index - z * this.yLength * this.xLength ) / this.xLength );
|
|
253
255
|
const x = index - z * this.yLength * this.xLength - y * this.xLength;
|
|
254
256
|
return [ x, y, z ];
|
|
255
257
|
|
|
256
|
-
}
|
|
257
|
-
|
|
258
|
+
}
|
|
258
259
|
/**
|
|
259
260
|
* @member {Function} map Apply a function to all the voxels, be careful, the value will be replaced
|
|
260
261
|
* @memberof Volume
|
|
@@ -265,7 +266,9 @@
|
|
|
265
266
|
* @param {Object} context You can specify a context in which call the function, default if this Volume
|
|
266
267
|
* @returns {Volume} this
|
|
267
268
|
*/
|
|
268
|
-
|
|
269
|
+
|
|
270
|
+
|
|
271
|
+
map( functionToMap, context ) {
|
|
269
272
|
|
|
270
273
|
const length = this.data.length;
|
|
271
274
|
context = context || this;
|
|
@@ -278,8 +281,7 @@
|
|
|
278
281
|
|
|
279
282
|
return this;
|
|
280
283
|
|
|
281
|
-
}
|
|
282
|
-
|
|
284
|
+
}
|
|
283
285
|
/**
|
|
284
286
|
* @member {Function} extractPerpendicularPlane 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.
|
|
285
287
|
* @memberof Volume
|
|
@@ -287,7 +289,9 @@
|
|
|
287
289
|
* @param {number} index the index of the slice
|
|
288
290
|
* @returns {Object} an object containing all the usefull information on the geometry of the slice
|
|
289
291
|
*/
|
|
290
|
-
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
extractPerpendicularPlane( axis, RASIndex ) {
|
|
291
295
|
|
|
292
296
|
let firstSpacing, secondSpacing, positionOffset, IJKIndex;
|
|
293
297
|
const axisInIJK = new THREE.Vector3(),
|
|
@@ -386,8 +390,7 @@
|
|
|
386
390
|
planeHeight: planeHeight
|
|
387
391
|
};
|
|
388
392
|
|
|
389
|
-
}
|
|
390
|
-
|
|
393
|
+
}
|
|
391
394
|
/**
|
|
392
395
|
* @member {Function} extractSlice Returns a slice corresponding to the given axis and index
|
|
393
396
|
* The coordinate are given in the Right Anterior Superior coordinate format
|
|
@@ -396,21 +399,24 @@
|
|
|
396
399
|
* @param {number} index the index of the slice
|
|
397
400
|
* @returns {VolumeSlice} the extracted slice
|
|
398
401
|
*/
|
|
399
|
-
|
|
402
|
+
|
|
403
|
+
|
|
404
|
+
extractSlice( axis, index ) {
|
|
400
405
|
|
|
401
406
|
const slice = new THREE.VolumeSlice( this, index, axis );
|
|
402
407
|
this.sliceList.push( slice );
|
|
403
408
|
return slice;
|
|
404
409
|
|
|
405
|
-
}
|
|
406
|
-
|
|
410
|
+
}
|
|
407
411
|
/**
|
|
408
412
|
* @member {Function} repaintAllSlices Call repaint on all the slices extracted from this volume
|
|
409
413
|
* @see THREE.VolumeSlice.repaint
|
|
410
414
|
* @memberof Volume
|
|
411
415
|
* @returns {Volume} this
|
|
412
416
|
*/
|
|
413
|
-
|
|
417
|
+
|
|
418
|
+
|
|
419
|
+
repaintAllSlices() {
|
|
414
420
|
|
|
415
421
|
this.sliceList.forEach( function ( slice ) {
|
|
416
422
|
|
|
@@ -419,14 +425,15 @@
|
|
|
419
425
|
} );
|
|
420
426
|
return this;
|
|
421
427
|
|
|
422
|
-
}
|
|
423
|
-
|
|
428
|
+
}
|
|
424
429
|
/**
|
|
425
430
|
* @member {Function} computeMinMax Compute the minimum and the maximum of the data in the volume
|
|
426
431
|
* @memberof Volume
|
|
427
432
|
* @returns {Array} [min,max]
|
|
428
433
|
*/
|
|
429
|
-
|
|
434
|
+
|
|
435
|
+
|
|
436
|
+
computeMinMax() {
|
|
430
437
|
|
|
431
438
|
let min = Infinity;
|
|
432
439
|
let max = - Infinity; // buffer the length
|
|
@@ -451,7 +458,8 @@
|
|
|
451
458
|
return [ min, max ];
|
|
452
459
|
|
|
453
460
|
}
|
|
454
|
-
|
|
461
|
+
|
|
462
|
+
}
|
|
455
463
|
|
|
456
464
|
THREE.Volume = Volume;
|
|
457
465
|
|