super-three 0.173.5 → 0.176.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 +21993 -1359
- package/build/three.core.js +21129 -1188
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +835 -142
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +8 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +19493 -17617
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +19477 -17617
- 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 +144 -42
- 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 +194 -71
- 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 +74 -30
- 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 +51 -5
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +36 -1
- package/examples/jsm/loaders/DDSLoader.js +25 -1
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +71 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +222 -9
- 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 +87 -19
- 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 +56 -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 +90 -70
- 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 +105 -13
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +109 -73
- package/examples/jsm/misc/VolumeSlice.js +91 -48
- 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 +75 -2
- 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 +134 -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 +268 -134
- 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/AST.js +10 -0
- package/examples/jsm/transpiler/GLSLDecoder.js +17 -3
- package/examples/jsm/transpiler/TSLEncoder.js +83 -15
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +24 -25
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +2 -3
- package/examples/jsm/tsl/display/AnamorphicNode.js +8 -9
- package/examples/jsm/tsl/display/BleachBypass.js +1 -2
- package/examples/jsm/tsl/display/BloomNode.js +15 -16
- package/examples/jsm/tsl/display/DenoiseNode.js +9 -10
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +5 -6
- package/examples/jsm/tsl/display/DotScreenNode.js +5 -6
- package/examples/jsm/tsl/display/FXAANode.js +2 -3
- package/examples/jsm/tsl/display/FilmNode.js +9 -8
- package/examples/jsm/tsl/display/GTAONode.js +11 -12
- package/examples/jsm/tsl/display/GaussianBlurNode.js +14 -14
- package/examples/jsm/tsl/display/LensflareNode.js +15 -16
- package/examples/jsm/tsl/display/Lut3DNode.js +4 -5
- package/examples/jsm/tsl/display/MotionBlur.js +1 -2
- package/examples/jsm/tsl/display/OutlineNode.js +7 -8
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +2 -3
- package/examples/jsm/tsl/display/PixelationPassNode.js +14 -15
- package/examples/jsm/tsl/display/RGBShiftNode.js +5 -6
- package/examples/jsm/tsl/display/SMAANode.js +13 -7
- package/examples/jsm/tsl/display/SSAAPassNode.js +7 -7
- package/examples/jsm/tsl/display/SSRNode.js +6 -7
- package/examples/jsm/tsl/display/Sepia.js +1 -2
- package/examples/jsm/tsl/display/SobelOperatorNode.js +2 -3
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +4 -4
- package/examples/jsm/tsl/display/StereoPassNode.js +2 -3
- package/examples/jsm/tsl/display/TRAAPassNode.js +11 -10
- package/examples/jsm/tsl/display/TransitionNode.js +4 -5
- package/examples/jsm/tsl/display/hashBlur.js +1 -2
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +33 -7
- package/examples/jsm/tsl/math/Bayer.js +31 -0
- package/examples/jsm/tsl/utils/Raymarching.js +67 -0
- 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 +3 -4
- package/src/Three.TSL.js +7 -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 +169 -19
- 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/Audio.js +339 -0
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +76 -0
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +28 -0
- package/src/cameras/Camera.js +47 -0
- package/src/cameras/CubeCamera.js +66 -0
- package/src/cameras/OrthographicCamera.js +109 -0
- package/src/cameras/PerspectiveCamera.js +163 -40
- package/src/cameras/StereoCamera.js +46 -0
- 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/EventDispatcher.js +44 -2
- 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 +593 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +170 -11
- 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 +88 -1
- package/src/extras/DataUtils.js +48 -8
- package/src/extras/Earcut.js +13 -780
- package/src/extras/ImageUtils.js +20 -2
- package/src/extras/PMREMGenerator.js +41 -25
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +95 -15
- package/src/extras/core/Curve.js +150 -50
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +29 -3
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +63 -0
- package/src/extras/core/ShapePath.js +76 -0
- package/src/extras/curves/ArcCurve.js +22 -0
- package/src/extras/curves/CatmullRomCurve3.js +89 -18
- package/src/extras/curves/CubicBezierCurve.js +67 -0
- package/src/extras/curves/CubicBezierCurve3.js +50 -0
- package/src/extras/curves/EllipseCurve.js +102 -0
- package/src/extras/curves/LineCurve.js +36 -0
- package/src/extras/curves/LineCurve3.js +36 -0
- package/src/extras/curves/QuadraticBezierCurve.js +59 -0
- package/src/extras/curves/QuadraticBezierCurve3.js +43 -0
- package/src/extras/curves/SplineCurve.js +48 -0
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/BoxGeometry.js +38 -0
- package/src/geometries/CapsuleGeometry.js +34 -0
- package/src/geometries/CircleGeometry.js +40 -0
- package/src/geometries/ConeGeometry.js +38 -0
- package/src/geometries/CylinderGeometry.js +39 -0
- package/src/geometries/DodecahedronGeometry.js +32 -0
- package/src/geometries/EdgesGeometry.js +28 -0
- package/src/geometries/ExtrudeGeometry.js +112 -28
- package/src/geometries/IcosahedronGeometry.js +32 -0
- package/src/geometries/LatheGeometry.js +40 -0
- package/src/geometries/OctahedronGeometry.js +32 -0
- package/src/geometries/PlaneGeometry.js +34 -0
- package/src/geometries/PolyhedronGeometry.js +29 -0
- package/src/geometries/RingGeometry.js +36 -0
- package/src/geometries/ShapeGeometry.js +37 -0
- package/src/geometries/SphereGeometry.js +37 -0
- package/src/geometries/TetrahedronGeometry.js +32 -0
- package/src/geometries/TorusGeometry.js +35 -0
- package/src/geometries/TorusKnotGeometry.js +38 -0
- package/src/geometries/TubeGeometry.js +49 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +60 -3
- package/src/helpers/AxesHelper.js +28 -0
- package/src/helpers/Box3Helper.js +28 -0
- package/src/helpers/BoxHelper.js +43 -7
- package/src/helpers/CameraHelper.js +45 -5
- package/src/helpers/DirectionalLightHelper.js +52 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +39 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -0
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +39 -2
- package/src/helpers/SpotLightHelper.js +40 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +57 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +32 -0
- package/src/lights/Light.js +36 -0
- package/src/lights/LightProbe.js +43 -0
- package/src/lights/LightShadow.js +159 -0
- package/src/lights/PointLight.js +59 -0
- package/src/lights/PointLightShadow.js +21 -0
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +102 -0
- package/src/lights/SpotLightShadow.js +22 -0
- package/src/lights/webgpu/IESSpotLight.js +21 -0
- 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 +130 -0
- 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 +13 -9
- package/src/loaders/nodes/NodeMaterialLoader.js +6 -6
- package/src/loaders/nodes/NodeObjectLoader.js +12 -12
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +481 -4
- 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 +14 -14
- package/src/materials/nodes/LineBasicNodeMaterial.js +3 -3
- package/src/materials/nodes/LineDashedNodeMaterial.js +12 -12
- package/src/materials/nodes/MeshBasicNodeMaterial.js +7 -7
- package/src/materials/nodes/MeshLambertNodeMaterial.js +5 -5
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +3 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +8 -4
- package/src/materials/nodes/MeshPhongNodeMaterial.js +9 -9
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +43 -43
- package/src/materials/nodes/MeshSSSNodeMaterial.js +18 -21
- package/src/materials/nodes/MeshStandardNodeMaterial.js +11 -11
- package/src/materials/nodes/MeshToonNodeMaterial.js +4 -4
- package/src/materials/nodes/NodeMaterial.js +66 -47
- package/src/materials/nodes/PointsNodeMaterial.js +6 -6
- package/src/materials/nodes/ShadowNodeMaterial.js +13 -4
- package/src/materials/nodes/SpriteNodeMaterial.js +17 -9
- package/src/materials/nodes/VolumeNodeMaterial.js +25 -128
- package/src/materials/nodes/manager/NodeMaterialObserver.js +8 -8
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +243 -0
- package/src/math/Color.js +343 -0
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +137 -4
- package/src/math/Frustum.js +83 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +94 -0
- package/src/math/MathUtils.js +405 -19
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +368 -3
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +262 -6
- package/src/math/Ray.js +160 -0
- package/src/math/Sphere.js +147 -0
- package/src/math/Spherical.js +70 -8
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +206 -2
- package/src/math/Vector2.js +388 -2
- package/src/math/Vector3.js +541 -4
- package/src/math/Vector4.js +393 -0
- package/src/math/interpolants/CubicInterpolant.js +10 -1
- package/src/math/interpolants/DiscreteInterpolant.js +10 -2
- package/src/math/interpolants/LinearInterpolant.js +13 -0
- package/src/math/interpolants/QuaternionLinearInterpolant.js +10 -1
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/TSL.js +1 -0
- package/src/nodes/accessors/AccessorsUtils.js +4 -2
- package/src/nodes/accessors/Arrays.js +6 -6
- package/src/nodes/accessors/BatchNode.js +10 -11
- package/src/nodes/accessors/Bitangent.js +6 -2
- package/src/nodes/accessors/BufferAttributeNode.js +33 -31
- package/src/nodes/accessors/BufferNode.js +12 -13
- package/src/nodes/accessors/BuiltinNode.js +7 -8
- package/src/nodes/accessors/Camera.js +9 -2
- package/src/nodes/accessors/ClippingNode.js +4 -4
- package/src/nodes/accessors/CubeTextureNode.js +17 -19
- package/src/nodes/accessors/InstanceNode.js +10 -11
- package/src/nodes/accessors/InstancedMeshNode.js +3 -4
- package/src/nodes/accessors/Lights.js +12 -15
- package/src/nodes/accessors/MaterialNode.js +45 -9
- package/src/nodes/accessors/MaterialProperties.js +51 -2
- package/src/nodes/accessors/MaterialReferenceNode.js +11 -12
- package/src/nodes/accessors/ModelNode.js +20 -3
- package/src/nodes/accessors/ModelViewProjectionNode.js +1 -2
- package/src/nodes/accessors/MorphNode.js +29 -26
- package/src/nodes/accessors/Normal.js +11 -3
- package/src/nodes/accessors/Object3DNode.js +51 -16
- package/src/nodes/accessors/PointUVNode.js +2 -3
- package/src/nodes/accessors/Position.js +8 -3
- package/src/nodes/accessors/ReferenceBaseNode.js +29 -29
- package/src/nodes/accessors/ReferenceNode.js +31 -31
- package/src/nodes/accessors/ReflectVector.js +4 -2
- package/src/nodes/accessors/RendererReferenceNode.js +9 -10
- package/src/nodes/accessors/SceneNode.js +5 -4
- package/src/nodes/accessors/SkinningNode.js +53 -44
- package/src/nodes/accessors/StorageBufferNode.js +24 -24
- package/src/nodes/accessors/StorageTextureNode.js +17 -17
- package/src/nodes/accessors/Tangent.js +6 -2
- package/src/nodes/accessors/Texture3DNode.js +11 -12
- package/src/nodes/accessors/TextureBicubic.js +2 -3
- package/src/nodes/accessors/TextureNode.js +68 -47
- package/src/nodes/accessors/TextureSizeNode.js +5 -6
- package/src/nodes/accessors/UV.js +2 -3
- package/src/nodes/accessors/UniformArrayNode.js +24 -24
- package/src/nodes/accessors/UserDataNode.js +11 -12
- package/src/nodes/accessors/VelocityNode.js +4 -5
- package/src/nodes/accessors/VertexColorNode.js +7 -8
- package/src/nodes/code/CodeNode.js +15 -13
- package/src/nodes/code/ExpressionNode.js +8 -9
- package/src/nodes/code/FunctionCallNode.js +29 -9
- package/src/nodes/code/FunctionNode.js +1 -1
- package/src/nodes/code/ScriptableNode.js +27 -28
- package/src/nodes/code/ScriptableValueNode.js +11 -12
- package/src/nodes/core/ArrayNode.js +29 -12
- package/src/nodes/core/AssignNode.js +4 -5
- package/src/nodes/core/AttributeNode.js +8 -9
- package/src/nodes/core/BypassNode.js +3 -4
- package/src/nodes/core/CacheNode.js +5 -6
- package/src/nodes/core/ConstNode.js +4 -4
- package/src/nodes/core/ContextNode.js +9 -9
- package/src/nodes/core/IndexNode.js +8 -4
- package/src/nodes/core/InputNode.js +7 -7
- package/src/nodes/core/LightingModel.js +17 -17
- package/src/nodes/core/MRTNode.js +9 -10
- package/src/nodes/core/Node.js +49 -37
- package/src/nodes/core/NodeAttribute.js +7 -7
- package/src/nodes/core/NodeBuilder.js +248 -175
- package/src/nodes/core/NodeCache.js +4 -4
- package/src/nodes/core/NodeCode.js +6 -6
- package/src/nodes/core/NodeFrame.js +10 -10
- package/src/nodes/core/NodeFunction.js +8 -8
- package/src/nodes/core/NodeFunctionInput.js +8 -8
- package/src/nodes/core/NodeParser.js +1 -1
- package/src/nodes/core/NodeUniform.js +7 -7
- package/src/nodes/core/NodeUtils.js +22 -24
- package/src/nodes/core/NodeVar.js +9 -9
- package/src/nodes/core/NodeVarying.js +4 -4
- package/src/nodes/core/OutputStructNode.js +2 -3
- package/src/nodes/core/ParameterNode.js +6 -7
- package/src/nodes/core/PropertyNode.js +41 -13
- package/src/nodes/core/StackNode.js +11 -12
- package/src/nodes/core/StructNode.js +2 -3
- package/src/nodes/core/StructTypeNode.js +10 -6
- package/src/nodes/core/TempNode.js +3 -3
- package/src/nodes/core/UniformGroupNode.js +15 -12
- package/src/nodes/core/UniformNode.js +9 -10
- package/src/nodes/core/VarNode.js +14 -18
- package/src/nodes/core/VaryingNode.js +10 -10
- package/src/nodes/core/constants.js +0 -2
- package/src/nodes/display/BlendModes.js +21 -14
- package/src/nodes/display/BumpMapNode.js +5 -6
- package/src/nodes/display/ColorAdjustment.js +13 -9
- package/src/nodes/display/ColorSpaceFunctions.js +4 -4
- package/src/nodes/display/ColorSpaceNode.js +15 -12
- package/src/nodes/display/FrontFacingNode.js +3 -3
- package/src/nodes/display/NormalMapNode.js +5 -6
- package/src/nodes/display/PassNode.js +122 -35
- package/src/nodes/display/PosterizeNode.js +2 -3
- package/src/nodes/display/RenderOutputNode.js +8 -9
- package/src/nodes/display/ScreenNode.js +16 -7
- package/src/nodes/display/ToneMappingFunctions.js +12 -8
- package/src/nodes/display/ToneMappingNode.js +8 -8
- package/src/nodes/display/ToonOutlinePassNode.js +3 -4
- package/src/nodes/display/ViewportDepthNode.js +15 -7
- package/src/nodes/display/ViewportDepthTextureNode.js +6 -7
- package/src/nodes/display/ViewportSharedTextureNode.js +6 -7
- package/src/nodes/display/ViewportTextureNode.js +16 -16
- package/src/nodes/fog/Fog.js +5 -2
- package/src/nodes/functions/BSDF/LTC.js +45 -1
- package/src/nodes/functions/BasicLightingModel.js +5 -8
- package/src/nodes/functions/PhongLightingModel.js +6 -8
- package/src/nodes/functions/PhysicalLightingModel.js +40 -42
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/ToonLightingModel.js +5 -6
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +8 -8
- package/src/nodes/geometry/RangeNode.js +4 -5
- package/src/nodes/gpgpu/AtomicFunctionNode.js +33 -48
- package/src/nodes/gpgpu/BarrierNode.js +6 -4
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +26 -31
- package/src/nodes/gpgpu/ComputeNode.js +43 -16
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +16 -17
- package/src/nodes/lighting/AONode.js +2 -2
- package/src/nodes/lighting/AmbientLightNode.js +1 -1
- package/src/nodes/lighting/AnalyticLightNode.js +50 -9
- package/src/nodes/lighting/BasicLightMapNode.js +2 -2
- package/src/nodes/lighting/DirectionalLightNode.js +3 -12
- package/src/nodes/lighting/EnvironmentNode.js +5 -8
- package/src/nodes/lighting/HemisphereLightNode.js +1 -1
- package/src/nodes/lighting/LightProbeNode.js +1 -1
- package/src/nodes/lighting/LightUtils.js +1 -5
- package/src/nodes/lighting/LightingContextNode.js +10 -10
- package/src/nodes/lighting/LightingNode.js +1 -1
- package/src/nodes/lighting/LightsNode.js +68 -25
- package/src/nodes/lighting/PointLightNode.js +12 -27
- package/src/nodes/lighting/PointShadowNode.js +5 -6
- package/src/nodes/lighting/RectAreaLightNode.js +5 -10
- package/src/nodes/lighting/ShadowBaseNode.js +8 -9
- package/src/nodes/lighting/ShadowNode.js +28 -15
- package/src/nodes/lighting/SpotLightNode.js +8 -19
- package/src/nodes/math/ConditionalNode.js +26 -9
- package/src/nodes/math/Hash.js +2 -3
- package/src/nodes/math/MathNode.js +217 -150
- package/src/nodes/math/MathUtils.js +8 -6
- package/src/nodes/math/OperatorNode.js +198 -89
- package/src/nodes/math/TriNoise3D.js +2 -3
- package/src/nodes/parsers/GLSLNodeFunction.js +3 -3
- package/src/nodes/parsers/GLSLNodeParser.js +1 -1
- package/src/nodes/pmrem/PMREMNode.js +61 -37
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/procedural/Checker.js +2 -3
- package/src/nodes/shapes/Shapes.js +2 -3
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +117 -19
- package/src/nodes/utils/ArrayElementNode.js +5 -3
- package/src/nodes/utils/ConvertNode.js +3 -3
- package/src/nodes/utils/CubeMapNode.js +7 -8
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/Discard.js +5 -5
- package/src/nodes/utils/EquirectUVNode.js +3 -4
- package/src/nodes/utils/FlipNode.js +3 -3
- package/src/nodes/utils/FunctionOverloadingNode.js +3 -4
- package/src/nodes/utils/JoinNode.js +29 -4
- package/src/nodes/utils/LoopNode.js +67 -35
- package/src/nodes/utils/MatcapUVNode.js +1 -2
- package/src/nodes/utils/MaxMipLevelNode.js +4 -5
- package/src/nodes/utils/MemberNode.js +2 -2
- package/src/nodes/utils/Oscillators.js +8 -6
- package/src/nodes/utils/Packing.js +4 -4
- package/src/nodes/utils/PostProcessingUtils.js +6 -5
- package/src/nodes/utils/RTTNode.js +19 -19
- package/src/nodes/utils/ReflectorNode.js +35 -25
- package/src/nodes/utils/RemapNode.js +9 -9
- package/src/nodes/utils/RotateNode.js +3 -4
- package/src/nodes/utils/SetNode.js +3 -3
- package/src/nodes/utils/SplitNode.js +5 -5
- package/src/nodes/utils/SpriteSheetUVNode.js +4 -5
- package/src/nodes/utils/SpriteUtils.js +5 -6
- package/src/nodes/utils/StorageArrayElementNode.js +3 -4
- package/src/nodes/utils/Timer.js +9 -5
- package/src/nodes/utils/TriplanarTexturesNode.js +20 -20
- package/src/nodes/utils/UVUtils.js +4 -4
- package/src/nodes/utils/ViewportUtils.js +3 -4
- package/src/objects/BatchedMesh.js +319 -32
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +4 -4
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +120 -2
- package/src/objects/LOD.js +99 -5
- package/src/objects/Line.js +82 -0
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +18 -0
- package/src/objects/Mesh.js +75 -0
- package/src/objects/Points.js +60 -0
- package/src/objects/Skeleton.js +105 -0
- package/src/objects/SkinnedMesh.js +99 -5
- package/src/objects/Sprite.js +54 -0
- 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 +622 -83
- package/src/renderers/common/Animation.js +6 -6
- package/src/renderers/common/Attributes.js +3 -3
- package/src/renderers/common/Backend.js +40 -31
- package/src/renderers/common/Background.js +4 -3
- package/src/renderers/common/BindGroup.js +5 -5
- package/src/renderers/common/Binding.js +4 -4
- package/src/renderers/common/Bindings.js +10 -0
- package/src/renderers/common/Buffer.js +5 -5
- package/src/renderers/common/BufferUtils.js +7 -9
- package/src/renderers/common/BundleGroup.js +6 -6
- package/src/renderers/common/ChainMap.js +3 -3
- package/src/renderers/common/ClippingContext.js +8 -8
- package/src/renderers/common/Color4.js +8 -8
- package/src/renderers/common/ComputePipeline.js +2 -2
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/DataMap.js +2 -2
- package/src/renderers/common/Geometries.js +6 -6
- package/src/renderers/common/IndirectStorageBufferAttribute.js +3 -3
- package/src/renderers/common/Info.js +17 -17
- package/src/renderers/common/Pipeline.js +3 -3
- package/src/renderers/common/Pipelines.js +12 -12
- package/src/renderers/common/PostProcessing.js +13 -1
- package/src/renderers/common/ProgrammableStage.js +11 -11
- package/src/renderers/common/QuadMesh.js +5 -3
- package/src/renderers/common/RenderContext.js +24 -24
- package/src/renderers/common/RenderContexts.js +4 -4
- package/src/renderers/common/RenderList.js +16 -16
- package/src/renderers/common/RenderObject.js +27 -27
- package/src/renderers/common/RenderObjects.js +4 -4
- package/src/renderers/common/RenderPipeline.js +1 -1
- package/src/renderers/common/Renderer.js +272 -200
- package/src/renderers/common/RendererUtils.js +0 -2
- package/src/renderers/common/SampledTexture.js +20 -20
- package/src/renderers/common/Sampler.js +5 -5
- package/src/renderers/common/StorageBuffer.js +2 -2
- package/src/renderers/common/StorageBufferAttribute.js +4 -4
- package/src/renderers/common/StorageInstancedBufferAttribute.js +4 -4
- package/src/renderers/common/StorageTexture.js +6 -6
- package/src/renderers/common/Textures.js +6 -6
- package/src/renderers/common/TimestampQueryPool.js +66 -7
- package/src/renderers/common/Uniform.js +26 -26
- package/src/renderers/common/UniformBuffer.js +2 -2
- package/src/renderers/common/UniformsGroup.js +18 -18
- package/src/renderers/common/XRManager.js +369 -54
- package/src/renderers/common/XRRenderTarget.js +5 -5
- package/src/renderers/common/extras/PMREMGenerator.js +62 -37
- package/src/renderers/common/nodes/NodeBuilderState.js +7 -7
- package/src/renderers/common/nodes/NodeLibrary.js +13 -13
- package/src/renderers/common/nodes/NodeSampledTexture.js +12 -12
- package/src/renderers/common/nodes/NodeSampler.js +1 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +1 -1
- package/src/renderers/common/nodes/NodeUniform.js +9 -9
- package/src/renderers/common/nodes/NodeUniformsGroup.js +3 -3
- package/src/renderers/common/nodes/Nodes.js +13 -13
- 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 +19 -19
- package/src/renderers/webgl-fallback/WebGLBackend.js +163 -146
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +4 -4
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +89 -99
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +2 -2
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +5 -5
- package/src/renderers/webgl-fallback/utils/WebGLState.js +97 -47
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +79 -31
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +37 -29
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +3 -3
- package/src/renderers/webgpu/WebGPUBackend.js +200 -119
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +3 -13
- package/src/renderers/webgpu/WebGPURenderer.js +19 -13
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +171 -178
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +3 -3
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +43 -9
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +2 -2
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +18 -10
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +9 -9
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +37 -37
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +31 -18
- package/src/renderers/webgpu/utils/WebGPUUtils.js +9 -9
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +185 -9
- package/src/scenes/Fog.js +60 -0
- package/src/scenes/FogExp2.js +51 -0
- package/src/scenes/Scene.js +88 -0
- 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 +61 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +362 -3
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -1,20 +1,9 @@
|
|
|
1
1
|
import NodeMaterial from './NodeMaterial.js';
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
import { modelWorldMatrixInverse } from '../../nodes/accessors/ModelNode.js';
|
|
5
|
-
import { cameraPosition } from '../../nodes/accessors/Camera.js';
|
|
6
|
-
import { positionGeometry } from '../../nodes/accessors/Position.js';
|
|
7
|
-
import { Fn, varying, float, vec2, vec3, vec4 } from '../../nodes/tsl/TSLBase.js';
|
|
8
|
-
import { min, max } from '../../nodes/math/MathNode.js';
|
|
9
|
-
import { Loop, Break } from '../../nodes/utils/LoopNode.js';
|
|
10
|
-
import { texture3D } from '../../nodes/accessors/Texture3DNode.js';
|
|
11
|
-
import { Color } from '../../math/Color.js';
|
|
12
|
-
|
|
13
|
-
/** @module VolumeNodeMaterial **/
|
|
2
|
+
import VolumetricLightingModel from '../../nodes/functions/VolumetricLightingModel.js';
|
|
3
|
+
import { BackSide } from '../../constants.js';
|
|
14
4
|
|
|
15
5
|
/**
|
|
16
|
-
*
|
|
17
|
-
* defined with an instance of {@link Data3DTexture}.
|
|
6
|
+
* Volume node material.
|
|
18
7
|
*
|
|
19
8
|
* @augments NodeMaterial
|
|
20
9
|
*/
|
|
@@ -29,7 +18,7 @@ class VolumeNodeMaterial extends NodeMaterial {
|
|
|
29
18
|
/**
|
|
30
19
|
* Constructs a new volume node material.
|
|
31
20
|
*
|
|
32
|
-
* @param {Object
|
|
21
|
+
* @param {Object} [parameters] - The configuration parameter.
|
|
33
22
|
*/
|
|
34
23
|
constructor( parameters ) {
|
|
35
24
|
|
|
@@ -38,144 +27,52 @@ class VolumeNodeMaterial extends NodeMaterial {
|
|
|
38
27
|
/**
|
|
39
28
|
* This flag can be used for type testing.
|
|
40
29
|
*
|
|
41
|
-
* @type {
|
|
30
|
+
* @type {boolean}
|
|
42
31
|
* @readonly
|
|
43
32
|
* @default true
|
|
44
33
|
*/
|
|
45
34
|
this.isVolumeNodeMaterial = true;
|
|
46
35
|
|
|
47
36
|
/**
|
|
48
|
-
*
|
|
37
|
+
* Number of steps used for raymarching.
|
|
49
38
|
*
|
|
50
|
-
* @type {
|
|
51
|
-
* @default
|
|
39
|
+
* @type {number}
|
|
40
|
+
* @default 25
|
|
52
41
|
*/
|
|
53
|
-
this.
|
|
42
|
+
this.steps = 25;
|
|
54
43
|
|
|
55
44
|
/**
|
|
56
|
-
*
|
|
45
|
+
* Offsets the distance a ray has been traveled through a volume.
|
|
46
|
+
* Can be used to implement dithering to reduce banding.
|
|
57
47
|
*
|
|
58
|
-
* @type {
|
|
48
|
+
* @type {Node<float>}
|
|
59
49
|
* @default null
|
|
60
50
|
*/
|
|
61
|
-
this.
|
|
51
|
+
this.offsetNode = null;
|
|
62
52
|
|
|
63
53
|
/**
|
|
64
|
-
*
|
|
65
|
-
* and travels through the volume.
|
|
54
|
+
* Node used for scattering calculations.
|
|
66
55
|
*
|
|
67
|
-
* @type {
|
|
68
|
-
* @default 100
|
|
69
|
-
*/
|
|
70
|
-
this.steps = 100;
|
|
71
|
-
|
|
72
|
-
/**
|
|
73
|
-
* Callback for {@link VolumeNodeMaterial#testNode}.
|
|
74
|
-
*
|
|
75
|
-
* @callback testNodeCallback
|
|
76
|
-
* @param {Data3DTexture<float>} map - The 3D texture.
|
|
77
|
-
* @param {Node<float>} mapValue - The sampled value inside the volume.
|
|
78
|
-
* @param {Node<vec3>} probe - The probe which is the entry point of the ray on the mesh's surface.
|
|
79
|
-
* @param {Node<vec4>} finalColor - The final color.
|
|
80
|
-
*/
|
|
81
|
-
|
|
82
|
-
/**
|
|
83
|
-
* The volume rendering of this material works by shooting rays
|
|
84
|
-
* from the camera position through each fragment of the mesh's
|
|
85
|
-
* surface and sample the inner volume in a raymarching fashion
|
|
86
|
-
* multiple times.
|
|
87
|
-
*
|
|
88
|
-
* This node can be used to assign a callback function of type `Fn`
|
|
89
|
-
* that will be executed per sample. The callback receives the
|
|
90
|
-
* texture, the sampled texture value as well as position on the surface
|
|
91
|
-
* where the rays enters the volume. The last parameter is a color
|
|
92
|
-
* that allows the callback to determine the final color.
|
|
93
|
-
*
|
|
94
|
-
* @type {testNodeCallback?}
|
|
56
|
+
* @type {Function|FunctionNode<vec4>}
|
|
95
57
|
* @default null
|
|
96
58
|
*/
|
|
97
|
-
this.
|
|
98
|
-
|
|
99
|
-
this.setValues( parameters );
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
/**
|
|
104
|
-
* Setups the vertex and fragment stage of this node material.
|
|
105
|
-
*
|
|
106
|
-
* @param {NodeBuilder} builder - The current node builder.
|
|
107
|
-
*/
|
|
108
|
-
setup( builder ) {
|
|
109
|
-
|
|
110
|
-
const map = texture3D( this.map, null, 0 );
|
|
111
|
-
|
|
112
|
-
const hitBox = Fn( ( { orig, dir } ) => {
|
|
113
|
-
|
|
114
|
-
const box_min = vec3( - 0.5 );
|
|
115
|
-
const box_max = vec3( 0.5 );
|
|
116
|
-
|
|
117
|
-
const inv_dir = dir.reciprocal();
|
|
59
|
+
this.scatteringNode = null;
|
|
118
60
|
|
|
119
|
-
|
|
120
|
-
const tmax_tmp = box_max.sub( orig ).mul( inv_dir );
|
|
61
|
+
this.lights = true;
|
|
121
62
|
|
|
122
|
-
|
|
123
|
-
|
|
63
|
+
this.transparent = true;
|
|
64
|
+
this.side = BackSide;
|
|
124
65
|
|
|
125
|
-
|
|
126
|
-
|
|
66
|
+
this.depthTest = false;
|
|
67
|
+
this.depthWrite = false;
|
|
127
68
|
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
} );
|
|
131
|
-
|
|
132
|
-
this.fragmentNode = Fn( () => {
|
|
133
|
-
|
|
134
|
-
const vOrigin = varying( vec3( modelWorldMatrixInverse.mul( vec4( cameraPosition, 1.0 ) ) ) );
|
|
135
|
-
const vDirection = varying( positionGeometry.sub( vOrigin ) );
|
|
136
|
-
|
|
137
|
-
const rayDir = vDirection.normalize();
|
|
138
|
-
const bounds = vec2( hitBox( { orig: vOrigin, dir: rayDir } ) ).toVar();
|
|
139
|
-
|
|
140
|
-
bounds.x.greaterThan( bounds.y ).discard();
|
|
141
|
-
|
|
142
|
-
bounds.assign( vec2( max( bounds.x, 0.0 ), bounds.y ) );
|
|
143
|
-
|
|
144
|
-
const p = vec3( vOrigin.add( bounds.x.mul( rayDir ) ) ).toVar();
|
|
145
|
-
const inc = vec3( rayDir.abs().reciprocal() ).toVar();
|
|
146
|
-
const delta = float( min( inc.x, min( inc.y, inc.z ) ) ).toVar( 'delta' ); // used 'delta' name in loop
|
|
147
|
-
|
|
148
|
-
delta.divAssign( materialReference( 'steps', 'float' ) );
|
|
149
|
-
|
|
150
|
-
const ac = vec4( materialReference( 'base', 'color' ), 0.0 ).toVar();
|
|
151
|
-
|
|
152
|
-
Loop( { type: 'float', start: bounds.x, end: bounds.y, update: '+= delta' }, () => {
|
|
153
|
-
|
|
154
|
-
const d = property( 'float', 'd' ).assign( map.sample( p.add( 0.5 ) ).r );
|
|
155
|
-
|
|
156
|
-
if ( this.testNode !== null ) {
|
|
157
|
-
|
|
158
|
-
this.testNode( { map: map, mapValue: d, probe: p, finalColor: ac } ).append();
|
|
159
|
-
|
|
160
|
-
} else {
|
|
161
|
-
|
|
162
|
-
// default to show surface of mesh
|
|
163
|
-
ac.a.assign( 1 );
|
|
164
|
-
Break();
|
|
165
|
-
|
|
166
|
-
}
|
|
167
|
-
|
|
168
|
-
p.addAssign( rayDir.mul( delta ) );
|
|
169
|
-
|
|
170
|
-
} );
|
|
171
|
-
|
|
172
|
-
ac.a.equal( 0 ).discard();
|
|
69
|
+
this.setValues( parameters );
|
|
173
70
|
|
|
174
|
-
|
|
71
|
+
}
|
|
175
72
|
|
|
176
|
-
|
|
73
|
+
setupLightingModel() {
|
|
177
74
|
|
|
178
|
-
|
|
75
|
+
return new VolumetricLightingModel();
|
|
179
76
|
|
|
180
77
|
}
|
|
181
78
|
|
|
@@ -76,28 +76,28 @@ class NodeMaterialObserver {
|
|
|
76
76
|
/**
|
|
77
77
|
* Whether the material uses node objects or not.
|
|
78
78
|
*
|
|
79
|
-
* @type {
|
|
79
|
+
* @type {boolean}
|
|
80
80
|
*/
|
|
81
81
|
this.hasNode = this.containsNode( builder );
|
|
82
82
|
|
|
83
83
|
/**
|
|
84
84
|
* Whether the node builder's 3D object is animated or not.
|
|
85
85
|
*
|
|
86
|
-
* @type {
|
|
86
|
+
* @type {boolean}
|
|
87
87
|
*/
|
|
88
88
|
this.hasAnimation = builder.object.isSkinnedMesh === true;
|
|
89
89
|
|
|
90
90
|
/**
|
|
91
91
|
* A list of all possible material uniforms
|
|
92
92
|
*
|
|
93
|
-
* @type {Array<
|
|
93
|
+
* @type {Array<string>}
|
|
94
94
|
*/
|
|
95
95
|
this.refreshUniforms = refreshUniforms;
|
|
96
96
|
|
|
97
97
|
/**
|
|
98
98
|
* Holds the current render ID from the node frame.
|
|
99
99
|
*
|
|
100
|
-
* @type {
|
|
100
|
+
* @type {number}
|
|
101
101
|
* @default 0
|
|
102
102
|
*/
|
|
103
103
|
this.renderId = 0;
|
|
@@ -108,7 +108,7 @@ class NodeMaterialObserver {
|
|
|
108
108
|
* Returns `true` if the given render object is verified for the first time of this observer.
|
|
109
109
|
*
|
|
110
110
|
* @param {RenderObject} renderObject - The render object.
|
|
111
|
-
* @return {
|
|
111
|
+
* @return {boolean} Whether the given render object is verified for the first time of this observer.
|
|
112
112
|
*/
|
|
113
113
|
firstInitialization( renderObject ) {
|
|
114
114
|
|
|
@@ -216,7 +216,7 @@ class NodeMaterialObserver {
|
|
|
216
216
|
* node properties.
|
|
217
217
|
*
|
|
218
218
|
* @param {NodeBuilder} builder - The current node builder.
|
|
219
|
-
* @return {
|
|
219
|
+
* @return {boolean} Whether the node builder's material uses node properties or not.
|
|
220
220
|
*/
|
|
221
221
|
containsNode( builder ) {
|
|
222
222
|
|
|
@@ -281,7 +281,7 @@ class NodeMaterialObserver {
|
|
|
281
281
|
* Returns `true` if the given render object has not changed its state.
|
|
282
282
|
*
|
|
283
283
|
* @param {RenderObject} renderObject - The render object.
|
|
284
|
-
* @return {
|
|
284
|
+
* @return {boolean} Whether the given render object has changed its state or not.
|
|
285
285
|
*/
|
|
286
286
|
equals( renderObject ) {
|
|
287
287
|
|
|
@@ -475,7 +475,7 @@ class NodeMaterialObserver {
|
|
|
475
475
|
*
|
|
476
476
|
* @param {RenderObject} renderObject - The render object.
|
|
477
477
|
* @param {NodeFrame} nodeFrame - The current node frame.
|
|
478
|
-
* @return {
|
|
478
|
+
* @return {boolean} Whether the given render object requires a refresh or not.
|
|
479
479
|
*/
|
|
480
480
|
needsRefresh( renderObject, nodeFrame ) {
|
|
481
481
|
|
package/src/math/Box2.js
CHANGED
|
@@ -2,17 +2,52 @@ import { Vector2 } from './Vector2.js';
|
|
|
2
2
|
|
|
3
3
|
const _vector = /*@__PURE__*/ new Vector2();
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Represents an axis-aligned bounding box (AABB) in 2D space.
|
|
7
|
+
*/
|
|
5
8
|
class Box2 {
|
|
6
9
|
|
|
10
|
+
/**
|
|
11
|
+
* Constructs a new bounding box.
|
|
12
|
+
*
|
|
13
|
+
* @param {Vector2} [min=(Infinity,Infinity)] - A vector representing the lower boundary of the box.
|
|
14
|
+
* @param {Vector2} [max=(-Infinity,-Infinity)] - A vector representing the upper boundary of the box.
|
|
15
|
+
*/
|
|
7
16
|
constructor( min = new Vector2( + Infinity, + Infinity ), max = new Vector2( - Infinity, - Infinity ) ) {
|
|
8
17
|
|
|
18
|
+
/**
|
|
19
|
+
* This flag can be used for type testing.
|
|
20
|
+
*
|
|
21
|
+
* @type {boolean}
|
|
22
|
+
* @readonly
|
|
23
|
+
* @default true
|
|
24
|
+
*/
|
|
9
25
|
this.isBox2 = true;
|
|
10
26
|
|
|
27
|
+
/**
|
|
28
|
+
* The lower boundary of the box.
|
|
29
|
+
*
|
|
30
|
+
* @type {Vector2}
|
|
31
|
+
*/
|
|
11
32
|
this.min = min;
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* The upper boundary of the box.
|
|
36
|
+
*
|
|
37
|
+
* @type {Vector2}
|
|
38
|
+
*/
|
|
12
39
|
this.max = max;
|
|
13
40
|
|
|
14
41
|
}
|
|
15
42
|
|
|
43
|
+
/**
|
|
44
|
+
* Sets the lower and upper boundaries of this box.
|
|
45
|
+
* Please note that this method only copies the values from the given objects.
|
|
46
|
+
*
|
|
47
|
+
* @param {Vector2} min - The lower boundary of the box.
|
|
48
|
+
* @param {Vector2} max - The upper boundary of the box.
|
|
49
|
+
* @return {Box2} A reference to this bounding box.
|
|
50
|
+
*/
|
|
16
51
|
set( min, max ) {
|
|
17
52
|
|
|
18
53
|
this.min.copy( min );
|
|
@@ -22,6 +57,13 @@ class Box2 {
|
|
|
22
57
|
|
|
23
58
|
}
|
|
24
59
|
|
|
60
|
+
/**
|
|
61
|
+
* Sets the upper and lower bounds of this box so it encloses the position data
|
|
62
|
+
* in the given array.
|
|
63
|
+
*
|
|
64
|
+
* @param {Array<Vector2>} points - An array holding 2D position data as instances of {@link Vector2}.
|
|
65
|
+
* @return {Box2} A reference to this bounding box.
|
|
66
|
+
*/
|
|
25
67
|
setFromPoints( points ) {
|
|
26
68
|
|
|
27
69
|
this.makeEmpty();
|
|
@@ -36,6 +78,14 @@ class Box2 {
|
|
|
36
78
|
|
|
37
79
|
}
|
|
38
80
|
|
|
81
|
+
/**
|
|
82
|
+
* Centers this box on the given center vector and sets this box's width, height and
|
|
83
|
+
* depth to the given size values.
|
|
84
|
+
*
|
|
85
|
+
* @param {Vector2} center - The center of the box.
|
|
86
|
+
* @param {Vector2} size - The x and y dimensions of the box.
|
|
87
|
+
* @return {Box2} A reference to this bounding box.
|
|
88
|
+
*/
|
|
39
89
|
setFromCenterAndSize( center, size ) {
|
|
40
90
|
|
|
41
91
|
const halfSize = _vector.copy( size ).multiplyScalar( 0.5 );
|
|
@@ -46,12 +96,23 @@ class Box2 {
|
|
|
46
96
|
|
|
47
97
|
}
|
|
48
98
|
|
|
99
|
+
/**
|
|
100
|
+
* Returns a new box with copied values from this instance.
|
|
101
|
+
*
|
|
102
|
+
* @return {Box2} A clone of this instance.
|
|
103
|
+
*/
|
|
49
104
|
clone() {
|
|
50
105
|
|
|
51
106
|
return new this.constructor().copy( this );
|
|
52
107
|
|
|
53
108
|
}
|
|
54
109
|
|
|
110
|
+
/**
|
|
111
|
+
* Copies the values of the given box to this instance.
|
|
112
|
+
*
|
|
113
|
+
* @param {Box2} box - The box to copy.
|
|
114
|
+
* @return {Box2} A reference to this bounding box.
|
|
115
|
+
*/
|
|
55
116
|
copy( box ) {
|
|
56
117
|
|
|
57
118
|
this.min.copy( box.min );
|
|
@@ -61,6 +122,11 @@ class Box2 {
|
|
|
61
122
|
|
|
62
123
|
}
|
|
63
124
|
|
|
125
|
+
/**
|
|
126
|
+
* Makes this box empty which means in encloses a zero space in 2D.
|
|
127
|
+
*
|
|
128
|
+
* @return {Box2} A reference to this bounding box.
|
|
129
|
+
*/
|
|
64
130
|
makeEmpty() {
|
|
65
131
|
|
|
66
132
|
this.min.x = this.min.y = + Infinity;
|
|
@@ -70,6 +136,13 @@ class Box2 {
|
|
|
70
136
|
|
|
71
137
|
}
|
|
72
138
|
|
|
139
|
+
/**
|
|
140
|
+
* Returns true if this box includes zero points within its bounds.
|
|
141
|
+
* Note that a box with equal lower and upper bounds still includes one
|
|
142
|
+
* point, the one both bounds share.
|
|
143
|
+
*
|
|
144
|
+
* @return {boolean} Whether this box is empty or not.
|
|
145
|
+
*/
|
|
73
146
|
isEmpty() {
|
|
74
147
|
|
|
75
148
|
// this is a more robust check for empty than ( volume <= 0 ) because volume can get positive with two negative axes
|
|
@@ -78,18 +151,36 @@ class Box2 {
|
|
|
78
151
|
|
|
79
152
|
}
|
|
80
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Returns the center point of this box.
|
|
156
|
+
*
|
|
157
|
+
* @param {Vector2} target - The target vector that is used to store the method's result.
|
|
158
|
+
* @return {Vector2} The center point.
|
|
159
|
+
*/
|
|
81
160
|
getCenter( target ) {
|
|
82
161
|
|
|
83
162
|
return this.isEmpty() ? target.set( 0, 0 ) : target.addVectors( this.min, this.max ).multiplyScalar( 0.5 );
|
|
84
163
|
|
|
85
164
|
}
|
|
86
165
|
|
|
166
|
+
/**
|
|
167
|
+
* Returns the dimensions of this box.
|
|
168
|
+
*
|
|
169
|
+
* @param {Vector2} target - The target vector that is used to store the method's result.
|
|
170
|
+
* @return {Vector2} The size.
|
|
171
|
+
*/
|
|
87
172
|
getSize( target ) {
|
|
88
173
|
|
|
89
174
|
return this.isEmpty() ? target.set( 0, 0 ) : target.subVectors( this.max, this.min );
|
|
90
175
|
|
|
91
176
|
}
|
|
92
177
|
|
|
178
|
+
/**
|
|
179
|
+
* Expands the boundaries of this box to include the given point.
|
|
180
|
+
*
|
|
181
|
+
* @param {Vector2} point - The point that should be included by the bounding box.
|
|
182
|
+
* @return {Box2} A reference to this bounding box.
|
|
183
|
+
*/
|
|
93
184
|
expandByPoint( point ) {
|
|
94
185
|
|
|
95
186
|
this.min.min( point );
|
|
@@ -99,6 +190,15 @@ class Box2 {
|
|
|
99
190
|
|
|
100
191
|
}
|
|
101
192
|
|
|
193
|
+
/**
|
|
194
|
+
* Expands this box equilaterally by the given vector. The width of this
|
|
195
|
+
* box will be expanded by the x component of the vector in both
|
|
196
|
+
* directions. The height of this box will be expanded by the y component of
|
|
197
|
+
* the vector in both directions.
|
|
198
|
+
*
|
|
199
|
+
* @param {Vector2} vector - The vector that should expand the bounding box.
|
|
200
|
+
* @return {Box2} A reference to this bounding box.
|
|
201
|
+
*/
|
|
102
202
|
expandByVector( vector ) {
|
|
103
203
|
|
|
104
204
|
this.min.sub( vector );
|
|
@@ -108,6 +208,13 @@ class Box2 {
|
|
|
108
208
|
|
|
109
209
|
}
|
|
110
210
|
|
|
211
|
+
/**
|
|
212
|
+
* Expands each dimension of the box by the given scalar. If negative, the
|
|
213
|
+
* dimensions of the box will be contracted.
|
|
214
|
+
*
|
|
215
|
+
* @param {number} scalar - The scalar value that should expand the bounding box.
|
|
216
|
+
* @return {Box2} A reference to this bounding box.
|
|
217
|
+
*/
|
|
111
218
|
expandByScalar( scalar ) {
|
|
112
219
|
|
|
113
220
|
this.min.addScalar( - scalar );
|
|
@@ -117,6 +224,12 @@ class Box2 {
|
|
|
117
224
|
|
|
118
225
|
}
|
|
119
226
|
|
|
227
|
+
/**
|
|
228
|
+
* Returns `true` if the given point lies within or on the boundaries of this box.
|
|
229
|
+
*
|
|
230
|
+
* @param {Vector2} point - The point to test.
|
|
231
|
+
* @return {boolean} Whether the bounding box contains the given point or not.
|
|
232
|
+
*/
|
|
120
233
|
containsPoint( point ) {
|
|
121
234
|
|
|
122
235
|
return point.x >= this.min.x && point.x <= this.max.x &&
|
|
@@ -124,6 +237,13 @@ class Box2 {
|
|
|
124
237
|
|
|
125
238
|
}
|
|
126
239
|
|
|
240
|
+
/**
|
|
241
|
+
* Returns `true` if this bounding box includes the entirety of the given bounding box.
|
|
242
|
+
* If this box and the given one are identical, this function also returns `true`.
|
|
243
|
+
*
|
|
244
|
+
* @param {Box2} box - The bounding box to test.
|
|
245
|
+
* @return {boolean} Whether the bounding box contains the given bounding box or not.
|
|
246
|
+
*/
|
|
127
247
|
containsBox( box ) {
|
|
128
248
|
|
|
129
249
|
return this.min.x <= box.min.x && box.max.x <= this.max.x &&
|
|
@@ -131,6 +251,13 @@ class Box2 {
|
|
|
131
251
|
|
|
132
252
|
}
|
|
133
253
|
|
|
254
|
+
/**
|
|
255
|
+
* Returns a point as a proportion of this box's width and height.
|
|
256
|
+
*
|
|
257
|
+
* @param {Vector2} point - A point in 2D space.
|
|
258
|
+
* @param {Vector2} target - The target vector that is used to store the method's result.
|
|
259
|
+
* @return {Vector2} A point as a proportion of this box's width and height.
|
|
260
|
+
*/
|
|
134
261
|
getParameter( point, target ) {
|
|
135
262
|
|
|
136
263
|
// This can potentially have a divide by zero if the box
|
|
@@ -143,6 +270,12 @@ class Box2 {
|
|
|
143
270
|
|
|
144
271
|
}
|
|
145
272
|
|
|
273
|
+
/**
|
|
274
|
+
* Returns `true` if the given bounding box intersects with this bounding box.
|
|
275
|
+
*
|
|
276
|
+
* @param {Box2} box - The bounding box to test.
|
|
277
|
+
* @return {boolean} Whether the given bounding box intersects with this bounding box.
|
|
278
|
+
*/
|
|
146
279
|
intersectsBox( box ) {
|
|
147
280
|
|
|
148
281
|
// using 4 splitting planes to rule out intersections
|
|
@@ -152,18 +285,41 @@ class Box2 {
|
|
|
152
285
|
|
|
153
286
|
}
|
|
154
287
|
|
|
288
|
+
/**
|
|
289
|
+
* Clamps the given point within the bounds of this box.
|
|
290
|
+
*
|
|
291
|
+
* @param {Vector2} point - The point to clamp.
|
|
292
|
+
* @param {Vector2} target - The target vector that is used to store the method's result.
|
|
293
|
+
* @return {Vector2} The clamped point.
|
|
294
|
+
*/
|
|
155
295
|
clampPoint( point, target ) {
|
|
156
296
|
|
|
157
297
|
return target.copy( point ).clamp( this.min, this.max );
|
|
158
298
|
|
|
159
299
|
}
|
|
160
300
|
|
|
301
|
+
/**
|
|
302
|
+
* Returns the euclidean distance from any edge of this box to the specified point. If
|
|
303
|
+
* the given point lies inside of this box, the distance will be `0`.
|
|
304
|
+
*
|
|
305
|
+
* @param {Vector2} point - The point to compute the distance to.
|
|
306
|
+
* @return {number} The euclidean distance.
|
|
307
|
+
*/
|
|
161
308
|
distanceToPoint( point ) {
|
|
162
309
|
|
|
163
310
|
return this.clampPoint( point, _vector ).distanceTo( point );
|
|
164
311
|
|
|
165
312
|
}
|
|
166
313
|
|
|
314
|
+
/**
|
|
315
|
+
* Computes the intersection of this bounding box and the given one, setting the upper
|
|
316
|
+
* bound of this box to the lesser of the two boxes' upper bounds and the
|
|
317
|
+
* lower bound of this box to the greater of the two boxes' lower bounds. If
|
|
318
|
+
* there's no overlap, makes this box empty.
|
|
319
|
+
*
|
|
320
|
+
* @param {Box2} box - The bounding box to intersect with.
|
|
321
|
+
* @return {Box2} A reference to this bounding box.
|
|
322
|
+
*/
|
|
167
323
|
intersect( box ) {
|
|
168
324
|
|
|
169
325
|
this.min.max( box.min );
|
|
@@ -175,6 +331,14 @@ class Box2 {
|
|
|
175
331
|
|
|
176
332
|
}
|
|
177
333
|
|
|
334
|
+
/**
|
|
335
|
+
* Computes the union of this box and another and the given one, setting the upper
|
|
336
|
+
* bound of this box to the greater of the two boxes' upper bounds and the
|
|
337
|
+
* lower bound of this box to the lesser of the two boxes' lower bounds.
|
|
338
|
+
*
|
|
339
|
+
* @param {Box2} box - The bounding box that will be unioned with this instance.
|
|
340
|
+
* @return {Box2} A reference to this bounding box.
|
|
341
|
+
*/
|
|
178
342
|
union( box ) {
|
|
179
343
|
|
|
180
344
|
this.min.min( box.min );
|
|
@@ -184,6 +348,13 @@ class Box2 {
|
|
|
184
348
|
|
|
185
349
|
}
|
|
186
350
|
|
|
351
|
+
/**
|
|
352
|
+
* Adds the given offset to both the upper and lower bounds of this bounding box,
|
|
353
|
+
* effectively moving it in 2D space.
|
|
354
|
+
*
|
|
355
|
+
* @param {Vector2} offset - The offset that should be used to translate the bounding box.
|
|
356
|
+
* @return {Box2} A reference to this bounding box.
|
|
357
|
+
*/
|
|
187
358
|
translate( offset ) {
|
|
188
359
|
|
|
189
360
|
this.min.add( offset );
|
|
@@ -193,6 +364,12 @@ class Box2 {
|
|
|
193
364
|
|
|
194
365
|
}
|
|
195
366
|
|
|
367
|
+
/**
|
|
368
|
+
* Returns `true` if this bounding box is equal with the given one.
|
|
369
|
+
*
|
|
370
|
+
* @param {Box2} box - The box to test for equality.
|
|
371
|
+
* @return {boolean} Whether this bounding box is equal with the given one.
|
|
372
|
+
*/
|
|
196
373
|
equals( box ) {
|
|
197
374
|
|
|
198
375
|
return box.min.equals( this.min ) && box.max.equals( this.max );
|