@needle-tools/three 0.169.20 → 0.183.2-canary.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/LICENSE +1 -1
- package/README.md +5 -6
- package/build/three.cjs +54178 -56709
- package/build/three.core.js +59506 -0
- package/build/three.core.min.js +6 -0
- package/build/three.module.js +11645 -73012
- package/build/three.module.min.js +2 -2
- package/build/three.tsl.js +648 -0
- package/build/three.tsl.min.js +6 -0
- package/build/three.webgpu.js +53905 -51657
- package/build/three.webgpu.min.js +2 -2
- package/build/three.webgpu.nodes.js +53884 -51814
- package/build/three.webgpu.nodes.min.js +2 -2
- package/examples/fonts/MPLUSRounded1c/MPLUSRounded1c-Regular.typeface.json.zip +0 -0
- package/examples/fonts/MPLUSRounded1c/OFL.txt +91 -0
- package/examples/jsm/Addons.js +5 -15
- package/examples/jsm/animation/AnimationClipCreator.js +58 -6
- package/examples/jsm/animation/CCDIKSolver.js +152 -45
- package/examples/jsm/capabilities/WebGL.js +28 -29
- package/examples/jsm/capabilities/WebGPU.js +19 -17
- package/examples/jsm/controls/ArcballControls.js +474 -178
- package/examples/jsm/controls/DragControls.js +100 -58
- package/examples/jsm/controls/FirstPersonControls.js +116 -6
- package/examples/jsm/controls/FlyControls.js +50 -2
- package/examples/jsm/controls/MapControls.js +96 -8
- package/examples/jsm/controls/OrbitControls.js +496 -57
- package/examples/jsm/controls/PointerLockControls.js +115 -22
- package/examples/jsm/controls/TrackballControls.js +166 -14
- package/examples/jsm/controls/TransformControls.js +336 -26
- package/examples/jsm/csm/CSM.js +232 -18
- package/examples/jsm/csm/CSMFrustum.js +61 -4
- package/examples/jsm/csm/CSMHelper.js +50 -0
- package/examples/jsm/csm/CSMShader.js +13 -1
- package/examples/jsm/csm/CSMShadowNode.js +599 -0
- package/examples/jsm/curves/CurveExtras.js +303 -31
- package/examples/jsm/curves/NURBSCurve.js +91 -16
- package/examples/jsm/curves/NURBSSurface.js +52 -6
- package/examples/jsm/curves/NURBSUtils.js +102 -112
- package/examples/jsm/curves/NURBSVolume.js +24 -4
- package/examples/jsm/effects/AnaglyphEffect.js +134 -7
- package/examples/jsm/effects/AsciiEffect.js +69 -22
- package/examples/jsm/effects/OutlineEffect.js +61 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +30 -0
- package/examples/jsm/effects/StereoEffect.js +31 -0
- package/examples/jsm/environments/ColorEnvironment.js +59 -0
- package/examples/jsm/environments/DebugEnvironment.js +50 -0
- package/examples/jsm/environments/RoomEnvironment.js +83 -42
- package/examples/jsm/exporters/DRACOExporter.js +56 -14
- package/examples/jsm/exporters/EXRExporter.js +40 -9
- package/examples/jsm/exporters/GLTFExporter.js +502 -169
- package/examples/jsm/exporters/OBJExporter.js +21 -1
- package/examples/jsm/exporters/PLYExporter.js +44 -12
- package/examples/jsm/exporters/STLExporter.js +27 -5
- package/examples/jsm/exporters/USDZExporter.js +781 -291
- package/examples/jsm/geometries/BoxLineGeometry.js +23 -0
- package/examples/jsm/geometries/ConvexGeometry.js +19 -0
- package/examples/jsm/geometries/DecalGeometry.js +91 -30
- package/examples/jsm/geometries/ParametricFunctions.js +100 -0
- package/examples/jsm/geometries/ParametricGeometry.js +38 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +68 -7
- package/examples/jsm/geometries/TeapotGeometry.js +23 -38
- package/examples/jsm/geometries/TextGeometry.js +48 -29
- package/examples/jsm/gpgpu/BitonicSort.js +715 -0
- package/examples/jsm/helpers/AnimationPathHelper.js +302 -0
- package/examples/jsm/helpers/LightProbeHelper.js +36 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +38 -1
- package/examples/jsm/helpers/OctreeHelper.js +36 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +60 -0
- package/examples/jsm/helpers/RapierHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +36 -3
- package/examples/jsm/helpers/TextureHelper.js +28 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +214 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +61 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +47 -2
- package/examples/jsm/helpers/ViewHelper.js +181 -9
- package/examples/jsm/inspector/Inspector.js +487 -0
- package/examples/jsm/inspector/RendererInspector.js +425 -0
- package/examples/jsm/inspector/tabs/Console.js +238 -0
- package/examples/jsm/inspector/tabs/Parameters.js +348 -0
- package/examples/jsm/inspector/tabs/Performance.js +268 -0
- package/examples/jsm/inspector/tabs/Viewer.js +166 -0
- package/examples/jsm/inspector/ui/Graph.js +95 -0
- package/examples/jsm/inspector/ui/Item.js +170 -0
- package/examples/jsm/inspector/ui/List.js +75 -0
- package/examples/jsm/inspector/ui/Profiler.js +1975 -0
- package/examples/jsm/inspector/ui/Style.js +1613 -0
- package/examples/jsm/inspector/ui/Tab.js +233 -0
- package/examples/jsm/inspector/ui/Values.js +439 -0
- package/examples/jsm/inspector/ui/utils.js +56 -0
- package/examples/jsm/interactive/HTMLMesh.js +43 -12
- package/examples/jsm/interactive/InteractiveGroup.js +170 -52
- package/examples/jsm/interactive/SelectionBox.js +106 -9
- package/examples/jsm/interactive/SelectionHelper.js +76 -30
- package/examples/jsm/libs/demuxer_mp4.js +109 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +76 -58
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +42 -0
- package/examples/jsm/lights/LightProbeGenerator.js +44 -7
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +50 -14
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +16 -0
- package/examples/jsm/lines/Line2.js +41 -4
- package/examples/jsm/lines/LineGeometry.js +80 -2
- package/examples/jsm/lines/LineMaterial.js +105 -5
- package/examples/jsm/lines/LineSegments2.js +54 -4
- package/examples/jsm/lines/LineSegmentsGeometry.js +65 -8
- package/examples/jsm/lines/Wireframe.js +41 -4
- package/examples/jsm/lines/WireframeGeometry2.js +27 -2
- package/examples/jsm/lines/webgpu/Line2.js +28 -2
- package/examples/jsm/lines/webgpu/LineSegments2.js +59 -24
- package/examples/jsm/lines/webgpu/Wireframe.js +86 -0
- package/examples/jsm/loaders/3DMLoader.js +78 -6
- package/examples/jsm/loaders/3MFLoader.js +148 -7
- package/examples/jsm/loaders/AMFLoader.js +34 -14
- package/examples/jsm/loaders/BVHLoader.js +59 -12
- package/examples/jsm/loaders/ColladaLoader.js +61 -4027
- package/examples/jsm/loaders/DDSLoader.js +68 -1
- package/examples/jsm/loaders/DRACOLoader.js +146 -22
- package/examples/jsm/loaders/EXRLoader.js +255 -34
- package/examples/jsm/loaders/FBXLoader.js +80 -42
- package/examples/jsm/loaders/FontLoader.js +83 -6
- package/examples/jsm/loaders/GCodeLoader.js +71 -14
- package/examples/jsm/loaders/GLTFLoader.js +381 -263
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +52 -3
- package/examples/jsm/loaders/HDRLoader.js +485 -0
- package/examples/jsm/loaders/IESLoader.js +42 -0
- package/examples/jsm/loaders/KMZLoader.js +39 -6
- package/examples/jsm/loaders/KTX2Loader.js +124 -48
- package/examples/jsm/loaders/KTXLoader.js +31 -10
- package/examples/jsm/loaders/LDrawLoader.js +192 -145
- package/examples/jsm/loaders/LUT3dlLoader.js +47 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +46 -9
- package/examples/jsm/loaders/LUTImageLoader.js +79 -38
- package/examples/jsm/loaders/LWOLoader.js +54 -59
- package/examples/jsm/loaders/LottieLoader.js +54 -1
- package/examples/jsm/loaders/MD2Loader.js +37 -1
- package/examples/jsm/loaders/MDDLoader.js +57 -12
- package/examples/jsm/loaders/MTLLoader.js +60 -35
- package/examples/jsm/loaders/MaterialXLoader.js +268 -34
- package/examples/jsm/loaders/NRRDLoader.js +40 -8
- package/examples/jsm/loaders/OBJLoader.js +51 -2
- package/examples/jsm/loaders/PCDLoader.js +173 -21
- package/examples/jsm/loaders/PDBLoader.js +41 -2
- package/examples/jsm/loaders/PLYLoader.js +70 -39
- package/examples/jsm/loaders/PVRLoader.js +25 -6
- package/examples/jsm/loaders/RGBELoader.js +6 -438
- package/examples/jsm/loaders/STLLoader.js +48 -38
- package/examples/jsm/loaders/SVGLoader.js +119 -25
- package/examples/jsm/loaders/TDSLoader.js +92 -74
- package/examples/jsm/loaders/TGALoader.js +23 -2
- package/examples/jsm/loaders/TIFFLoader.js +23 -0
- package/examples/jsm/loaders/TTFLoader.js +50 -3
- package/examples/jsm/loaders/USDLoader.js +279 -0
- package/examples/jsm/loaders/USDZLoader.js +4 -858
- package/examples/jsm/loaders/UltraHDRLoader.js +338 -166
- package/examples/jsm/loaders/VOXLoader.js +688 -87
- package/examples/jsm/loaders/VRMLLoader.js +121 -12
- package/examples/jsm/loaders/VTKLoader.js +77 -25
- package/examples/jsm/loaders/XYZLoader.js +36 -0
- package/examples/jsm/loaders/collada/ColladaComposer.js +2950 -0
- package/examples/jsm/loaders/collada/ColladaParser.js +1962 -0
- package/examples/jsm/loaders/lwo/IFFParser.js +77 -77
- package/examples/jsm/loaders/usd/USDAParser.js +822 -0
- package/examples/jsm/loaders/usd/USDCParser.js +1852 -0
- package/examples/jsm/loaders/usd/USDComposer.js +4041 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +183 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +154 -0
- package/examples/jsm/materials/WoodNodeMaterial.js +533 -0
- package/examples/jsm/math/Capsule.js +91 -14
- package/examples/jsm/math/ColorConverter.js +22 -0
- package/examples/jsm/math/ColorSpaces.js +74 -2
- package/examples/jsm/math/ConvexHull.js +517 -93
- package/examples/jsm/math/ImprovedNoise.js +32 -15
- package/examples/jsm/math/Lut.js +113 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +78 -13
- package/examples/jsm/math/OBB.js +141 -29
- package/examples/jsm/math/Octree.js +283 -7
- package/examples/jsm/math/SimplexNoise.js +68 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +45 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +96 -20
- package/examples/jsm/misc/Gyroscope.js +12 -0
- package/examples/jsm/misc/MD2Character.js +117 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +175 -11
- package/examples/jsm/misc/MorphAnimMesh.js +44 -0
- package/examples/jsm/misc/MorphBlendMesh.js +103 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +100 -54
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +322 -0
- package/examples/jsm/misc/RollerCoaster.js +57 -0
- package/examples/jsm/misc/TubePainter.js +437 -40
- package/examples/jsm/misc/Volume.js +123 -76
- package/examples/jsm/misc/VolumeSlice.js +95 -49
- package/examples/jsm/modifiers/CurveModifier.js +66 -38
- package/examples/jsm/modifiers/CurveModifierGPU.js +42 -19
- package/examples/jsm/modifiers/EdgeSplitModifier.js +20 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +24 -10
- package/examples/jsm/modifiers/TessellateModifier.js +35 -2
- package/examples/jsm/objects/GroundedSkybox.js +25 -6
- package/examples/jsm/objects/Lensflare.js +94 -2
- package/examples/jsm/objects/LensflareMesh.js +64 -10
- package/examples/jsm/objects/MarchingCubes.js +90 -5
- package/examples/jsm/objects/Reflector.js +76 -2
- package/examples/jsm/objects/ReflectorForSSRPass.js +41 -0
- package/examples/jsm/objects/Refractor.js +62 -0
- package/examples/jsm/objects/ShadowMesh.js +54 -4
- package/examples/jsm/objects/Sky.js +106 -16
- package/examples/jsm/objects/SkyMesh.js +211 -38
- package/examples/jsm/objects/Water.js +49 -8
- package/examples/jsm/objects/Water2.js +49 -7
- package/examples/jsm/objects/Water2Mesh.js +50 -9
- package/examples/jsm/objects/WaterMesh.js +136 -43
- package/examples/jsm/physics/AmmoPhysics.js +60 -7
- package/examples/jsm/physics/JoltPhysics.js +65 -12
- package/examples/jsm/physics/RapierPhysics.js +217 -21
- package/examples/jsm/postprocessing/AfterimagePass.js +110 -29
- package/examples/jsm/postprocessing/BloomPass.js +128 -26
- package/examples/jsm/postprocessing/BokehPass.js +99 -22
- package/examples/jsm/postprocessing/ClearPass.js +54 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +82 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +59 -10
- package/examples/jsm/postprocessing/EffectComposer.js +140 -6
- package/examples/jsm/postprocessing/FXAAPass.js +40 -0
- package/examples/jsm/postprocessing/FilmPass.js +54 -5
- package/examples/jsm/postprocessing/GTAOPass.js +202 -57
- package/examples/jsm/postprocessing/GlitchPass.js +86 -34
- package/examples/jsm/postprocessing/HalftonePass.js +65 -10
- package/examples/jsm/postprocessing/LUTPass.js +38 -8
- package/examples/jsm/postprocessing/MaskPass.js +91 -0
- package/examples/jsm/postprocessing/OutlinePass.js +272 -135
- package/examples/jsm/postprocessing/OutputPass.js +65 -14
- package/examples/jsm/postprocessing/Pass.js +100 -4
- package/examples/jsm/postprocessing/RenderPass.js +94 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +124 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +120 -21
- package/examples/jsm/postprocessing/SAOPass.js +128 -55
- package/examples/jsm/postprocessing/SMAAPass.js +106 -75
- package/examples/jsm/postprocessing/SSAARenderPass.js +118 -35
- package/examples/jsm/postprocessing/SSAOPass.js +173 -60
- package/examples/jsm/postprocessing/SSRPass.js +268 -53
- package/examples/jsm/postprocessing/SavePass.js +69 -16
- package/examples/jsm/postprocessing/ShaderPass.js +65 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +79 -24
- package/examples/jsm/postprocessing/TexturePass.js +72 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +168 -59
- package/examples/jsm/renderers/CSS2DRenderer.js +98 -5
- package/examples/jsm/renderers/CSS3DRenderer.js +111 -7
- package/examples/jsm/renderers/Projector.js +288 -32
- package/examples/jsm/renderers/SVGRenderer.js +323 -61
- package/examples/jsm/renderers/webgl-legacy/nodes/GLSL1NodeBuilder.js +3 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/SlotNode.js +1 -1
- package/examples/jsm/renderers/webgl-legacy/nodes/WebGLNodeBuilder.js +5 -1
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +12 -5
- package/examples/jsm/shaders/AfterimageShader.js +8 -3
- package/examples/jsm/shaders/BasicShader.js +8 -1
- package/examples/jsm/shaders/BleachBypassShader.js +10 -3
- package/examples/jsm/shaders/BlendShader.js +8 -1
- package/examples/jsm/shaders/BokehShader.js +9 -3
- package/examples/jsm/shaders/BokehShader2.js +11 -4
- package/examples/jsm/shaders/BrightnessContrastShader.js +10 -4
- package/examples/jsm/shaders/ColorCorrectionShader.js +8 -1
- package/examples/jsm/shaders/ColorifyShader.js +8 -1
- package/examples/jsm/shaders/ConvolutionShader.js +9 -38
- package/examples/jsm/shaders/CopyShader.js +8 -1
- package/examples/jsm/shaders/DOFMipMapShader.js +10 -3
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +10 -1
- package/examples/jsm/shaders/DigitalGlitch.js +10 -7
- package/examples/jsm/shaders/DotScreenShader.js +8 -3
- package/examples/jsm/shaders/ExposureShader.js +8 -1
- package/examples/jsm/shaders/FXAAShader.js +233 -221
- package/examples/jsm/shaders/FilmShader.js +13 -0
- package/examples/jsm/shaders/FocusShader.js +8 -3
- package/examples/jsm/shaders/FreiChenShader.js +10 -3
- package/examples/jsm/shaders/GTAOShader.js +55 -45
- package/examples/jsm/shaders/GammaCorrectionShader.js +11 -2
- package/examples/jsm/shaders/HalftoneShader.js +24 -4
- package/examples/jsm/shaders/HorizontalBlurShader.js +12 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +9 -2
- package/examples/jsm/shaders/HueSaturationShader.js +10 -3
- package/examples/jsm/shaders/KaleidoShader.js +11 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +8 -4
- package/examples/jsm/shaders/LuminosityShader.js +8 -2
- package/examples/jsm/shaders/MirrorShader.js +10 -4
- package/examples/jsm/shaders/NormalMapShader.js +7 -2
- package/examples/jsm/shaders/OutputShader.js +19 -1
- package/examples/jsm/shaders/PoissonDenoiseShader.js +30 -17
- package/examples/jsm/shaders/RGBShiftShader.js +8 -1
- package/examples/jsm/shaders/SAOShader.js +27 -5
- package/examples/jsm/shaders/SMAAShader.js +24 -1
- package/examples/jsm/shaders/SSAOShader.js +37 -6
- package/examples/jsm/shaders/SSRShader.js +32 -6
- package/examples/jsm/shaders/SepiaShader.js +8 -3
- package/examples/jsm/shaders/SobelOperatorShader.js +9 -3
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +13 -8
- package/examples/jsm/shaders/TechnicolorShader.js +10 -4
- package/examples/jsm/shaders/ToonShader.js +29 -6
- package/examples/jsm/shaders/TriangleBlurShader.js +9 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +19 -6
- package/examples/jsm/shaders/VelocityShader.js +8 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +9 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +8 -1
- package/examples/jsm/shaders/VignetteShader.js +8 -3
- package/examples/jsm/shaders/VolumeShader.js +11 -2
- package/examples/jsm/shaders/WaterRefractionShader.js +11 -0
- package/examples/jsm/textures/FlakesTexture.js +14 -0
- package/examples/jsm/transpiler/AST.js +436 -31
- package/examples/jsm/transpiler/GLSLDecoder.js +380 -135
- package/examples/jsm/transpiler/Linker.js +327 -0
- package/examples/jsm/transpiler/ShaderToyDecoder.js +3 -1
- package/examples/jsm/transpiler/TSLEncoder.js +363 -97
- package/examples/jsm/transpiler/Transpiler.js +50 -1
- package/examples/jsm/transpiler/TranspilerUtils.js +29 -0
- package/examples/jsm/transpiler/WGSLEncoder.js +839 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +244 -0
- package/examples/jsm/tsl/display/AnaglyphPassNode.js +549 -0
- package/examples/jsm/tsl/display/AnamorphicNode.js +282 -0
- package/examples/jsm/tsl/display/BilateralBlurNode.js +364 -0
- package/{src/nodes → examples/jsm/tsl}/display/BleachBypass.js +11 -4
- package/examples/jsm/tsl/display/BloomNode.js +534 -0
- package/examples/jsm/tsl/display/CRT.js +150 -0
- package/examples/jsm/tsl/display/ChromaticAberrationNode.js +207 -0
- package/examples/jsm/tsl/display/DenoiseNode.js +334 -0
- package/examples/jsm/tsl/display/DepthOfFieldNode.js +554 -0
- package/examples/jsm/tsl/display/DotScreenNode.js +104 -0
- package/examples/jsm/tsl/display/FXAANode.js +365 -0
- package/examples/jsm/tsl/display/FilmNode.js +101 -0
- package/examples/jsm/tsl/display/GTAONode.js +571 -0
- package/examples/jsm/tsl/display/GaussianBlurNode.js +389 -0
- package/examples/jsm/tsl/display/GodraysNode.js +624 -0
- package/examples/jsm/tsl/display/LensflareNode.js +279 -0
- package/examples/jsm/tsl/display/Lut3DNode.js +109 -0
- package/examples/jsm/tsl/display/MotionBlur.js +33 -0
- package/examples/jsm/tsl/display/OutlineNode.js +762 -0
- package/examples/jsm/tsl/display/ParallaxBarrierPassNode.js +89 -0
- package/examples/jsm/tsl/display/PixelationPassNode.js +335 -0
- package/examples/jsm/tsl/display/RGBShiftNode.js +96 -0
- package/examples/jsm/tsl/display/RetroPassNode.js +263 -0
- package/examples/jsm/tsl/display/SMAANode.js +768 -0
- package/{src/nodes → examples/jsm/tsl}/display/SSAAPassNode.js +120 -49
- package/examples/jsm/tsl/display/SSGINode.js +642 -0
- package/examples/jsm/tsl/display/SSRNode.js +656 -0
- package/examples/jsm/tsl/display/SSSNode.js +490 -0
- package/{src/nodes → examples/jsm/tsl}/display/Sepia.js +9 -2
- package/examples/jsm/tsl/display/Shape.js +29 -0
- package/{src/nodes → examples/jsm/tsl}/display/SobelOperatorNode.js +61 -19
- package/examples/jsm/tsl/display/StereoCompositePassNode.js +192 -0
- package/{src/nodes → examples/jsm/tsl}/display/StereoPassNode.js +48 -12
- package/examples/jsm/tsl/display/TRAANode.js +726 -0
- package/examples/jsm/tsl/display/TransitionNode.js +141 -0
- package/examples/jsm/tsl/display/boxBlur.js +65 -0
- package/examples/jsm/tsl/display/depthAwareBlend.js +80 -0
- package/examples/jsm/tsl/display/hashBlur.js +54 -0
- package/examples/jsm/tsl/display/radialBlur.js +68 -0
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +442 -0
- package/examples/jsm/tsl/math/Bayer.js +73 -0
- package/examples/jsm/tsl/shadows/TileShadowNode.js +456 -0
- package/examples/jsm/tsl/shadows/TileShadowNodeHelper.js +212 -0
- package/examples/jsm/tsl/utils/Raymarching.js +70 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +91 -29
- package/examples/jsm/utils/CameraUtils.js +15 -6
- package/examples/jsm/utils/GeometryCompressionUtils.js +23 -30
- package/examples/jsm/utils/GeometryUtils.js +32 -27
- package/examples/jsm/utils/LDrawUtils.js +14 -5
- package/examples/jsm/utils/SceneOptimizer.js +458 -0
- package/examples/jsm/utils/SceneUtils.js +53 -3
- package/examples/jsm/utils/ShadowMapViewer.js +72 -33
- package/examples/jsm/utils/ShadowMapViewerGPU.js +61 -29
- package/examples/jsm/utils/SkeletonUtils.js +48 -0
- package/examples/jsm/utils/SortUtils.js +17 -5
- package/examples/jsm/utils/UVsDebug.js +12 -4
- package/examples/jsm/utils/{TextureUtils.js → WebGLTextureUtils.js} +16 -0
- package/examples/jsm/utils/{TextureUtilsGPU.js → WebGPUTextureUtils.js} +20 -2
- package/examples/jsm/utils/WorkerPool.js +67 -2
- package/examples/jsm/webxr/ARButton.js +19 -0
- package/examples/jsm/webxr/OculusHandModel.js +84 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +148 -22
- package/examples/jsm/webxr/Text2D.js +20 -6
- package/examples/jsm/webxr/VRButton.js +31 -0
- package/examples/jsm/webxr/XRButton.js +23 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +94 -3
- package/examples/jsm/webxr/XREstimatedLight.js +35 -4
- package/examples/jsm/webxr/XRHandMeshModel.js +37 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +96 -6
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +44 -0
- package/examples/jsm/webxr/XRPlanes.js +18 -0
- package/package.json +29 -34
- package/src/Three.Core.js +198 -0
- package/src/Three.Legacy.js +0 -21
- package/src/Three.TSL.js +641 -0
- package/src/Three.WebGPU.Nodes.js +14 -186
- package/src/Three.WebGPU.js +16 -186
- package/src/Three.js +2 -197
- package/src/animation/AnimationAction.js +263 -31
- package/src/animation/AnimationClip.js +162 -7
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +45 -21
- package/src/animation/AnimationUtils.js +163 -24
- package/src/animation/KeyframeTrack.js +191 -17
- package/src/animation/PropertyBinding.js +91 -16
- 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 +386 -8
- package/src/audio/AudioAnalyser.js +58 -1
- package/src/audio/AudioContext.js +15 -0
- package/src/audio/AudioListener.js +94 -13
- package/src/audio/PositionalAudio.js +107 -0
- package/src/cameras/ArrayCamera.js +37 -0
- package/src/cameras/Camera.js +61 -0
- package/src/cameras/CubeCamera.js +86 -0
- package/src/cameras/OrthographicCamera.js +110 -1
- package/src/cameras/PerspectiveCamera.js +174 -35
- package/src/cameras/StereoCamera.js +48 -2
- package/src/constants.js +1546 -11
- package/src/core/BufferAttribute.js +417 -3
- package/src/core/BufferGeometry.js +407 -22
- package/src/core/Clock.js +69 -8
- package/src/core/EventDispatcher.js +52 -8
- package/src/core/GLBufferAttribute.js +113 -2
- 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 +141 -7
- package/src/core/InterleavedBufferAttribute.js +200 -2
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +673 -26
- package/src/core/Raycaster.js +136 -2
- package/src/core/RenderTarget.js +256 -27
- package/src/core/RenderTarget3D.js +48 -0
- package/src/core/Timer.js +184 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +89 -1
- package/src/extras/DataUtils.js +50 -9
- package/src/extras/Earcut.js +18 -779
- package/src/extras/ImageUtils.js +22 -14
- package/src/extras/PMREMGenerator.js +316 -67
- package/src/extras/ShapeUtils.js +24 -2
- package/src/extras/TextureUtils.js +101 -15
- package/src/extras/core/Curve.js +156 -55
- package/src/extras/core/CurvePath.js +63 -22
- package/src/extras/core/Interpolations.js +34 -2
- package/src/extras/core/Path.js +134 -1
- package/src/extras/core/Shape.js +66 -3
- package/src/extras/core/ShapePath.js +80 -4
- 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 +39 -0
- package/src/geometries/CapsuleGeometry.js +196 -11
- package/src/geometries/CircleGeometry.js +41 -0
- package/src/geometries/ConeGeometry.js +39 -0
- package/src/geometries/CylinderGeometry.js +42 -2
- package/src/geometries/DodecahedronGeometry.js +33 -0
- package/src/geometries/EdgesGeometry.js +30 -2
- package/src/geometries/ExtrudeGeometry.js +148 -52
- package/src/geometries/IcosahedronGeometry.js +33 -0
- package/src/geometries/LatheGeometry.js +44 -3
- package/src/geometries/OctahedronGeometry.js +33 -0
- package/src/geometries/PlaneGeometry.js +35 -0
- package/src/geometries/PolyhedronGeometry.js +30 -1
- package/src/geometries/RingGeometry.js +37 -0
- package/src/geometries/ShapeGeometry.js +38 -0
- package/src/geometries/SphereGeometry.js +38 -0
- package/src/geometries/TetrahedronGeometry.js +33 -0
- package/src/geometries/TorusGeometry.js +44 -3
- package/src/geometries/TorusKnotGeometry.js +39 -0
- package/src/geometries/TubeGeometry.js +50 -0
- package/src/geometries/WireframeGeometry.js +32 -0
- package/src/helpers/ArrowHelper.js +62 -5
- 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 +103 -27
- package/src/helpers/DirectionalLightHelper.js +55 -0
- package/src/helpers/GridHelper.js +26 -0
- package/src/helpers/HemisphereLightHelper.js +42 -0
- package/src/helpers/PlaneHelper.js +33 -0
- package/src/helpers/PointLightHelper.js +43 -24
- package/src/helpers/PolarGridHelper.js +30 -0
- package/src/helpers/SkeletonHelper.js +73 -7
- package/src/helpers/SpotLightHelper.js +43 -0
- package/src/lights/AmbientLight.js +25 -0
- package/src/lights/DirectionalLight.js +70 -0
- package/src/lights/DirectionalLightShadow.js +15 -0
- package/src/lights/HemisphereLight.js +42 -0
- package/src/lights/Light.js +37 -11
- package/src/lights/LightProbe.js +37 -9
- package/src/lights/LightShadow.js +202 -7
- package/src/lights/PointLight.js +74 -0
- package/src/lights/PointLightShadow.js +15 -80
- package/src/lights/RectAreaLight.js +59 -0
- package/src/lights/SpotLight.js +124 -1
- package/src/lights/SpotLightShadow.js +33 -3
- package/src/lights/webgpu/IESSpotLight.js +22 -0
- package/src/lights/webgpu/ProjectorLight.js +46 -0
- package/src/loaders/AnimationLoader.js +34 -2
- package/src/loaders/AudioLoader.js +34 -2
- package/src/loaders/BufferGeometryLoader.js +38 -13
- package/src/loaders/Cache.js +75 -2
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +45 -4
- package/src/loaders/FileLoader.js +85 -5
- package/src/loaders/ImageBitmapLoader.js +113 -11
- package/src/loaders/ImageLoader.js +85 -8
- package/src/loaders/Loader.js +144 -0
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +187 -0
- package/src/loaders/MaterialLoader.js +62 -3
- package/src/loaders/ObjectLoader.js +131 -31
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +68 -4
- package/src/loaders/nodes/NodeMaterialLoader.js +45 -0
- package/src/loaders/nodes/NodeObjectLoader.js +61 -0
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -1
- package/src/materials/Material.js +502 -8
- package/src/materials/MeshBasicMaterial.js +168 -2
- package/src/materials/MeshDepthMaterial.js +94 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +283 -0
- package/src/materials/MeshMatcapMaterial.js +164 -0
- package/src/materials/MeshNormalMaterial.js +114 -0
- package/src/materials/MeshPhongMaterial.js +298 -0
- package/src/materials/MeshPhysicalMaterial.js +296 -4
- package/src/materials/MeshStandardMaterial.js +300 -2
- package/src/materials/MeshToonMaterial.js +219 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +234 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +158 -53
- package/src/materials/nodes/LineBasicNodeMaterial.js +17 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +81 -6
- package/src/materials/nodes/MeshBasicNodeMaterial.js +59 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +35 -0
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +23 -3
- package/src/materials/nodes/MeshNormalNodeMaterial.js +27 -4
- package/src/materials/nodes/MeshPhongNodeMaterial.js +64 -1
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +276 -3
- package/src/materials/nodes/MeshSSSNodeMaterial.js +98 -10
- package/src/materials/nodes/MeshStandardNodeMaterial.js +83 -4
- package/src/materials/nodes/MeshToonNodeMaterial.js +28 -0
- package/src/materials/nodes/NodeMaterial.js +789 -74
- package/src/materials/nodes/NodeMaterials.js +0 -1
- package/src/materials/nodes/PointsNodeMaterial.js +180 -11
- package/src/materials/nodes/ShadowNodeMaterial.js +38 -0
- package/src/materials/nodes/SpriteNodeMaterial.js +86 -23
- package/src/materials/nodes/VolumeNodeMaterial.js +57 -84
- package/src/materials/nodes/manager/NodeMaterialObserver.js +329 -12
- package/src/math/Box2.js +177 -0
- package/src/math/Box3.js +271 -0
- package/src/math/Color.js +355 -11
- package/src/math/ColorManagement.js +158 -92
- package/src/math/Cylindrical.js +65 -6
- package/src/math/Euler.js +139 -5
- package/src/math/Frustum.js +108 -9
- package/src/math/FrustumArray.js +258 -0
- package/src/math/Interpolant.js +87 -8
- package/src/math/Line3.js +221 -2
- package/src/math/MathUtils.js +408 -20
- package/src/math/Matrix2.js +70 -0
- package/src/math/Matrix3.js +229 -4
- package/src/math/Matrix4.js +489 -94
- package/src/math/Plane.js +164 -2
- package/src/math/Quaternion.js +322 -90
- package/src/math/Ray.js +162 -0
- package/src/math/Sphere.js +175 -0
- package/src/math/Spherical.js +73 -11
- package/src/math/SphericalHarmonics3.js +112 -14
- package/src/math/Triangle.js +206 -2
- package/src/math/Vector2.js +396 -10
- package/src/math/Vector3.js +550 -15
- package/src/math/Vector4.js +415 -9
- package/src/math/interpolants/BezierInterpolant.js +108 -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 +91 -88
- package/src/nodes/TSL.js +32 -38
- package/src/nodes/accessors/AccessorsUtils.js +37 -9
- package/src/nodes/accessors/Arrays.js +68 -0
- package/src/nodes/accessors/BatchNode.js +49 -14
- package/src/nodes/accessors/Bitangent.js +82 -13
- package/src/nodes/accessors/BufferAttributeNode.js +269 -8
- package/src/nodes/accessors/BufferNode.js +91 -2
- package/src/nodes/accessors/BuiltinNode.js +63 -0
- package/src/nodes/accessors/Camera.js +400 -10
- package/src/nodes/accessors/ClippingNode.js +149 -45
- package/src/nodes/accessors/CubeTextureNode.js +137 -7
- package/src/nodes/accessors/InstanceNode.js +245 -40
- package/src/nodes/accessors/InstancedMeshNode.js +50 -0
- package/src/nodes/accessors/Lights.js +88 -0
- package/src/nodes/accessors/MaterialNode.js +355 -13
- package/src/nodes/accessors/MaterialProperties.js +57 -1
- package/src/nodes/accessors/MaterialReferenceNode.js +52 -14
- package/src/nodes/accessors/ModelNode.js +117 -5
- package/src/nodes/accessors/ModelViewProjectionNode.js +10 -39
- package/src/nodes/accessors/MorphNode.js +73 -26
- package/src/nodes/accessors/Normal.js +174 -19
- package/src/nodes/accessors/Object3DNode.js +146 -12
- package/src/nodes/accessors/PointUVNode.js +25 -0
- package/src/nodes/accessors/Position.js +119 -7
- package/src/nodes/accessors/ReferenceBaseNode.js +190 -4
- package/src/nodes/accessors/ReferenceNode.js +223 -8
- package/src/nodes/accessors/ReflectVector.js +29 -3
- package/src/nodes/accessors/RendererReferenceNode.js +45 -2
- package/src/nodes/accessors/SceneProperties.js +53 -0
- package/src/nodes/accessors/SkinningNode.js +180 -43
- package/src/nodes/accessors/StorageBufferNode.js +278 -26
- package/src/nodes/accessors/StorageTextureNode.js +205 -12
- package/src/nodes/accessors/Tangent.js +48 -10
- package/src/nodes/accessors/TangentUtils.js +46 -0
- package/src/nodes/accessors/Texture3DNode.js +104 -11
- package/src/nodes/accessors/TextureBicubic.js +31 -4
- package/src/nodes/accessors/TextureNode.js +564 -52
- package/src/nodes/accessors/TextureSizeNode.js +42 -1
- package/src/nodes/accessors/UV.js +9 -1
- package/src/nodes/accessors/UniformArrayNode.js +226 -34
- package/src/nodes/accessors/UserDataNode.js +46 -2
- package/src/nodes/accessors/VelocityNode.js +93 -3
- package/src/nodes/accessors/VertexColorNode.js +39 -4
- package/src/nodes/code/CodeNode.js +101 -8
- package/src/nodes/code/ExpressionNode.js +29 -2
- package/src/nodes/code/FunctionCallNode.js +98 -10
- package/src/nodes/code/FunctionNode.js +69 -2
- package/src/nodes/core/ArrayNode.js +174 -0
- package/src/nodes/core/AssignNode.js +80 -9
- package/src/nodes/core/AttributeNode.js +47 -4
- package/src/nodes/core/BypassNode.js +47 -3
- package/src/nodes/core/ConstNode.js +32 -0
- package/src/nodes/core/ContextNode.js +220 -14
- package/src/nodes/core/IndexNode.js +72 -7
- package/src/nodes/core/InputNode.js +50 -1
- package/src/nodes/core/InspectorNode.js +128 -0
- package/src/nodes/core/IsolateNode.js +133 -0
- package/src/nodes/core/LightingModel.js +65 -5
- package/src/nodes/core/MRTNode.js +113 -2
- package/src/nodes/core/Node.js +595 -36
- package/src/nodes/core/NodeAttribute.js +38 -0
- package/src/nodes/core/NodeBuilder.js +1840 -121
- package/src/nodes/core/NodeCache.js +41 -2
- package/src/nodes/core/NodeCode.js +31 -0
- package/src/nodes/core/NodeError.js +28 -0
- package/src/nodes/core/NodeFrame.js +153 -24
- package/src/nodes/core/NodeFunction.js +48 -1
- package/src/nodes/core/NodeFunctionInput.js +44 -0
- package/src/nodes/core/NodeParser.js +13 -1
- package/src/nodes/core/NodeUniform.js +53 -1
- package/src/nodes/core/NodeUtils.js +201 -51
- package/src/nodes/core/NodeVar.js +47 -1
- package/src/nodes/core/NodeVarying.js +47 -1
- package/src/nodes/core/OutputStructNode.js +54 -12
- package/src/nodes/core/ParameterNode.js +60 -2
- package/src/nodes/core/PropertyNode.js +286 -7
- package/src/nodes/core/StackNode.js +337 -20
- package/src/nodes/core/StackTrace.js +139 -0
- package/src/nodes/core/StructNode.js +134 -0
- package/src/nodes/core/StructType.js +13 -0
- package/src/nodes/core/StructTypeNode.js +126 -6
- package/src/nodes/core/SubBuildNode.js +89 -0
- package/src/nodes/core/TempNode.js +31 -5
- package/src/nodes/core/UniformGroupNode.js +85 -7
- package/src/nodes/core/UniformNode.js +163 -16
- package/src/nodes/core/VarNode.js +317 -10
- package/src/nodes/core/VaryingNode.js +115 -13
- package/src/nodes/core/constants.js +40 -0
- package/src/nodes/display/BlendModes.js +171 -0
- package/src/nodes/display/BumpMapNode.js +38 -2
- package/src/nodes/display/ColorAdjustment.js +118 -6
- package/src/nodes/display/ColorSpaceFunctions.js +22 -6
- package/src/nodes/display/ColorSpaceNode.js +97 -47
- package/src/nodes/display/FrontFacingNode.js +64 -7
- package/src/nodes/display/NormalMapNode.js +101 -54
- package/src/nodes/display/PassNode.js +690 -33
- package/src/nodes/display/RenderOutputNode.js +94 -4
- package/src/nodes/display/ScreenNode.js +138 -27
- package/src/nodes/display/ToneMappingFunctions.js +62 -10
- package/src/nodes/display/ToneMappingNode.js +88 -8
- package/src/nodes/display/ToonOutlinePassNode.js +84 -4
- package/src/nodes/display/ViewportDepthNode.js +227 -10
- package/src/nodes/display/ViewportDepthTextureNode.js +39 -5
- package/src/nodes/display/ViewportSharedTextureNode.js +35 -1
- package/src/nodes/display/ViewportTextureNode.js +171 -7
- package/src/nodes/fog/Fog.js +97 -0
- package/src/nodes/functions/BSDF/BRDF_GGX.js +2 -6
- package/src/nodes/functions/BSDF/BRDF_GGX_Multiscatter.js +52 -0
- package/src/nodes/functions/BSDF/BRDF_Sheen.js +4 -4
- package/src/nodes/functions/BSDF/DFGLUT.js +56 -0
- package/src/nodes/functions/BSDF/EnvironmentBRDF.js +2 -2
- package/src/nodes/functions/BSDF/LTC.js +45 -1
- package/src/nodes/functions/BSDF/V_GGX_SmithCorrelated_Anisotropic.js +1 -1
- package/src/nodes/functions/BasicLightingModel.js +28 -6
- package/src/nodes/functions/PhongLightingModel.js +36 -6
- package/src/nodes/functions/PhysicalLightingModel.js +336 -91
- package/src/nodes/functions/ShadowMaskModel.js +30 -3
- package/src/nodes/functions/ToonLightingModel.js +21 -2
- package/src/nodes/functions/VolumetricLightingModel.js +183 -0
- package/src/nodes/functions/material/getAlphaHashThreshold.js +68 -0
- package/src/nodes/functions/material/getGeometryRoughness.js +10 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +37 -0
- package/src/nodes/geometry/RangeNode.js +97 -8
- package/src/nodes/gpgpu/AtomicFunctionNode.js +198 -23
- package/src/nodes/gpgpu/BarrierNode.js +52 -3
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +135 -6
- package/src/nodes/gpgpu/ComputeNode.js +212 -16
- package/src/nodes/gpgpu/SubgroupFunctionNode.js +455 -0
- package/src/nodes/gpgpu/WorkgroupInfoNode.js +143 -9
- package/src/nodes/lighting/AONode.js +18 -0
- package/src/nodes/lighting/AmbientLightNode.js +10 -0
- package/src/nodes/lighting/AnalyticLightNode.js +186 -399
- package/src/nodes/lighting/BasicEnvironmentNode.js +19 -0
- package/src/nodes/lighting/BasicLightMapNode.js +17 -0
- package/src/nodes/lighting/DirectionalLightNode.js +12 -11
- package/src/nodes/lighting/EnvironmentNode.js +59 -19
- package/src/nodes/lighting/HemisphereLightNode.js +33 -2
- package/src/nodes/lighting/IESSpotLightNode.js +13 -1
- package/src/nodes/lighting/IrradianceNode.js +17 -0
- package/src/nodes/lighting/LightProbeNode.js +20 -0
- package/src/nodes/lighting/LightUtils.js +11 -3
- package/src/nodes/lighting/LightingContextNode.js +52 -4
- package/src/nodes/lighting/LightingNode.js +15 -6
- package/src/nodes/lighting/LightsNode.js +238 -35
- package/src/nodes/lighting/PointLightNode.js +60 -25
- package/src/nodes/lighting/PointShadowNode.js +325 -0
- package/src/nodes/lighting/ProjectorLightNode.js +91 -0
- package/src/nodes/lighting/RectAreaLightNode.js +50 -14
- package/src/nodes/lighting/ShadowBaseNode.js +81 -0
- package/src/nodes/lighting/ShadowFilterNode.js +264 -0
- package/src/nodes/lighting/ShadowNode.js +867 -0
- package/src/nodes/lighting/SpotLightNode.js +99 -18
- package/src/nodes/materialx/MaterialXNodes.js +131 -2
- package/src/nodes/materialx/lib/mx_noise.js +166 -2
- package/src/nodes/math/BitcastNode.js +156 -0
- package/src/nodes/math/BitcountNode.js +433 -0
- package/src/nodes/math/ConditionalNode.js +110 -21
- package/src/nodes/math/Hash.js +8 -0
- package/src/nodes/math/MathNode.js +820 -97
- package/src/nodes/math/MathUtils.js +47 -1
- package/src/nodes/math/OperatorNode.js +517 -84
- package/src/nodes/math/PackFloatNode.js +98 -0
- package/src/nodes/math/TriNoise3D.js +17 -7
- package/src/nodes/math/UnpackFloatNode.js +96 -0
- package/src/nodes/parsers/GLSLNodeFunction.js +16 -0
- package/src/nodes/parsers/GLSLNodeParser.js +11 -0
- package/src/nodes/pmrem/PMREMNode.js +180 -23
- package/src/nodes/pmrem/PMREMUtils.js +114 -5
- package/src/nodes/procedural/Checker.js +8 -0
- package/src/nodes/shapes/Shapes.js +33 -0
- package/src/nodes/tsl/TSLBase.js +10 -4
- package/src/nodes/tsl/TSLCore.js +732 -160
- package/src/nodes/utils/ArrayElementNode.js +55 -4
- package/src/nodes/utils/ConvertNode.js +31 -0
- package/src/nodes/utils/CubeMapNode.js +79 -2
- package/src/nodes/utils/DebugNode.js +83 -0
- package/src/nodes/utils/Discard.js +18 -2
- package/src/nodes/utils/EquirectUV.js +27 -0
- package/src/nodes/utils/EventNode.js +118 -0
- package/src/nodes/utils/FlipNode.js +38 -0
- package/src/nodes/utils/FunctionOverloadingNode.js +91 -22
- package/src/nodes/utils/JoinNode.js +57 -4
- package/src/nodes/utils/LoopNode.js +193 -55
- package/src/nodes/utils/MatcapUV.js +22 -0
- package/src/nodes/utils/MaxMipLevelNode.js +49 -1
- package/src/nodes/utils/MemberNode.js +120 -0
- package/src/nodes/utils/Oscillators.js +41 -0
- package/src/nodes/utils/Packing.js +30 -1
- package/src/nodes/utils/PostProcessingUtils.js +154 -0
- package/src/nodes/utils/RTTNode.js +165 -9
- package/src/nodes/utils/ReflectorNode.js +407 -21
- package/src/nodes/utils/RemapNode.js +81 -2
- package/src/nodes/utils/RotateNode.js +41 -1
- package/src/nodes/utils/SampleNode.js +91 -0
- package/src/nodes/utils/SetNode.js +44 -1
- package/src/nodes/utils/SplitNode.js +66 -3
- package/src/nodes/utils/SpriteSheetUV.js +35 -0
- package/src/nodes/utils/SpriteUtils.js +16 -0
- package/src/nodes/utils/StorageArrayElementNode.js +56 -3
- package/src/nodes/utils/Timer.js +26 -0
- package/src/nodes/utils/TriplanarTextures.js +65 -0
- package/src/nodes/utils/UVUtils.js +48 -0
- package/src/nodes/utils/ViewportUtils.js +12 -0
- package/src/objects/BatchedMesh.js +798 -309
- package/src/objects/Bone.js +24 -0
- package/src/objects/ClippingGroup.js +68 -0
- package/src/objects/Group.js +24 -0
- package/src/objects/InstancedMesh.js +131 -2
- package/src/objects/LOD.js +99 -5
- package/src/objects/Line.js +90 -7
- package/src/objects/LineLoop.js +20 -0
- package/src/objects/LineSegments.js +20 -1
- package/src/objects/Mesh.js +84 -0
- package/src/objects/Points.js +60 -0
- package/src/objects/Skeleton.js +120 -5
- package/src/objects/SkinnedMesh.js +102 -6
- package/src/objects/Sprite.js +65 -1
- package/src/renderers/WebGL3DRenderTarget.js +26 -0
- package/src/renderers/WebGLArrayRenderTarget.js +26 -0
- package/src/renderers/WebGLCubeRenderTarget.js +41 -5
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +1016 -278
- package/src/renderers/common/Animation.js +123 -14
- package/src/renderers/common/Attributes.js +41 -1
- package/src/renderers/common/Backend.js +623 -44
- package/src/renderers/common/Background.js +99 -16
- package/src/renderers/common/BindGroup.js +37 -2
- package/src/renderers/common/Binding.js +46 -0
- package/src/renderers/common/Bindings.js +211 -20
- package/src/renderers/common/BlendMode.js +143 -0
- package/src/renderers/common/Buffer.js +89 -0
- package/src/renderers/common/BufferUtils.js +25 -0
- package/src/renderers/common/BundleGroup.js +57 -0
- package/src/renderers/common/CanvasTarget.js +341 -0
- package/src/renderers/common/ChainMap.js +73 -10
- package/src/renderers/common/ClippingContext.js +172 -87
- package/src/renderers/common/Color4.js +40 -0
- package/src/renderers/common/ComputePipeline.js +24 -0
- package/src/renderers/common/Constants.js +2 -1
- package/src/renderers/common/CubeRenderTarget.js +77 -7
- package/src/renderers/common/DataMap.js +37 -1
- package/src/renderers/common/Geometries.js +163 -14
- package/src/renderers/common/IndirectStorageBufferAttribute.js +38 -0
- package/src/renderers/common/Info.js +81 -36
- package/src/renderers/common/InspectorBase.js +146 -0
- package/src/renderers/common/Lighting.js +57 -0
- package/src/renderers/common/Pipeline.js +22 -0
- package/src/renderers/common/Pipelines.js +150 -7
- package/src/renderers/common/PostProcessing.js +22 -84
- package/src/renderers/common/ProgrammableStage.js +60 -2
- package/src/renderers/common/QuadMesh.js +63 -6
- package/src/renderers/common/RenderBundle.js +14 -8
- package/src/renderers/common/RenderBundles.js +40 -10
- package/src/renderers/common/RenderContext.js +219 -4
- package/src/renderers/common/RenderContexts.js +54 -17
- package/src/renderers/common/RenderList.js +233 -24
- package/src/renderers/common/RenderLists.js +46 -6
- package/src/renderers/common/RenderObject.js +548 -46
- package/src/renderers/common/RenderObjectPipeline.js +40 -0
- package/src/renderers/common/RenderObjects.js +133 -15
- package/src/renderers/common/RenderPipeline.js +216 -6
- package/src/renderers/common/Renderer.js +2155 -332
- package/src/renderers/common/RendererUtils.js +200 -0
- package/src/renderers/common/SampledTexture.js +99 -39
- package/src/renderers/common/Sampler.js +148 -1
- package/src/renderers/common/Storage3DTexture.js +100 -0
- package/src/renderers/common/StorageArrayTexture.js +84 -0
- package/src/renderers/common/StorageBuffer.js +38 -2
- package/src/renderers/common/StorageBufferAttribute.js +31 -2
- package/src/renderers/common/StorageInstancedBufferAttribute.js +31 -2
- package/src/renderers/common/StorageTexture.js +65 -0
- package/src/renderers/common/Textures.js +273 -57
- package/src/renderers/common/TimestampQueryPool.js +163 -0
- package/src/renderers/common/Uniform.js +233 -3
- package/src/renderers/common/UniformBuffer.js +19 -0
- package/src/renderers/common/UniformsGroup.js +235 -26
- package/src/renderers/common/XRManager.js +1677 -0
- package/src/renderers/common/XRRenderTarget.js +91 -0
- package/src/renderers/common/extras/PMREMGenerator.js +371 -108
- package/src/renderers/common/nodes/NodeBuilderState.js +100 -6
- package/src/renderers/common/nodes/NodeLibrary.js +95 -17
- package/src/renderers/common/nodes/NodeManager.js +852 -0
- package/src/renderers/common/nodes/NodeSampledTexture.js +84 -8
- package/src/renderers/common/nodes/NodeSampler.js +41 -1
- package/src/renderers/common/nodes/NodeStorageBuffer.js +48 -3
- package/src/renderers/common/nodes/NodeUniform.js +285 -2
- package/src/renderers/common/nodes/NodeUniformBuffer.js +81 -0
- package/src/renderers/common/nodes/NodeUniformsGroup.js +31 -18
- package/src/renderers/shaders/DFGLUTData.js +49 -0
- package/src/renderers/shaders/ShaderChunk/batching_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/color_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_fragment.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_pars_vertex.glsl.js +1 -5
- package/src/renderers/shaders/ShaderChunk/color_vertex.glsl.js +8 -10
- package/src/renderers/shaders/ShaderChunk/colorspace_pars_fragment.glsl.js +4 -24
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +0 -12
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +7 -11
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +5 -2
- package/src/renderers/shaders/ShaderChunk/lights_fragment_end.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +6 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +8 -4
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +154 -59
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/logdepthbuf_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +20 -4
- package/src/renderers/shaders/ShaderChunk/premultiplied_alpha_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +230 -181
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk.js +3 -3
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +14 -2
- package/src/renderers/shaders/ShaderLib/{distanceRGBA.glsl.js → distance.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +1 -2
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +4 -9
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib.js +7 -5
- package/src/renderers/shaders/UniformsLib.js +2 -7
- package/src/renderers/shaders/UniformsUtils.js +21 -2
- package/src/renderers/webgl/WebGLAttributes.js +4 -0
- package/src/renderers/webgl/WebGLBackground.js +30 -5
- package/src/renderers/webgl/WebGLBindingStates.js +99 -27
- package/src/renderers/webgl/WebGLBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLCapabilities.js +7 -14
- package/src/renderers/webgl/WebGLEnvironments.js +228 -0
- package/src/renderers/webgl/WebGLExtensions.js +2 -25
- package/src/renderers/webgl/WebGLGeometries.js +10 -35
- package/src/renderers/webgl/WebGLIndexedBufferRenderer.js +2 -6
- package/src/renderers/webgl/WebGLInfo.js +3 -1
- package/src/renderers/webgl/WebGLLights.js +18 -1
- package/src/renderers/webgl/WebGLMaterials.js +12 -0
- package/src/renderers/webgl/WebGLObjects.js +3 -1
- package/src/renderers/webgl/WebGLOutput.js +267 -0
- package/src/renderers/webgl/WebGLProgram.js +87 -148
- package/src/renderers/webgl/WebGLPrograms.js +53 -51
- package/src/renderers/webgl/WebGLRenderLists.js +15 -0
- package/src/renderers/webgl/WebGLShadowMap.js +204 -28
- package/src/renderers/webgl/WebGLState.js +88 -56
- package/src/renderers/webgl/WebGLTextures.js +293 -59
- package/src/renderers/webgl/WebGLUniforms.js +40 -3
- package/src/renderers/webgl/WebGLUniformsGroups.js +5 -3
- package/src/renderers/webgl/WebGLUtils.js +7 -5
- package/src/renderers/webgl-fallback/WebGLBackend.js +1416 -293
- package/src/renderers/webgl-fallback/WebGLBufferRenderer.js +5 -10
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +785 -92
- package/src/renderers/webgl-fallback/utils/WebGLAttributeUtils.js +62 -1
- package/src/renderers/webgl-fallback/utils/WebGLCapabilities.js +28 -0
- package/src/renderers/webgl-fallback/utils/WebGLConstants.js +3 -3
- package/src/renderers/webgl-fallback/utils/WebGLExtensions.js +45 -0
- package/src/renderers/webgl-fallback/utils/WebGLState.js +584 -20
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +468 -80
- package/src/renderers/webgl-fallback/utils/WebGLTimestampQueryPool.js +396 -0
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +72 -24
- package/src/renderers/webgpu/WebGPUBackend.js +1517 -428
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +31 -4
- package/src/renderers/webgpu/WebGPURenderer.js +55 -4
- package/src/renderers/webgpu/nodes/BasicNodeLibrary.js +23 -16
- package/src/renderers/webgpu/nodes/StandardNodeLibrary.js +37 -42
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +1335 -241
- package/src/renderers/webgpu/nodes/WGSLNodeFunction.js +32 -4
- package/src/renderers/webgpu/nodes/WGSLNodeParser.js +11 -0
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +144 -20
- package/src/renderers/webgpu/utils/WebGPUBindingUtils.js +460 -116
- package/src/renderers/webgpu/utils/WebGPUConstants.js +17 -4
- package/src/renderers/webgpu/utils/WebGPUPipelineUtils.js +283 -69
- package/src/renderers/webgpu/utils/WebGPUTexturePassUtils.js +225 -178
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +583 -191
- package/src/renderers/webgpu/utils/WebGPUTimestampQueryPool.js +310 -0
- package/src/renderers/webgpu/utils/WebGPUUtils.js +150 -28
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +52 -7
- package/src/renderers/webxr/WebXRManager.js +275 -15
- 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/CubeDepthTexture.js +76 -0
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +79 -2
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -11
- package/src/textures/ExternalTexture.js +56 -0
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +106 -4
- package/src/textures/Texture.js +488 -6
- package/src/textures/VideoFrameTexture.js +72 -0
- package/src/textures/VideoTexture.js +78 -6
- package/src/utils.js +322 -3
- package/examples/jsm/animation/MMDAnimationHelper.js +0 -1207
- package/examples/jsm/animation/MMDPhysics.js +0 -1406
- package/examples/jsm/cameras/CinematicCamera.js +0 -208
- package/examples/jsm/effects/PeppersGhostEffect.js +0 -153
- package/examples/jsm/exporters/MMDExporter.js +0 -217
- package/examples/jsm/geometries/InstancedPointsGeometry.js +0 -174
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
- package/examples/jsm/libs/mmdparser.module.js +0 -11530
- package/examples/jsm/loaders/GLTFLoaderAnimationPointer.js +0 -729
- package/examples/jsm/loaders/MMDLoader.js +0 -2295
- package/examples/jsm/loaders/RGBMLoader.js +0 -1081
- package/examples/jsm/materials/MeshGouraudMaterial.js +0 -432
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +0 -144
- package/examples/jsm/misc/Timer.js +0 -128
- package/examples/jsm/objects/InstancedPoints.js +0 -21
- package/examples/jsm/shaders/GodRaysShader.js +0 -321
- package/examples/jsm/shaders/MMDToonShader.js +0 -134
- package/src/materials/nodes/InstancedPointsNodeMaterial.js +0 -156
- package/src/nodes/accessors/InstancedPointsMaterialNode.js +0 -24
- package/src/nodes/accessors/SceneNode.js +0 -55
- package/src/nodes/code/ScriptableNode.js +0 -505
- package/src/nodes/code/ScriptableValueNode.js +0 -170
- package/src/nodes/core/CacheNode.js +0 -50
- package/src/nodes/core/UniformGroup.js +0 -13
- package/src/nodes/display/AfterImageNode.js +0 -158
- package/src/nodes/display/AnaglyphPassNode.js +0 -67
- package/src/nodes/display/AnamorphicNode.js +0 -151
- package/src/nodes/display/BlendMode.js +0 -54
- package/src/nodes/display/BloomNode.js +0 -341
- package/src/nodes/display/DenoiseNode.js +0 -204
- package/src/nodes/display/DepthOfFieldNode.js +0 -124
- package/src/nodes/display/DotScreenNode.js +0 -66
- package/src/nodes/display/FXAANode.js +0 -332
- package/src/nodes/display/FilmNode.js +0 -56
- package/src/nodes/display/GTAONode.js +0 -331
- package/src/nodes/display/GaussianBlurNode.js +0 -213
- package/src/nodes/display/Lut3DNode.js +0 -57
- package/src/nodes/display/MotionBlur.js +0 -25
- package/src/nodes/display/ParallaxBarrierPassNode.js +0 -58
- package/src/nodes/display/PixelationPassNode.js +0 -213
- package/src/nodes/display/PosterizeNode.js +0 -33
- package/src/nodes/display/RGBShiftNode.js +0 -53
- package/src/nodes/display/StereoCompositePassNode.js +0 -110
- package/src/nodes/display/TransitionNode.js +0 -80
- package/src/nodes/fog/FogExp2Node.js +0 -35
- package/src/nodes/fog/FogNode.js +0 -50
- package/src/nodes/fog/FogRangeNode.js +0 -36
- package/src/nodes/functions/BSDF/DFGApprox.js +0 -30
- package/src/nodes/utils/EquirectUVNode.js +0 -36
- package/src/nodes/utils/MatcapUVNode.js +0 -33
- package/src/nodes/utils/OscNode.js +0 -85
- package/src/nodes/utils/SpriteSheetUVNode.js +0 -45
- package/src/nodes/utils/TimerNode.js +0 -97
- package/src/nodes/utils/TriplanarTexturesNode.js +0 -64
- package/src/renderers/common/nodes/Nodes.js +0 -534
- package/src/renderers/webgl/WebGLCubeMaps.js +0 -99
- package/src/renderers/webgl/WebGLCubeUVMaps.js +0 -136
|
@@ -5,10 +5,6 @@ import {
|
|
|
5
5
|
Vector3
|
|
6
6
|
} from 'three';
|
|
7
7
|
|
|
8
|
-
/**
|
|
9
|
-
* Ported from: https://github.com/maurizzzio/quickhull3d/ by Mauricio Poppe (https://github.com/maurizzzio)
|
|
10
|
-
*/
|
|
11
|
-
|
|
12
8
|
const Visible = 0;
|
|
13
9
|
const Deleted = 1;
|
|
14
10
|
|
|
@@ -18,8 +14,20 @@ const _plane = new Plane();
|
|
|
18
14
|
const _closestPoint = new Vector3();
|
|
19
15
|
const _triangle = new Triangle();
|
|
20
16
|
|
|
17
|
+
/**
|
|
18
|
+
* Can be used to compute the convex hull in 3D space for a given set of points. It
|
|
19
|
+
* is primarily intended for {@link ConvexGeometry}.
|
|
20
|
+
*
|
|
21
|
+
* This Quickhull 3D implementation is a port of [quickhull3d](https://github.com/maurizzzio/quickhull3d/)
|
|
22
|
+
* by Mauricio Poppe.
|
|
23
|
+
*
|
|
24
|
+
* @three_import import { ConvexHull } from 'three/addons/math/ConvexHull.js';
|
|
25
|
+
*/
|
|
21
26
|
class ConvexHull {
|
|
22
27
|
|
|
28
|
+
/**
|
|
29
|
+
* Constructs a new convex hull.
|
|
30
|
+
*/
|
|
23
31
|
constructor() {
|
|
24
32
|
|
|
25
33
|
this.tolerance = - 1;
|
|
@@ -40,10 +48,16 @@ class ConvexHull {
|
|
|
40
48
|
this.assigned = new VertexList();
|
|
41
49
|
this.unassigned = new VertexList();
|
|
42
50
|
|
|
43
|
-
this.vertices = [];
|
|
51
|
+
this.vertices = []; // vertices of the hull (internal representation of given geometry data)
|
|
44
52
|
|
|
45
53
|
}
|
|
46
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Computes to convex hull for the given array of points.
|
|
57
|
+
*
|
|
58
|
+
* @param {Array<Vector3>} points - The array of points in 3D space.
|
|
59
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
60
|
+
*/
|
|
47
61
|
setFromPoints( points ) {
|
|
48
62
|
|
|
49
63
|
// The algorithm needs at least four points.
|
|
@@ -58,7 +72,7 @@ class ConvexHull {
|
|
|
58
72
|
|
|
59
73
|
}
|
|
60
74
|
|
|
61
|
-
this.
|
|
75
|
+
this._compute();
|
|
62
76
|
|
|
63
77
|
}
|
|
64
78
|
|
|
@@ -66,6 +80,13 @@ class ConvexHull {
|
|
|
66
80
|
|
|
67
81
|
}
|
|
68
82
|
|
|
83
|
+
/**
|
|
84
|
+
* Computes the convex hull of the given 3D object (including its descendants),
|
|
85
|
+
* accounting for the world transforms of both the 3D object and its descendants.
|
|
86
|
+
*
|
|
87
|
+
* @param {Object3D} object - The 3D object to compute the convex hull for.
|
|
88
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
89
|
+
*/
|
|
69
90
|
setFromObject( object ) {
|
|
70
91
|
|
|
71
92
|
const points = [];
|
|
@@ -102,6 +123,12 @@ class ConvexHull {
|
|
|
102
123
|
|
|
103
124
|
}
|
|
104
125
|
|
|
126
|
+
/**
|
|
127
|
+
* Returns `true` if the given point lies in the convex hull.
|
|
128
|
+
*
|
|
129
|
+
* @param {Vector3} point - The point to test.
|
|
130
|
+
* @return {boolean} Whether the given point lies in the convex hull or not.
|
|
131
|
+
*/
|
|
105
132
|
containsPoint( point ) {
|
|
106
133
|
|
|
107
134
|
const faces = this.faces;
|
|
@@ -120,6 +147,13 @@ class ConvexHull {
|
|
|
120
147
|
|
|
121
148
|
}
|
|
122
149
|
|
|
150
|
+
/**
|
|
151
|
+
* Computes the intersections point of the given ray and this convex hull.
|
|
152
|
+
*
|
|
153
|
+
* @param {Ray} ray - The ray to test.
|
|
154
|
+
* @param {Vector3} target - The target vector that is used to store the method's result.
|
|
155
|
+
* @return {?Vector3} The intersection point. Returns `null` if not intersection was detected.
|
|
156
|
+
*/
|
|
123
157
|
intersectRay( ray, target ) {
|
|
124
158
|
|
|
125
159
|
// based on "Fast Ray-Convex Polyhedron Intersection" by Eric Haines, GRAPHICS GEMS II
|
|
@@ -196,12 +230,23 @@ class ConvexHull {
|
|
|
196
230
|
|
|
197
231
|
}
|
|
198
232
|
|
|
233
|
+
/**
|
|
234
|
+
* Returns `true` if the given ray intersects with this convex hull.
|
|
235
|
+
*
|
|
236
|
+
* @param {Ray} ray - The ray to test.
|
|
237
|
+
* @return {boolean} Whether the given ray intersects with this convex hull or not.
|
|
238
|
+
*/
|
|
199
239
|
intersectsRay( ray ) {
|
|
200
240
|
|
|
201
241
|
return this.intersectRay( ray, _v1 ) !== null;
|
|
202
242
|
|
|
203
243
|
}
|
|
204
244
|
|
|
245
|
+
/**
|
|
246
|
+
* Makes the convex hull empty.
|
|
247
|
+
*
|
|
248
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
249
|
+
*/
|
|
205
250
|
makeEmpty() {
|
|
206
251
|
|
|
207
252
|
this.faces = [];
|
|
@@ -211,9 +256,17 @@ class ConvexHull {
|
|
|
211
256
|
|
|
212
257
|
}
|
|
213
258
|
|
|
214
|
-
//
|
|
259
|
+
// private
|
|
215
260
|
|
|
216
|
-
|
|
261
|
+
/**
|
|
262
|
+
* Adds a vertex to the 'assigned' list of vertices and assigns it to the given face.
|
|
263
|
+
*
|
|
264
|
+
* @private
|
|
265
|
+
* @param {VertexNode} vertex - The vertex to add.
|
|
266
|
+
* @param {Face} face - The target face.
|
|
267
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
268
|
+
*/
|
|
269
|
+
_addVertexToFace( vertex, face ) {
|
|
217
270
|
|
|
218
271
|
vertex.face = face;
|
|
219
272
|
|
|
@@ -233,9 +286,17 @@ class ConvexHull {
|
|
|
233
286
|
|
|
234
287
|
}
|
|
235
288
|
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
289
|
+
/**
|
|
290
|
+
* Removes a vertex from the 'assigned' list of vertices and from the given face.
|
|
291
|
+
* It also makes sure that the link from 'face' to the first vertex it sees in 'assigned'
|
|
292
|
+
* is linked correctly after the removal.
|
|
293
|
+
*
|
|
294
|
+
* @private
|
|
295
|
+
* @param {VertexNode} vertex - The vertex to remove.
|
|
296
|
+
* @param {Face} face - The target face.
|
|
297
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
298
|
+
*/
|
|
299
|
+
_removeVertexFromFace( vertex, face ) {
|
|
239
300
|
|
|
240
301
|
if ( vertex === face.outside ) {
|
|
241
302
|
|
|
@@ -263,9 +324,15 @@ class ConvexHull {
|
|
|
263
324
|
|
|
264
325
|
}
|
|
265
326
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
327
|
+
/**
|
|
328
|
+
* Removes all the visible vertices that a given face is able to see which are stored in
|
|
329
|
+
* the 'assigned' vertex list.
|
|
330
|
+
*
|
|
331
|
+
* @private
|
|
332
|
+
* @param {Face} face - The target face.
|
|
333
|
+
* @return {VertexNode|undefined} A reference to this convex hull.
|
|
334
|
+
*/
|
|
335
|
+
_removeAllVerticesFromFace( face ) {
|
|
269
336
|
|
|
270
337
|
if ( face.outside !== null ) {
|
|
271
338
|
|
|
@@ -293,11 +360,21 @@ class ConvexHull {
|
|
|
293
360
|
|
|
294
361
|
}
|
|
295
362
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
363
|
+
/**
|
|
364
|
+
* Removes all the visible vertices that `face` is able to see.
|
|
365
|
+
*
|
|
366
|
+
* - If `absorbingFace` doesn't exist, then all the removed vertices will be added to the 'unassigned' vertex list.
|
|
367
|
+
* - If `absorbingFace` exists, then this method will assign all the vertices of 'face' that can see 'absorbingFace'.
|
|
368
|
+
* - If a vertex cannot see `absorbingFace`, it's added to the 'unassigned' vertex list.
|
|
369
|
+
*
|
|
370
|
+
* @private
|
|
371
|
+
* @param {Face} face - The given face.
|
|
372
|
+
* @param {Face} [absorbingFace] - An optional face that tries to absorb the vertices of the first face.
|
|
373
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
374
|
+
*/
|
|
375
|
+
_deleteFaceVertices( face, absorbingFace ) {
|
|
376
|
+
|
|
377
|
+
const faceVertices = this._removeAllVerticesFromFace( face );
|
|
301
378
|
|
|
302
379
|
if ( faceVertices !== undefined ) {
|
|
303
380
|
|
|
@@ -327,7 +404,7 @@ class ConvexHull {
|
|
|
327
404
|
|
|
328
405
|
if ( distance > this.tolerance ) {
|
|
329
406
|
|
|
330
|
-
this.
|
|
407
|
+
this._addVertexToFace( vertex, absorbingFace );
|
|
331
408
|
|
|
332
409
|
} else {
|
|
333
410
|
|
|
@@ -349,9 +426,14 @@ class ConvexHull {
|
|
|
349
426
|
|
|
350
427
|
}
|
|
351
428
|
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
429
|
+
/**
|
|
430
|
+
* Reassigns as many vertices as possible from the unassigned list to the new faces.
|
|
431
|
+
*
|
|
432
|
+
* @private
|
|
433
|
+
* @param {Array<Face>} newFaces - The new faces.
|
|
434
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
435
|
+
*/
|
|
436
|
+
_resolveUnassignedPoints( newFaces ) {
|
|
355
437
|
|
|
356
438
|
if ( this.unassigned.isEmpty() === false ) {
|
|
357
439
|
|
|
@@ -359,7 +441,7 @@ class ConvexHull {
|
|
|
359
441
|
|
|
360
442
|
do {
|
|
361
443
|
|
|
362
|
-
// buffer 'next' reference, see .
|
|
444
|
+
// buffer 'next' reference, see ._deleteFaceVertices()
|
|
363
445
|
|
|
364
446
|
const nextVertex = vertex.next;
|
|
365
447
|
|
|
@@ -392,7 +474,7 @@ class ConvexHull {
|
|
|
392
474
|
|
|
393
475
|
if ( maxFace !== null ) {
|
|
394
476
|
|
|
395
|
-
this.
|
|
477
|
+
this._addVertexToFace( vertex, maxFace );
|
|
396
478
|
|
|
397
479
|
}
|
|
398
480
|
|
|
@@ -406,9 +488,14 @@ class ConvexHull {
|
|
|
406
488
|
|
|
407
489
|
}
|
|
408
490
|
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
491
|
+
/**
|
|
492
|
+
* Computes the extremes values (min/max vectors) which will be used to
|
|
493
|
+
* compute the initial hull.
|
|
494
|
+
*
|
|
495
|
+
* @private
|
|
496
|
+
* @return {Object} The extremes.
|
|
497
|
+
*/
|
|
498
|
+
_computeExtremes() {
|
|
412
499
|
|
|
413
500
|
const min = new Vector3();
|
|
414
501
|
const max = new Vector3();
|
|
@@ -474,13 +561,17 @@ class ConvexHull {
|
|
|
474
561
|
|
|
475
562
|
}
|
|
476
563
|
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
564
|
+
/**
|
|
565
|
+
* Computes the initial simplex assigning to its faces all the points that are
|
|
566
|
+
* candidates to form part of the hull.
|
|
567
|
+
*
|
|
568
|
+
* @private
|
|
569
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
570
|
+
*/
|
|
571
|
+
_computeInitialHull() {
|
|
481
572
|
|
|
482
573
|
const vertices = this.vertices;
|
|
483
|
-
const extremes = this.
|
|
574
|
+
const extremes = this._computeExtremes();
|
|
484
575
|
const min = extremes.min;
|
|
485
576
|
const max = extremes.max;
|
|
486
577
|
|
|
@@ -652,7 +743,7 @@ class ConvexHull {
|
|
|
652
743
|
|
|
653
744
|
if ( maxFace !== null ) {
|
|
654
745
|
|
|
655
|
-
this.
|
|
746
|
+
this._addVertexToFace( vertex, maxFace );
|
|
656
747
|
|
|
657
748
|
}
|
|
658
749
|
|
|
@@ -664,9 +755,13 @@ class ConvexHull {
|
|
|
664
755
|
|
|
665
756
|
}
|
|
666
757
|
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
758
|
+
/**
|
|
759
|
+
* Removes inactive (e.g. deleted) faces from the internal face list.
|
|
760
|
+
*
|
|
761
|
+
* @private
|
|
762
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
763
|
+
*/
|
|
764
|
+
_reindexFaces() {
|
|
670
765
|
|
|
671
766
|
const activeFaces = [];
|
|
672
767
|
|
|
@@ -688,9 +783,17 @@ class ConvexHull {
|
|
|
688
783
|
|
|
689
784
|
}
|
|
690
785
|
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
786
|
+
/**
|
|
787
|
+
* Finds the next vertex to create faces with the current hull.
|
|
788
|
+
*
|
|
789
|
+
* - Let the initial face be the first face existing in the 'assigned' vertex list.
|
|
790
|
+
* - If a face doesn't exist then return since there're no vertices left.
|
|
791
|
+
* - Otherwise for each vertex that face sees find the one furthest away from it.
|
|
792
|
+
*
|
|
793
|
+
* @private
|
|
794
|
+
* @return {?VertexNode} The next vertex to add.
|
|
795
|
+
*/
|
|
796
|
+
_nextVertexToAdd() {
|
|
694
797
|
|
|
695
798
|
// if the 'assigned' list of vertices is empty, no vertices are left. return with 'undefined'
|
|
696
799
|
|
|
@@ -698,7 +801,7 @@ class ConvexHull {
|
|
|
698
801
|
|
|
699
802
|
let eyeVertex, maxDistance = 0;
|
|
700
803
|
|
|
701
|
-
//
|
|
804
|
+
// grab the first available face and start with the first visible vertex of that face
|
|
702
805
|
|
|
703
806
|
const eyeFace = this.assigned.first().face;
|
|
704
807
|
let vertex = eyeFace.outside;
|
|
@@ -726,15 +829,23 @@ class ConvexHull {
|
|
|
726
829
|
|
|
727
830
|
}
|
|
728
831
|
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
832
|
+
/**
|
|
833
|
+
* Computes a chain of half edges in CCW order called the 'horizon'. For an edge
|
|
834
|
+
* to be part of the horizon it must join a face that can see 'eyePoint' and a face
|
|
835
|
+
* that cannot see 'eyePoint'.
|
|
836
|
+
*
|
|
837
|
+
* @private
|
|
838
|
+
* @param {Vector3} eyePoint - The 3D-coordinates of a point.
|
|
839
|
+
* @param {HalfEdge} crossEdge - The edge used to jump to the current face.
|
|
840
|
+
* @param {Face} face - The current face being tested.
|
|
841
|
+
* @param {Array<HalfEdge>} horizon - The edges that form part of the horizon in CCW order.
|
|
842
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
843
|
+
*/
|
|
844
|
+
_computeHorizon( eyePoint, crossEdge, face, horizon ) {
|
|
734
845
|
|
|
735
846
|
// moves face's vertices to the 'unassigned' vertex list
|
|
736
847
|
|
|
737
|
-
this.
|
|
848
|
+
this._deleteFaceVertices( face );
|
|
738
849
|
|
|
739
850
|
face.mark = Deleted;
|
|
740
851
|
|
|
@@ -764,7 +875,7 @@ class ConvexHull {
|
|
|
764
875
|
|
|
765
876
|
// the opposite face can see the vertex, so proceed with next edge
|
|
766
877
|
|
|
767
|
-
this.
|
|
878
|
+
this._computeHorizon( eyePoint, twinEdge, oppositeFace, horizon );
|
|
768
879
|
|
|
769
880
|
} else {
|
|
770
881
|
|
|
@@ -784,9 +895,17 @@ class ConvexHull {
|
|
|
784
895
|
|
|
785
896
|
}
|
|
786
897
|
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
898
|
+
/**
|
|
899
|
+
* Creates a face with the vertices 'eyeVertex.point', 'horizonEdge.tail' and 'horizonEdge.head'
|
|
900
|
+
* in CCW order. All the half edges are created in CCW order thus the face is always pointing
|
|
901
|
+
* outside the hull.
|
|
902
|
+
*
|
|
903
|
+
* @private
|
|
904
|
+
* @param {VertexNode} eyeVertex - The vertex that is added to the hull.
|
|
905
|
+
* @param {HalfEdge} horizonEdge - A single edge of the horizon.
|
|
906
|
+
* @return {HalfEdge} The half edge whose vertex is the eyeVertex.
|
|
907
|
+
*/
|
|
908
|
+
_addAdjoiningFace( eyeVertex, horizonEdge ) {
|
|
790
909
|
|
|
791
910
|
// all the half edges are created in ccw order thus the face is always pointing outside the hull
|
|
792
911
|
|
|
@@ -803,10 +922,16 @@ class ConvexHull {
|
|
|
803
922
|
|
|
804
923
|
}
|
|
805
924
|
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
925
|
+
/**
|
|
926
|
+
* Adds 'horizon.length' faces to the hull, each face will be linked with the horizon
|
|
927
|
+
* opposite face and the face on the left/right.
|
|
928
|
+
*
|
|
929
|
+
* @private
|
|
930
|
+
* @param {VertexNode} eyeVertex - The vertex that is added to the hull.
|
|
931
|
+
* @param {Array<HalfEdge>} horizon - The horizon.
|
|
932
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
933
|
+
*/
|
|
934
|
+
_addNewFaces( eyeVertex, horizon ) {
|
|
810
935
|
|
|
811
936
|
this.newFaces = [];
|
|
812
937
|
|
|
@@ -819,7 +944,7 @@ class ConvexHull {
|
|
|
819
944
|
|
|
820
945
|
// returns the right side edge
|
|
821
946
|
|
|
822
|
-
const sideEdge = this.
|
|
947
|
+
const sideEdge = this._addAdjoiningFace( eyeVertex, horizonEdge );
|
|
823
948
|
|
|
824
949
|
if ( firstSideEdge === null ) {
|
|
825
950
|
|
|
@@ -846,9 +971,21 @@ class ConvexHull {
|
|
|
846
971
|
|
|
847
972
|
}
|
|
848
973
|
|
|
849
|
-
|
|
850
|
-
|
|
851
|
-
|
|
974
|
+
/**
|
|
975
|
+
* Adds a vertex to the hull with the following algorithm:
|
|
976
|
+
*
|
|
977
|
+
* - Compute the 'horizon' which is a chain of half edges. For an edge to belong to this group
|
|
978
|
+
* it must be the edge connecting a face that can see 'eyeVertex' and a face which cannot see 'eyeVertex'.
|
|
979
|
+
* - All the faces that can see 'eyeVertex' have its visible vertices removed from the assigned vertex list.
|
|
980
|
+
* - A new set of faces is created with each edge of the 'horizon' and 'eyeVertex'. Each face is connected
|
|
981
|
+
* with the opposite horizon face and the face on the left/right.
|
|
982
|
+
* - The vertices removed from all the visible faces are assigned to the new faces if possible.
|
|
983
|
+
*
|
|
984
|
+
* @private
|
|
985
|
+
* @param {VertexNode} eyeVertex - The vertex to add.
|
|
986
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
987
|
+
*/
|
|
988
|
+
_addVertexToHull( eyeVertex ) {
|
|
852
989
|
|
|
853
990
|
const horizon = [];
|
|
854
991
|
|
|
@@ -856,21 +993,27 @@ class ConvexHull {
|
|
|
856
993
|
|
|
857
994
|
// remove 'eyeVertex' from 'eyeVertex.face' so that it can't be added to the 'unassigned' vertex list
|
|
858
995
|
|
|
859
|
-
this.
|
|
996
|
+
this._removeVertexFromFace( eyeVertex, eyeVertex.face );
|
|
860
997
|
|
|
861
|
-
this.
|
|
998
|
+
this._computeHorizon( eyeVertex.point, null, eyeVertex.face, horizon );
|
|
862
999
|
|
|
863
|
-
this.
|
|
1000
|
+
this._addNewFaces( eyeVertex, horizon );
|
|
864
1001
|
|
|
865
1002
|
// reassign 'unassigned' vertices to the new faces
|
|
866
1003
|
|
|
867
|
-
this.
|
|
1004
|
+
this._resolveUnassignedPoints( this.newFaces );
|
|
868
1005
|
|
|
869
1006
|
return this;
|
|
870
1007
|
|
|
871
1008
|
}
|
|
872
1009
|
|
|
873
|
-
|
|
1010
|
+
/**
|
|
1011
|
+
* Cleans up internal properties after computing the convex hull.
|
|
1012
|
+
*
|
|
1013
|
+
* @private
|
|
1014
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
1015
|
+
*/
|
|
1016
|
+
_cleanup() {
|
|
874
1017
|
|
|
875
1018
|
this.assigned.clear();
|
|
876
1019
|
this.unassigned.clear();
|
|
@@ -880,23 +1023,29 @@ class ConvexHull {
|
|
|
880
1023
|
|
|
881
1024
|
}
|
|
882
1025
|
|
|
883
|
-
|
|
1026
|
+
/**
|
|
1027
|
+
* Starts the execution of the quick hull algorithm.
|
|
1028
|
+
*
|
|
1029
|
+
* @private
|
|
1030
|
+
* @return {ConvexHull} A reference to this convex hull.
|
|
1031
|
+
*/
|
|
1032
|
+
_compute() {
|
|
884
1033
|
|
|
885
1034
|
let vertex;
|
|
886
1035
|
|
|
887
|
-
this.
|
|
1036
|
+
this._computeInitialHull();
|
|
888
1037
|
|
|
889
1038
|
// add all available vertices gradually to the hull
|
|
890
1039
|
|
|
891
|
-
while ( ( vertex = this.
|
|
1040
|
+
while ( ( vertex = this._nextVertexToAdd() ) !== undefined ) {
|
|
892
1041
|
|
|
893
|
-
this.
|
|
1042
|
+
this._addVertexToHull( vertex );
|
|
894
1043
|
|
|
895
1044
|
}
|
|
896
1045
|
|
|
897
|
-
this.
|
|
1046
|
+
this._reindexFaces();
|
|
898
1047
|
|
|
899
|
-
this.
|
|
1048
|
+
this._cleanup();
|
|
900
1049
|
|
|
901
1050
|
return this;
|
|
902
1051
|
|
|
@@ -904,23 +1053,84 @@ class ConvexHull {
|
|
|
904
1053
|
|
|
905
1054
|
}
|
|
906
1055
|
|
|
907
|
-
|
|
908
|
-
|
|
1056
|
+
/**
|
|
1057
|
+
* Represents a section bounded by a specific amount of half-edges.
|
|
1058
|
+
* The current implementation assumes that a face always consist of three edges.
|
|
1059
|
+
*
|
|
1060
|
+
* @private
|
|
1061
|
+
*/
|
|
909
1062
|
class Face {
|
|
910
1063
|
|
|
1064
|
+
/**
|
|
1065
|
+
* Constructs a new face.
|
|
1066
|
+
*/
|
|
911
1067
|
constructor() {
|
|
912
1068
|
|
|
1069
|
+
/**
|
|
1070
|
+
* The normal vector of the face.
|
|
1071
|
+
*
|
|
1072
|
+
* @private
|
|
1073
|
+
* @type {Vector3}
|
|
1074
|
+
*/
|
|
913
1075
|
this.normal = new Vector3();
|
|
1076
|
+
|
|
1077
|
+
/**
|
|
1078
|
+
* The midpoint or centroid of the face.
|
|
1079
|
+
*
|
|
1080
|
+
* @private
|
|
1081
|
+
* @type {Vector3}
|
|
1082
|
+
*/
|
|
914
1083
|
this.midpoint = new Vector3();
|
|
1084
|
+
|
|
1085
|
+
/**
|
|
1086
|
+
* The area of the face.
|
|
1087
|
+
*
|
|
1088
|
+
* @private
|
|
1089
|
+
* @type {number}
|
|
1090
|
+
* @default 0
|
|
1091
|
+
*/
|
|
915
1092
|
this.area = 0;
|
|
916
1093
|
|
|
917
|
-
|
|
1094
|
+
/**
|
|
1095
|
+
* Signed distance from face to the origin.
|
|
1096
|
+
*
|
|
1097
|
+
* @private
|
|
1098
|
+
* @type {number}
|
|
1099
|
+
* @default 0
|
|
1100
|
+
*/
|
|
1101
|
+
this.constant = 0;
|
|
1102
|
+
|
|
1103
|
+
/**
|
|
1104
|
+
* Reference to a vertex in a vertex list this face can see.
|
|
1105
|
+
*
|
|
1106
|
+
* @private
|
|
1107
|
+
* @type {?VertexNode}
|
|
1108
|
+
* @default null
|
|
1109
|
+
*/
|
|
918
1110
|
this.outside = null; // reference to a vertex in a vertex list this face can see
|
|
919
1111
|
this.mark = Visible;
|
|
1112
|
+
|
|
1113
|
+
/**
|
|
1114
|
+
* Reference to the base edge of a face. To retrieve all edges, you can use the
|
|
1115
|
+
* `next` reference of the current edge.
|
|
1116
|
+
*
|
|
1117
|
+
* @private
|
|
1118
|
+
* @type {?HalfEdge}
|
|
1119
|
+
* @default null
|
|
1120
|
+
*/
|
|
920
1121
|
this.edge = null;
|
|
921
1122
|
|
|
922
1123
|
}
|
|
923
1124
|
|
|
1125
|
+
/**
|
|
1126
|
+
* Creates a face from the given vertex nodes.
|
|
1127
|
+
*
|
|
1128
|
+
* @private
|
|
1129
|
+
* @param {VertexNode} a - The first vertex node.
|
|
1130
|
+
* @param {VertexNode} b - The second vertex node.
|
|
1131
|
+
* @param {VertexNode} c - The third vertex node.
|
|
1132
|
+
* @return {Face} The created face.
|
|
1133
|
+
*/
|
|
924
1134
|
static create( a, b, c ) {
|
|
925
1135
|
|
|
926
1136
|
const face = new Face();
|
|
@@ -943,6 +1153,13 @@ class Face {
|
|
|
943
1153
|
|
|
944
1154
|
}
|
|
945
1155
|
|
|
1156
|
+
/**
|
|
1157
|
+
* Returns an edge by the given index.
|
|
1158
|
+
*
|
|
1159
|
+
* @private
|
|
1160
|
+
* @param {number} i - The edge index.
|
|
1161
|
+
* @return {HalfEdge} The edge.
|
|
1162
|
+
*/
|
|
946
1163
|
getEdge( i ) {
|
|
947
1164
|
|
|
948
1165
|
let edge = this.edge;
|
|
@@ -965,6 +1182,12 @@ class Face {
|
|
|
965
1182
|
|
|
966
1183
|
}
|
|
967
1184
|
|
|
1185
|
+
/**
|
|
1186
|
+
* Computes all properties of the face.
|
|
1187
|
+
*
|
|
1188
|
+
* @private
|
|
1189
|
+
* @return {Face} A reference to this face.
|
|
1190
|
+
*/
|
|
968
1191
|
compute() {
|
|
969
1192
|
|
|
970
1193
|
const a = this.edge.tail();
|
|
@@ -983,6 +1206,13 @@ class Face {
|
|
|
983
1206
|
|
|
984
1207
|
}
|
|
985
1208
|
|
|
1209
|
+
/**
|
|
1210
|
+
* Returns the signed distance from a given point to the plane representation of this face.
|
|
1211
|
+
*
|
|
1212
|
+
* @private
|
|
1213
|
+
* @param {Vector3} point - The point to compute the distance to.
|
|
1214
|
+
* @return {number} The distance.
|
|
1215
|
+
*/
|
|
986
1216
|
distanceToPoint( point ) {
|
|
987
1217
|
|
|
988
1218
|
return this.normal.dot( point ) - this.constant;
|
|
@@ -991,33 +1221,97 @@ class Face {
|
|
|
991
1221
|
|
|
992
1222
|
}
|
|
993
1223
|
|
|
994
|
-
|
|
995
|
-
|
|
1224
|
+
/**
|
|
1225
|
+
* The basis for a half-edge data structure, also known as doubly
|
|
1226
|
+
* connected edge list (DCEL).
|
|
1227
|
+
*
|
|
1228
|
+
* @private
|
|
1229
|
+
*/
|
|
996
1230
|
class HalfEdge {
|
|
997
1231
|
|
|
998
|
-
|
|
1232
|
+
/**
|
|
1233
|
+
* Constructs a new half edge.
|
|
1234
|
+
*
|
|
1235
|
+
* @param {VertexNode} vertex - A reference to its destination vertex.
|
|
1236
|
+
* @param {Face} face - A reference to its face.
|
|
1237
|
+
*/
|
|
999
1238
|
constructor( vertex, face ) {
|
|
1000
1239
|
|
|
1240
|
+
/**
|
|
1241
|
+
* A reference to its destination vertex.
|
|
1242
|
+
*
|
|
1243
|
+
* @private
|
|
1244
|
+
* @type {VertexNode}
|
|
1245
|
+
*/
|
|
1001
1246
|
this.vertex = vertex;
|
|
1247
|
+
|
|
1248
|
+
/**
|
|
1249
|
+
* Reference to the previous half-edge of the same face.
|
|
1250
|
+
*
|
|
1251
|
+
* @private
|
|
1252
|
+
* @type {?HalfEdge}
|
|
1253
|
+
* @default null
|
|
1254
|
+
*/
|
|
1002
1255
|
this.prev = null;
|
|
1256
|
+
|
|
1257
|
+
/**
|
|
1258
|
+
* Reference to the next half-edge of the same face.
|
|
1259
|
+
*
|
|
1260
|
+
* @private
|
|
1261
|
+
* @type {?HalfEdge}
|
|
1262
|
+
* @default null
|
|
1263
|
+
*/
|
|
1003
1264
|
this.next = null;
|
|
1265
|
+
|
|
1266
|
+
/**
|
|
1267
|
+
* Reference to the twin half-edge to reach the opposite face.
|
|
1268
|
+
*
|
|
1269
|
+
* @private
|
|
1270
|
+
* @type {?HalfEdge}
|
|
1271
|
+
* @default null
|
|
1272
|
+
*/
|
|
1004
1273
|
this.twin = null;
|
|
1274
|
+
|
|
1275
|
+
/**
|
|
1276
|
+
* A reference to its face.
|
|
1277
|
+
*
|
|
1278
|
+
* @private
|
|
1279
|
+
* @type {Face}
|
|
1280
|
+
*/
|
|
1005
1281
|
this.face = face;
|
|
1006
1282
|
|
|
1007
1283
|
}
|
|
1008
1284
|
|
|
1285
|
+
/**
|
|
1286
|
+
* Returns the destination vertex.
|
|
1287
|
+
*
|
|
1288
|
+
* @private
|
|
1289
|
+
* @return {VertexNode} The destination vertex.
|
|
1290
|
+
*/
|
|
1009
1291
|
head() {
|
|
1010
1292
|
|
|
1011
1293
|
return this.vertex;
|
|
1012
1294
|
|
|
1013
1295
|
}
|
|
1014
1296
|
|
|
1297
|
+
/**
|
|
1298
|
+
* Returns the origin vertex.
|
|
1299
|
+
*
|
|
1300
|
+
* @private
|
|
1301
|
+
* @return {?VertexNode} The destination vertex.
|
|
1302
|
+
*/
|
|
1015
1303
|
tail() {
|
|
1016
1304
|
|
|
1017
1305
|
return this.prev ? this.prev.vertex : null;
|
|
1018
1306
|
|
|
1019
1307
|
}
|
|
1020
1308
|
|
|
1309
|
+
/**
|
|
1310
|
+
* Returns the Euclidean length (straight-line length) of the edge.
|
|
1311
|
+
*
|
|
1312
|
+
* @private
|
|
1313
|
+
* @return {number} The edge's length.
|
|
1314
|
+
*/
|
|
1021
1315
|
length() {
|
|
1022
1316
|
|
|
1023
1317
|
const head = this.head();
|
|
@@ -1033,6 +1327,12 @@ class HalfEdge {
|
|
|
1033
1327
|
|
|
1034
1328
|
}
|
|
1035
1329
|
|
|
1330
|
+
/**
|
|
1331
|
+
* Returns the square of the Euclidean length (straight-line length) of the edge.
|
|
1332
|
+
*
|
|
1333
|
+
* @private
|
|
1334
|
+
* @return {number} The square of the edge's length.
|
|
1335
|
+
*/
|
|
1036
1336
|
lengthSquared() {
|
|
1037
1337
|
|
|
1038
1338
|
const head = this.head();
|
|
@@ -1048,6 +1348,14 @@ class HalfEdge {
|
|
|
1048
1348
|
|
|
1049
1349
|
}
|
|
1050
1350
|
|
|
1351
|
+
/**
|
|
1352
|
+
* Sets the twin edge of this half-edge. It also ensures that the twin reference
|
|
1353
|
+
* of the given half-edge is correctly set.
|
|
1354
|
+
*
|
|
1355
|
+
* @private
|
|
1356
|
+
* @param {HalfEdge} edge - The twin edge to set.
|
|
1357
|
+
* @return {HalfEdge} A reference to this edge.
|
|
1358
|
+
*/
|
|
1051
1359
|
setTwin( edge ) {
|
|
1052
1360
|
|
|
1053
1361
|
this.twin = edge;
|
|
@@ -1059,44 +1367,121 @@ class HalfEdge {
|
|
|
1059
1367
|
|
|
1060
1368
|
}
|
|
1061
1369
|
|
|
1062
|
-
|
|
1063
|
-
|
|
1370
|
+
/**
|
|
1371
|
+
* A vertex as a double linked list node.
|
|
1372
|
+
*
|
|
1373
|
+
* @private
|
|
1374
|
+
*/
|
|
1064
1375
|
class VertexNode {
|
|
1065
1376
|
|
|
1377
|
+
/**
|
|
1378
|
+
* Constructs a new vertex node.
|
|
1379
|
+
*
|
|
1380
|
+
* @param {Vector3} point - A point in 3D space.
|
|
1381
|
+
*/
|
|
1066
1382
|
constructor( point ) {
|
|
1067
1383
|
|
|
1384
|
+
/**
|
|
1385
|
+
* A point in 3D space.
|
|
1386
|
+
*
|
|
1387
|
+
* @private
|
|
1388
|
+
* @type {Vector3}
|
|
1389
|
+
*/
|
|
1068
1390
|
this.point = point;
|
|
1391
|
+
|
|
1392
|
+
/**
|
|
1393
|
+
* Reference to the previous vertex in the double linked list.
|
|
1394
|
+
*
|
|
1395
|
+
* @private
|
|
1396
|
+
* @type {?VertexNode}
|
|
1397
|
+
* @default null
|
|
1398
|
+
*/
|
|
1069
1399
|
this.prev = null;
|
|
1400
|
+
|
|
1401
|
+
/**
|
|
1402
|
+
* Reference to the next vertex in the double linked list.
|
|
1403
|
+
*
|
|
1404
|
+
* @private
|
|
1405
|
+
* @type {?VertexNode}
|
|
1406
|
+
* @default null
|
|
1407
|
+
*/
|
|
1070
1408
|
this.next = null;
|
|
1071
|
-
|
|
1409
|
+
|
|
1410
|
+
/**
|
|
1411
|
+
* Reference to the face that is able to see this vertex.
|
|
1412
|
+
*
|
|
1413
|
+
* @private
|
|
1414
|
+
* @type {?Face}
|
|
1415
|
+
* @default null
|
|
1416
|
+
*/
|
|
1417
|
+
this.face = null;
|
|
1072
1418
|
|
|
1073
1419
|
}
|
|
1074
1420
|
|
|
1075
1421
|
}
|
|
1076
1422
|
|
|
1077
|
-
|
|
1078
|
-
|
|
1423
|
+
/**
|
|
1424
|
+
* A doubly linked list of vertices.
|
|
1425
|
+
*
|
|
1426
|
+
* @private
|
|
1427
|
+
*/
|
|
1079
1428
|
class VertexList {
|
|
1080
1429
|
|
|
1430
|
+
/**
|
|
1431
|
+
* Constructs a new vertex list.
|
|
1432
|
+
*/
|
|
1081
1433
|
constructor() {
|
|
1082
1434
|
|
|
1435
|
+
/**
|
|
1436
|
+
* Reference to the first vertex of the linked list.
|
|
1437
|
+
*
|
|
1438
|
+
* @private
|
|
1439
|
+
* @type {?VertexNode}
|
|
1440
|
+
* @default null
|
|
1441
|
+
*/
|
|
1083
1442
|
this.head = null;
|
|
1443
|
+
|
|
1444
|
+
/**
|
|
1445
|
+
* Reference to the last vertex of the linked list.
|
|
1446
|
+
*
|
|
1447
|
+
* @private
|
|
1448
|
+
* @type {?VertexNode}
|
|
1449
|
+
* @default null
|
|
1450
|
+
*/
|
|
1084
1451
|
this.tail = null;
|
|
1085
1452
|
|
|
1086
1453
|
}
|
|
1087
1454
|
|
|
1455
|
+
/**
|
|
1456
|
+
* Returns the head reference.
|
|
1457
|
+
*
|
|
1458
|
+
* @private
|
|
1459
|
+
* @return {VertexNode} The head reference.
|
|
1460
|
+
*/
|
|
1088
1461
|
first() {
|
|
1089
1462
|
|
|
1090
1463
|
return this.head;
|
|
1091
1464
|
|
|
1092
1465
|
}
|
|
1093
1466
|
|
|
1467
|
+
/**
|
|
1468
|
+
* Returns the tail reference.
|
|
1469
|
+
*
|
|
1470
|
+
* @private
|
|
1471
|
+
* @return {VertexNode} The tail reference.
|
|
1472
|
+
*/
|
|
1094
1473
|
last() {
|
|
1095
1474
|
|
|
1096
1475
|
return this.tail;
|
|
1097
1476
|
|
|
1098
1477
|
}
|
|
1099
1478
|
|
|
1479
|
+
/**
|
|
1480
|
+
* Clears the linked list.
|
|
1481
|
+
*
|
|
1482
|
+
* @private
|
|
1483
|
+
* @return {VertexList} A reference to this vertex list.
|
|
1484
|
+
*/
|
|
1100
1485
|
clear() {
|
|
1101
1486
|
|
|
1102
1487
|
this.head = this.tail = null;
|
|
@@ -1105,8 +1490,14 @@ class VertexList {
|
|
|
1105
1490
|
|
|
1106
1491
|
}
|
|
1107
1492
|
|
|
1108
|
-
|
|
1109
|
-
|
|
1493
|
+
/**
|
|
1494
|
+
* Inserts a vertex before a target vertex.
|
|
1495
|
+
*
|
|
1496
|
+
* @private
|
|
1497
|
+
* @param {VertexNode} target - The target.
|
|
1498
|
+
* @param {VertexNode} vertex - The vertex to insert.
|
|
1499
|
+
* @return {VertexList} A reference to this vertex list.
|
|
1500
|
+
*/
|
|
1110
1501
|
insertBefore( target, vertex ) {
|
|
1111
1502
|
|
|
1112
1503
|
vertex.prev = target.prev;
|
|
@@ -1128,8 +1519,14 @@ class VertexList {
|
|
|
1128
1519
|
|
|
1129
1520
|
}
|
|
1130
1521
|
|
|
1131
|
-
|
|
1132
|
-
|
|
1522
|
+
/**
|
|
1523
|
+
* Inserts a vertex after a target vertex.
|
|
1524
|
+
*
|
|
1525
|
+
* @private
|
|
1526
|
+
* @param {VertexNode} target - The target.
|
|
1527
|
+
* @param {VertexNode} vertex - The vertex to insert.
|
|
1528
|
+
* @return {VertexList} A reference to this vertex list.
|
|
1529
|
+
*/
|
|
1133
1530
|
insertAfter( target, vertex ) {
|
|
1134
1531
|
|
|
1135
1532
|
vertex.prev = target;
|
|
@@ -1151,8 +1548,13 @@ class VertexList {
|
|
|
1151
1548
|
|
|
1152
1549
|
}
|
|
1153
1550
|
|
|
1154
|
-
|
|
1155
|
-
|
|
1551
|
+
/**
|
|
1552
|
+
* Appends a vertex to this vertex list.
|
|
1553
|
+
*
|
|
1554
|
+
* @private
|
|
1555
|
+
* @param {VertexNode} vertex - The vertex to append.
|
|
1556
|
+
* @return {VertexList} A reference to this vertex list.
|
|
1557
|
+
*/
|
|
1156
1558
|
append( vertex ) {
|
|
1157
1559
|
|
|
1158
1560
|
if ( this.head === null ) {
|
|
@@ -1174,8 +1576,13 @@ class VertexList {
|
|
|
1174
1576
|
|
|
1175
1577
|
}
|
|
1176
1578
|
|
|
1177
|
-
|
|
1178
|
-
|
|
1579
|
+
/**
|
|
1580
|
+
* Appends a chain of vertices where the given vertex is the head.
|
|
1581
|
+
*
|
|
1582
|
+
* @private
|
|
1583
|
+
* @param {VertexNode} vertex - The head vertex of a chain of vertices.
|
|
1584
|
+
* @return {VertexList} A reference to this vertex list.
|
|
1585
|
+
*/
|
|
1179
1586
|
appendChain( vertex ) {
|
|
1180
1587
|
|
|
1181
1588
|
if ( this.head === null ) {
|
|
@@ -1204,8 +1611,13 @@ class VertexList {
|
|
|
1204
1611
|
|
|
1205
1612
|
}
|
|
1206
1613
|
|
|
1207
|
-
|
|
1208
|
-
|
|
1614
|
+
/**
|
|
1615
|
+
* Removes a vertex from the linked list.
|
|
1616
|
+
*
|
|
1617
|
+
* @private
|
|
1618
|
+
* @param {VertexNode} vertex - The vertex to remove.
|
|
1619
|
+
* @return {VertexList} A reference to this vertex list.
|
|
1620
|
+
*/
|
|
1209
1621
|
remove( vertex ) {
|
|
1210
1622
|
|
|
1211
1623
|
if ( vertex.prev === null ) {
|
|
@@ -1232,8 +1644,14 @@ class VertexList {
|
|
|
1232
1644
|
|
|
1233
1645
|
}
|
|
1234
1646
|
|
|
1235
|
-
|
|
1236
|
-
|
|
1647
|
+
/**
|
|
1648
|
+
* Removes a sublist of vertices from the linked list.
|
|
1649
|
+
*
|
|
1650
|
+
* @private
|
|
1651
|
+
* @param {VertexNode} a - The head of the sublist.
|
|
1652
|
+
* @param {VertexNode} b - The tail of the sublist.
|
|
1653
|
+
* @return {VertexList} A reference to this vertex list.
|
|
1654
|
+
*/
|
|
1237
1655
|
removeSubList( a, b ) {
|
|
1238
1656
|
|
|
1239
1657
|
if ( a.prev === null ) {
|
|
@@ -1260,6 +1678,12 @@ class VertexList {
|
|
|
1260
1678
|
|
|
1261
1679
|
}
|
|
1262
1680
|
|
|
1681
|
+
/**
|
|
1682
|
+
* Returns `true` if the linked list is empty.
|
|
1683
|
+
*
|
|
1684
|
+
* @private
|
|
1685
|
+
* @return {boolean} Whether the linked list is empty or not.
|
|
1686
|
+
*/
|
|
1263
1687
|
isEmpty() {
|
|
1264
1688
|
|
|
1265
1689
|
return this.head === null;
|