@plastic-software/three 0.174.0 → 0.175.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.cjs +10655 -1446
- package/build/three.core.js +9626 -1094
- package/build/three.core.min.js +1 -1
- package/build/three.module.js +834 -157
- package/build/three.module.min.js +1 -1
- package/build/three.tsl.js +4 -2
- package/build/three.tsl.min.js +1 -1
- package/build/three.webgpu.js +2658 -1697
- package/build/three.webgpu.min.js +1 -1
- package/build/three.webgpu.nodes.js +2654 -1709
- package/build/three.webgpu.nodes.min.js +1 -1
- package/examples/jsm/Addons.js +1 -1
- package/examples/jsm/animation/AnimationClipCreator.js +57 -6
- package/examples/jsm/animation/CCDIKSolver.js +93 -39
- package/examples/jsm/capabilities/WebGL.js +28 -3
- package/examples/jsm/capabilities/WebGPU.js +16 -6
- package/examples/jsm/controls/ArcballControls.js +424 -154
- package/examples/jsm/controls/DragControls.js +93 -2
- package/examples/jsm/controls/FirstPersonControls.js +113 -4
- package/examples/jsm/controls/FlyControls.js +49 -2
- package/examples/jsm/controls/MapControls.js +42 -9
- package/examples/jsm/controls/OrbitControls.js +345 -42
- package/examples/jsm/controls/PointerLockControls.js +111 -9
- package/examples/jsm/controls/TrackballControls.js +159 -8
- package/examples/jsm/controls/TransformControls.js +252 -6
- package/examples/jsm/csm/CSM.js +226 -15
- package/examples/jsm/csm/CSMFrustum.js +52 -0
- package/examples/jsm/csm/CSMHelper.js +47 -0
- package/examples/jsm/csm/CSMShader.js +10 -1
- package/examples/jsm/csm/CSMShadowNode.js +156 -13
- package/examples/jsm/curves/CurveExtras.js +289 -31
- package/examples/jsm/curves/NURBSCurve.js +57 -14
- package/examples/jsm/curves/NURBSSurface.js +50 -6
- package/examples/jsm/curves/NURBSUtils.js +96 -112
- package/examples/jsm/curves/NURBSVolume.js +22 -4
- package/examples/jsm/effects/AnaglyphEffect.js +30 -0
- package/examples/jsm/effects/AsciiEffect.js +60 -15
- package/examples/jsm/effects/OutlineEffect.js +59 -111
- package/examples/jsm/effects/ParallaxBarrierEffect.js +28 -0
- package/examples/jsm/effects/PeppersGhostEffect.js +21 -2
- package/examples/jsm/effects/StereoEffect.js +29 -0
- package/examples/jsm/environments/DebugEnvironment.js +49 -0
- package/examples/jsm/environments/RoomEnvironment.js +23 -4
- package/examples/jsm/exporters/DRACOExporter.js +53 -13
- package/examples/jsm/exporters/EXRExporter.js +37 -8
- package/examples/jsm/exporters/GLTFExporter.js +171 -48
- package/examples/jsm/exporters/KTX2Exporter.js +20 -0
- package/examples/jsm/exporters/OBJExporter.js +18 -0
- package/examples/jsm/exporters/PLYExporter.js +39 -9
- package/examples/jsm/exporters/STLExporter.js +25 -5
- package/examples/jsm/exporters/USDZExporter.js +70 -3
- package/examples/jsm/geometries/BoxLineGeometry.js +22 -0
- package/examples/jsm/geometries/ConvexGeometry.js +18 -0
- package/examples/jsm/geometries/DecalGeometry.js +20 -9
- package/examples/jsm/geometries/ParametricFunctions.js +97 -0
- package/examples/jsm/geometries/ParametricGeometry.js +37 -5
- package/examples/jsm/geometries/RoundedBoxGeometry.js +21 -0
- package/examples/jsm/geometries/TeapotGeometry.js +22 -38
- package/examples/jsm/geometries/TextGeometry.js +44 -16
- package/examples/jsm/helpers/LightProbeHelper.js +35 -0
- package/examples/jsm/helpers/LightProbeHelperGPU.js +36 -0
- package/examples/jsm/helpers/OctreeHelper.js +35 -0
- package/examples/jsm/helpers/PositionalAudioHelper.js +59 -0
- package/examples/jsm/helpers/RectAreaLightHelper.js +35 -3
- package/examples/jsm/helpers/TextureHelper.js +27 -0
- package/examples/jsm/helpers/TextureHelperGPU.js +28 -0
- package/examples/jsm/helpers/VertexNormalsHelper.js +58 -2
- package/examples/jsm/helpers/VertexTangentsHelper.js +46 -2
- package/examples/jsm/helpers/ViewHelper.js +75 -1
- package/examples/jsm/interactive/HTMLMesh.js +25 -0
- package/examples/jsm/interactive/InteractiveGroup.js +65 -5
- package/examples/jsm/interactive/SelectionBox.js +74 -9
- package/examples/jsm/interactive/SelectionHelper.js +71 -29
- package/examples/jsm/libs/motion-controllers.module.js +1 -1
- package/examples/jsm/lighting/TiledLighting.js +23 -0
- package/examples/jsm/lights/LightProbeGenerator.js +26 -1
- package/examples/jsm/lights/RectAreaLightTexturesLib.js +48 -13
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +15 -0
- package/examples/jsm/lines/Line2.js +36 -0
- package/examples/jsm/lines/LineGeometry.js +52 -0
- package/examples/jsm/lines/LineMaterial.js +95 -0
- package/examples/jsm/lines/LineSegments2.js +51 -2
- package/examples/jsm/lines/LineSegmentsGeometry.js +62 -8
- package/examples/jsm/lines/Wireframe.js +38 -2
- package/examples/jsm/lines/WireframeGeometry2.js +24 -0
- package/examples/jsm/lines/webgpu/Line2.js +25 -1
- package/examples/jsm/lines/webgpu/LineSegments2.js +44 -6
- package/examples/jsm/lines/webgpu/Wireframe.js +30 -2
- package/examples/jsm/loaders/3DMLoader.js +71 -2
- package/examples/jsm/loaders/3MFLoader.js +41 -3
- package/examples/jsm/loaders/AMFLoader.js +31 -12
- package/examples/jsm/loaders/BVHLoader.js +57 -11
- package/examples/jsm/loaders/ColladaLoader.js +35 -0
- package/examples/jsm/loaders/DDSLoader.js +24 -0
- package/examples/jsm/loaders/DRACOLoader.js +73 -1
- package/examples/jsm/loaders/EXRLoader.js +40 -8
- package/examples/jsm/loaders/FBXLoader.js +42 -14
- package/examples/jsm/loaders/FontLoader.js +60 -2
- package/examples/jsm/loaders/GCodeLoader.js +33 -5
- package/examples/jsm/loaders/GLTFLoader.js +218 -5
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +48 -0
- package/examples/jsm/loaders/IESLoader.js +41 -0
- package/examples/jsm/loaders/KMZLoader.js +32 -0
- package/examples/jsm/loaders/KTX2Loader.js +86 -18
- package/examples/jsm/loaders/KTXLoader.js +26 -6
- package/examples/jsm/loaders/LDrawLoader.js +115 -5
- package/examples/jsm/loaders/LUT3dlLoader.js +46 -10
- package/examples/jsm/loaders/LUTCubeLoader.js +45 -9
- package/examples/jsm/loaders/LUTImageLoader.js +78 -38
- package/examples/jsm/loaders/LWOLoader.js +46 -7
- package/examples/jsm/loaders/LottieLoader.js +37 -0
- package/examples/jsm/loaders/MD2Loader.js +36 -1
- package/examples/jsm/loaders/MDDLoader.js +56 -12
- package/examples/jsm/loaders/MTLLoader.js +38 -33
- package/examples/jsm/loaders/MaterialXLoader.js +33 -0
- package/examples/jsm/loaders/NRRDLoader.js +36 -5
- package/examples/jsm/loaders/OBJLoader.js +48 -1
- package/examples/jsm/loaders/PCDLoader.js +47 -0
- package/examples/jsm/loaders/PDBLoader.js +40 -2
- package/examples/jsm/loaders/PLYLoader.js +62 -32
- package/examples/jsm/loaders/PVRLoader.js +23 -5
- package/examples/jsm/loaders/RGBELoader.js +38 -5
- package/examples/jsm/loaders/RGBMLoader.js +67 -1
- package/examples/jsm/loaders/STLLoader.js +47 -38
- package/examples/jsm/loaders/SVGLoader.js +113 -20
- package/examples/jsm/loaders/TDSLoader.js +81 -61
- package/examples/jsm/loaders/TGALoader.js +22 -0
- package/examples/jsm/loaders/TIFFLoader.js +22 -0
- package/examples/jsm/loaders/TTFLoader.js +36 -2
- package/examples/jsm/loaders/USDZLoader.js +34 -1
- package/examples/jsm/loaders/UltraHDRLoader.js +58 -12
- package/examples/jsm/loaders/VOXLoader.js +57 -0
- package/examples/jsm/loaders/VRMLLoader.js +32 -1
- package/examples/jsm/loaders/VTKLoader.js +38 -0
- package/examples/jsm/loaders/XYZLoader.js +35 -0
- package/examples/jsm/materials/LDrawConditionalLineMaterial.js +39 -0
- package/examples/jsm/materials/LDrawConditionalLineNodeMaterial.js +39 -0
- package/examples/jsm/materials/MeshPostProcessingMaterial.js +24 -2
- package/examples/jsm/math/Capsule.js +89 -14
- package/examples/jsm/math/ColorConverter.js +21 -0
- package/examples/jsm/math/ColorSpaces.js +53 -0
- package/examples/jsm/math/ConvexHull.js +514 -92
- package/examples/jsm/math/ImprovedNoise.js +14 -2
- package/examples/jsm/math/Lut.js +111 -0
- package/examples/jsm/math/MeshSurfaceSampler.js +76 -13
- package/examples/jsm/math/OBB.js +139 -46
- package/examples/jsm/math/Octree.js +132 -5
- package/examples/jsm/math/SimplexNoise.js +66 -42
- package/examples/jsm/misc/ConvexObjectBreaker.js +43 -25
- package/examples/jsm/misc/GPUComputationRenderer.js +92 -17
- package/examples/jsm/misc/Gyroscope.js +11 -0
- package/examples/jsm/misc/MD2Character.js +115 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +170 -8
- package/examples/jsm/misc/MorphAnimMesh.js +43 -0
- package/examples/jsm/misc/MorphBlendMesh.js +102 -0
- package/examples/jsm/misc/ProgressiveLightMap.js +40 -15
- package/examples/jsm/misc/ProgressiveLightMapGPU.js +33 -13
- package/examples/jsm/misc/RollerCoaster.js +52 -0
- package/examples/jsm/misc/Timer.js +79 -2
- package/examples/jsm/misc/TubePainter.js +53 -0
- package/examples/jsm/misc/Volume.js +108 -72
- package/examples/jsm/misc/VolumeSlice.js +88 -45
- package/examples/jsm/modifiers/CurveModifier.js +57 -34
- package/examples/jsm/modifiers/CurveModifierGPU.js +36 -17
- package/examples/jsm/modifiers/EdgeSplitModifier.js +18 -0
- package/examples/jsm/modifiers/SimplifyModifier.js +20 -8
- package/examples/jsm/modifiers/TessellateModifier.js +33 -2
- package/examples/jsm/objects/GroundedSkybox.js +23 -5
- package/examples/jsm/objects/Lensflare.js +91 -2
- package/examples/jsm/objects/LensflareMesh.js +53 -2
- package/examples/jsm/objects/MarchingCubes.js +88 -5
- package/examples/jsm/objects/Reflector.js +70 -0
- package/examples/jsm/objects/ReflectorForSSRPass.js +39 -0
- package/examples/jsm/objects/Refractor.js +61 -0
- package/examples/jsm/objects/ShadowMesh.js +53 -4
- package/examples/jsm/objects/Sky.js +26 -9
- package/examples/jsm/objects/SkyMesh.js +60 -9
- package/examples/jsm/objects/Water.js +44 -5
- package/examples/jsm/objects/Water2.js +42 -3
- package/examples/jsm/objects/Water2Mesh.js +38 -3
- package/examples/jsm/objects/WaterMesh.js +94 -7
- package/examples/jsm/physics/AmmoPhysics.js +47 -0
- package/examples/jsm/physics/JoltPhysics.js +48 -0
- package/examples/jsm/physics/RapierPhysics.js +56 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +90 -38
- package/examples/jsm/postprocessing/BloomPass.js +125 -24
- package/examples/jsm/postprocessing/BokehPass.js +98 -22
- package/examples/jsm/postprocessing/ClearPass.js +53 -3
- package/examples/jsm/postprocessing/CubeTexturePass.js +81 -21
- package/examples/jsm/postprocessing/DotScreenPass.js +58 -10
- package/examples/jsm/postprocessing/EffectComposer.js +131 -0
- package/examples/jsm/postprocessing/FilmPass.js +53 -5
- package/examples/jsm/postprocessing/GTAOPass.js +191 -48
- package/examples/jsm/postprocessing/GlitchPass.js +84 -33
- package/examples/jsm/postprocessing/HalftonePass.js +64 -10
- package/examples/jsm/postprocessing/LUTPass.js +37 -8
- package/examples/jsm/postprocessing/MaskPass.js +90 -0
- package/examples/jsm/postprocessing/OutlinePass.js +266 -133
- package/examples/jsm/postprocessing/OutputPass.js +53 -14
- package/examples/jsm/postprocessing/Pass.js +98 -4
- package/examples/jsm/postprocessing/RenderPass.js +83 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +123 -45
- package/examples/jsm/postprocessing/RenderTransitionPass.js +119 -21
- package/examples/jsm/postprocessing/SAOPass.js +126 -53
- package/examples/jsm/postprocessing/SMAAPass.js +103 -71
- package/examples/jsm/postprocessing/SSAARenderPass.js +117 -35
- package/examples/jsm/postprocessing/SSAOPass.js +160 -47
- package/examples/jsm/postprocessing/SSRPass.js +230 -49
- package/examples/jsm/postprocessing/SavePass.js +68 -16
- package/examples/jsm/postprocessing/ShaderPass.js +64 -7
- package/examples/jsm/postprocessing/TAARenderPass.js +78 -24
- package/examples/jsm/postprocessing/TexturePass.js +71 -8
- package/examples/jsm/postprocessing/UnrealBloomPass.js +113 -37
- package/examples/jsm/renderers/CSS2DRenderer.js +77 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +99 -3
- package/examples/jsm/renderers/Projector.js +18 -2
- package/examples/jsm/renderers/SVGRenderer.js +124 -0
- package/examples/jsm/shaders/ACESFilmicToneMappingShader.js +9 -5
- package/examples/jsm/shaders/AfterimageShader.js +6 -4
- package/examples/jsm/shaders/BasicShader.js +6 -2
- package/examples/jsm/shaders/BleachBypassShader.js +8 -4
- package/examples/jsm/shaders/BlendShader.js +6 -2
- package/examples/jsm/shaders/BokehShader.js +7 -4
- package/examples/jsm/shaders/BokehShader2.js +7 -3
- package/examples/jsm/shaders/BrightnessContrastShader.js +8 -5
- package/examples/jsm/shaders/ColorCorrectionShader.js +6 -2
- package/examples/jsm/shaders/ColorifyShader.js +6 -2
- package/examples/jsm/shaders/ConvolutionShader.js +7 -39
- package/examples/jsm/shaders/CopyShader.js +6 -2
- package/examples/jsm/shaders/DOFMipMapShader.js +8 -4
- package/examples/jsm/shaders/DepthLimitedBlurShader.js +7 -1
- package/examples/jsm/shaders/DigitalGlitch.js +7 -7
- package/examples/jsm/shaders/DotScreenShader.js +6 -4
- package/examples/jsm/shaders/ExposureShader.js +6 -2
- package/examples/jsm/shaders/FXAAShader.js +15 -7
- package/examples/jsm/shaders/FilmShader.js +10 -0
- package/examples/jsm/shaders/FocusShader.js +6 -4
- package/examples/jsm/shaders/FreiChenShader.js +7 -3
- package/examples/jsm/shaders/GTAOShader.js +33 -39
- package/examples/jsm/shaders/GammaCorrectionShader.js +8 -2
- package/examples/jsm/shaders/GodRaysShader.js +14 -5
- package/examples/jsm/shaders/HalftoneShader.js +11 -5
- package/examples/jsm/shaders/HorizontalBlurShader.js +9 -3
- package/examples/jsm/shaders/HorizontalTiltShiftShader.js +6 -2
- package/examples/jsm/shaders/HueSaturationShader.js +7 -3
- package/examples/jsm/shaders/KaleidoShader.js +8 -4
- package/examples/jsm/shaders/LuminosityHighPassShader.js +6 -5
- package/examples/jsm/shaders/LuminosityShader.js +6 -3
- package/examples/jsm/shaders/MirrorShader.js +7 -4
- package/examples/jsm/shaders/NormalMapShader.js +5 -3
- package/examples/jsm/shaders/OutputShader.js +11 -0
- package/examples/jsm/shaders/PoissonDenoiseShader.js +21 -15
- package/examples/jsm/shaders/RGBShiftShader.js +5 -1
- package/examples/jsm/shaders/SAOShader.js +8 -2
- package/examples/jsm/shaders/SMAAShader.js +23 -1
- package/examples/jsm/shaders/SSAOShader.js +23 -5
- package/examples/jsm/shaders/SSRShader.js +25 -1
- package/examples/jsm/shaders/SepiaShader.js +6 -4
- package/examples/jsm/shaders/SobelOperatorShader.js +5 -2
- package/examples/jsm/shaders/SubsurfaceScatteringShader.js +10 -8
- package/examples/jsm/shaders/TechnicolorShader.js +7 -4
- package/examples/jsm/shaders/ToonShader.js +29 -7
- package/examples/jsm/shaders/TriangleBlurShader.js +6 -4
- package/examples/jsm/shaders/UnpackDepthRGBAShader.js +6 -3
- package/examples/jsm/shaders/VelocityShader.js +6 -2
- package/examples/jsm/shaders/VerticalBlurShader.js +6 -2
- package/examples/jsm/shaders/VerticalTiltShiftShader.js +5 -1
- package/examples/jsm/shaders/VignetteShader.js +6 -4
- package/examples/jsm/shaders/VolumeShader.js +7 -1
- package/examples/jsm/shaders/WaterRefractionShader.js +8 -0
- package/examples/jsm/textures/FlakesTexture.js +12 -0
- package/examples/jsm/transpiler/Transpiler.js +31 -0
- package/examples/jsm/tsl/display/AfterImageNode.js +1 -1
- package/examples/jsm/tsl/display/BloomNode.js +1 -1
- package/examples/jsm/tsl/display/PixelationPassNode.js +4 -4
- package/examples/jsm/tsl/display/SSRNode.js +1 -1
- package/examples/jsm/tsl/lighting/TiledLightsNode.js +29 -3
- package/examples/jsm/tsl/math/Bayer.js +14 -1
- package/examples/jsm/tsl/utils/Raymarching.js +4 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +88 -29
- package/examples/jsm/utils/CameraUtils.js +10 -7
- package/examples/jsm/utils/GeometryCompressionUtils.js +20 -30
- package/examples/jsm/utils/GeometryUtils.js +12 -13
- package/examples/jsm/utils/LDrawUtils.js +11 -4
- package/examples/jsm/utils/SceneOptimizer.js +66 -20
- package/examples/jsm/utils/SceneUtils.js +50 -3
- package/examples/jsm/utils/ShadowMapViewer.js +47 -24
- package/examples/jsm/utils/ShadowMapViewerGPU.js +47 -24
- package/examples/jsm/utils/SkeletonUtils.js +45 -0
- package/examples/jsm/utils/SortUtils.js +14 -5
- package/examples/jsm/utils/UVsDebug.js +9 -4
- package/examples/jsm/utils/WebGLTextureUtils.js +13 -0
- package/examples/jsm/utils/WebGPUTextureUtils.js +14 -0
- package/examples/jsm/utils/WorkerPool.js +65 -2
- package/examples/jsm/webxr/ARButton.js +18 -0
- package/examples/jsm/webxr/OculusHandModel.js +83 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +125 -0
- package/examples/jsm/webxr/Text2D.js +11 -0
- package/examples/jsm/webxr/VRButton.js +30 -0
- package/examples/jsm/webxr/XRButton.js +22 -0
- package/examples/jsm/webxr/XRControllerModelFactory.js +87 -3
- package/examples/jsm/webxr/XREstimatedLight.js +33 -3
- package/examples/jsm/webxr/XRHandMeshModel.js +35 -0
- package/examples/jsm/webxr/XRHandModelFactory.js +92 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +42 -0
- package/examples/jsm/webxr/XRPlanes.js +17 -0
- package/package.json +1 -1
- package/src/Three.TSL.js +3 -1
- package/src/animation/AnimationAction.js +262 -30
- package/src/animation/AnimationClip.js +141 -2
- package/src/animation/AnimationMixer.js +99 -15
- package/src/animation/AnimationObjectGroup.js +41 -18
- package/src/animation/AnimationUtils.js +168 -18
- package/src/animation/KeyframeTrack.js +144 -10
- package/src/animation/PropertyBinding.js +77 -3
- package/src/animation/PropertyMixer.js +72 -5
- package/src/animation/tracks/BooleanKeyframeTrack.js +33 -6
- package/src/animation/tracks/ColorKeyframeTrack.js +26 -5
- package/src/animation/tracks/NumberKeyframeTrack.js +26 -2
- package/src/animation/tracks/QuaternionKeyframeTrack.js +30 -1
- package/src/animation/tracks/StringKeyframeTrack.js +33 -2
- package/src/animation/tracks/VectorKeyframeTrack.js +26 -2
- package/src/audio/AudioAnalyser.js +1 -1
- package/src/audio/AudioListener.js +2 -2
- package/src/audio/PositionalAudio.js +5 -5
- package/src/constants.js +1429 -5
- package/src/core/BufferAttribute.js +413 -3
- package/src/core/BufferGeometry.js +337 -1
- package/src/core/Clock.js +60 -0
- package/src/core/GLBufferAttribute.js +99 -0
- package/src/core/InstancedBufferAttribute.js +29 -0
- package/src/core/InstancedBufferGeometry.js +20 -0
- package/src/core/InstancedInterleavedBuffer.js +26 -0
- package/src/core/InterleavedBuffer.js +137 -3
- package/src/core/InterleavedBufferAttribute.js +197 -0
- package/src/core/Layers.js +71 -10
- package/src/core/Object3D.js +23 -0
- package/src/core/Raycaster.js +134 -1
- package/src/core/RenderTarget.js +166 -7
- package/src/core/RenderTarget3D.js +25 -0
- package/src/core/RenderTargetArray.js +18 -0
- package/src/core/Uniform.js +29 -0
- package/src/core/UniformsGroup.js +84 -2
- package/src/extras/Controls.js +16 -1
- package/src/extras/Earcut.js +3 -781
- package/src/extras/ImageUtils.js +3 -2
- package/src/extras/PMREMGenerator.js +22 -17
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/core/Path.js +1 -1
- package/src/extras/lib/earcut.js +685 -0
- package/src/geometries/ConeGeometry.js +2 -2
- package/src/geometries/CylinderGeometry.js +2 -2
- package/src/geometries/ExtrudeGeometry.js +71 -39
- package/src/geometries/LatheGeometry.js +1 -1
- package/src/lights/LightShadow.js +1 -1
- package/src/lights/webgpu/IESSpotLight.js +1 -1
- package/src/loaders/AnimationLoader.js +31 -0
- package/src/loaders/AudioLoader.js +31 -0
- package/src/loaders/BufferGeometryLoader.js +34 -0
- package/src/loaders/Cache.js +45 -0
- package/src/loaders/CompressedTextureLoader.js +36 -3
- package/src/loaders/CubeTextureLoader.js +45 -0
- package/src/loaders/DataTextureLoader.js +44 -3
- package/src/loaders/FileLoader.js +57 -1
- package/src/loaders/ImageBitmapLoader.js +57 -0
- package/src/loaders/ImageLoader.js +30 -0
- package/src/loaders/Loader.js +4 -6
- package/src/loaders/LoaderUtils.js +18 -36
- package/src/loaders/LoadingManager.js +142 -0
- package/src/loaders/MaterialLoader.js +57 -0
- package/src/loaders/ObjectLoader.js +53 -0
- package/src/loaders/TextureLoader.js +33 -0
- package/src/loaders/nodes/NodeLoader.js +6 -2
- package/src/loaders/nodes/NodeMaterialLoader.js +1 -1
- package/src/loaders/nodes/NodeObjectLoader.js +3 -3
- package/src/materials/LineBasicMaterial.js +74 -1
- package/src/materials/LineDashedMaterial.js +52 -0
- package/src/materials/Material.js +18 -3
- package/src/materials/MeshBasicMaterial.js +165 -0
- package/src/materials/MeshDepthMaterial.js +93 -0
- package/src/materials/MeshDistanceMaterial.js +76 -0
- package/src/materials/MeshLambertMaterial.js +273 -0
- package/src/materials/MeshMatcapMaterial.js +142 -0
- package/src/materials/MeshNormalMaterial.js +113 -0
- package/src/materials/MeshPhongMaterial.js +288 -0
- package/src/materials/MeshPhysicalMaterial.js +292 -1
- package/src/materials/MeshStandardMaterial.js +297 -0
- package/src/materials/MeshToonMaterial.js +218 -0
- package/src/materials/PointsMaterial.js +89 -0
- package/src/materials/RawShaderMaterial.js +25 -0
- package/src/materials/ShaderMaterial.js +215 -6
- package/src/materials/ShadowMaterial.js +54 -0
- package/src/materials/SpriteMaterial.js +82 -0
- package/src/materials/nodes/Line2NodeMaterial.js +1 -1
- package/src/materials/nodes/LineBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/LineDashedNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshBasicNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshLambertNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshMatcapNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshNormalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhongNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshPhysicalNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshSSSNodeMaterial.js +1 -1
- package/src/materials/nodes/MeshStandardNodeMaterial.js +2 -2
- package/src/materials/nodes/MeshToonNodeMaterial.js +2 -2
- package/src/materials/nodes/NodeMaterial.js +7 -3
- package/src/materials/nodes/PointsNodeMaterial.js +1 -1
- package/src/materials/nodes/ShadowNodeMaterial.js +11 -2
- package/src/materials/nodes/SpriteNodeMaterial.js +1 -1
- package/src/materials/nodes/VolumeNodeMaterial.js +10 -1
- package/src/math/Color.js +1 -1
- package/src/math/MathUtils.js +223 -0
- package/src/nodes/Nodes.js +1 -0
- package/src/nodes/accessors/BatchNode.js +8 -8
- package/src/nodes/accessors/BuiltinNode.js +1 -1
- package/src/nodes/accessors/CubeTextureNode.js +1 -1
- package/src/nodes/accessors/InstanceNode.js +5 -5
- package/src/nodes/accessors/InstancedMeshNode.js +1 -1
- package/src/nodes/accessors/MorphNode.js +27 -23
- package/src/nodes/accessors/Normal.js +1 -1
- package/src/nodes/accessors/Object3DNode.js +12 -12
- package/src/nodes/accessors/ReferenceBaseNode.js +2 -2
- package/src/nodes/accessors/ReferenceNode.js +1 -1
- package/src/nodes/accessors/SkinningNode.js +46 -37
- package/src/nodes/accessors/StorageBufferNode.js +1 -1
- package/src/nodes/accessors/StorageTextureNode.js +3 -3
- package/src/nodes/accessors/Texture3DNode.js +1 -1
- package/src/nodes/accessors/TextureNode.js +25 -5
- package/src/nodes/accessors/TextureSizeNode.js +1 -1
- package/src/nodes/accessors/UniformArrayNode.js +2 -2
- package/src/nodes/code/CodeNode.js +4 -4
- package/src/nodes/code/ExpressionNode.js +4 -4
- package/src/nodes/code/FunctionCallNode.js +23 -3
- package/src/nodes/code/ScriptableNode.js +4 -4
- package/src/nodes/code/ScriptableValueNode.js +2 -2
- package/src/nodes/core/AssignNode.js +1 -1
- package/src/nodes/core/AttributeNode.js +1 -1
- package/src/nodes/core/BypassNode.js +1 -1
- package/src/nodes/core/CacheNode.js +1 -1
- package/src/nodes/core/ContextNode.js +1 -1
- package/src/nodes/core/InputNode.js +2 -2
- package/src/nodes/core/Node.js +14 -2
- package/src/nodes/core/NodeBuilder.js +86 -14
- package/src/nodes/core/StackNode.js +5 -5
- package/src/nodes/core/StructNode.js +1 -1
- package/src/nodes/core/StructTypeNode.js +2 -2
- package/src/nodes/core/VarNode.js +2 -8
- package/src/nodes/core/VaryingNode.js +3 -3
- package/src/nodes/display/BlendModes.js +4 -4
- package/src/nodes/display/BumpMapNode.js +1 -1
- package/src/nodes/display/NormalMapNode.js +1 -1
- package/src/nodes/display/PosterizeNode.js +1 -1
- package/src/nodes/display/ScreenNode.js +3 -3
- package/src/nodes/display/ViewportDepthNode.js +2 -2
- package/src/nodes/display/ViewportDepthTextureNode.js +2 -2
- package/src/nodes/display/ViewportSharedTextureNode.js +2 -2
- package/src/nodes/display/ViewportTextureNode.js +4 -4
- package/src/nodes/functions/ShadowMaskModel.js +4 -4
- package/src/nodes/functions/material/getParallaxCorrectNormal.js +6 -6
- package/src/nodes/geometry/RangeNode.js +1 -1
- package/src/nodes/gpgpu/AtomicFunctionNode.js +16 -40
- package/src/nodes/gpgpu/ComputeBuiltinNode.js +1 -1
- package/src/nodes/gpgpu/ComputeNode.js +30 -2
- package/src/nodes/lighting/AnalyticLightNode.js +9 -1
- package/src/nodes/lighting/LightsNode.js +3 -3
- package/src/nodes/lighting/ShadowNode.js +1 -1
- package/src/nodes/math/ConditionalNode.js +20 -3
- package/src/nodes/math/MathNode.js +83 -78
- package/src/nodes/math/OperatorNode.js +171 -82
- package/src/nodes/pmrem/PMREMNode.js +4 -4
- package/src/nodes/pmrem/PMREMUtils.js +2 -2
- package/src/nodes/tsl/TSLBase.js +2 -1
- package/src/nodes/tsl/TSLCore.js +115 -12
- package/src/nodes/utils/ArrayElementNode.js +3 -1
- package/src/nodes/utils/CubeMapNode.js +3 -3
- package/src/nodes/utils/DebugNode.js +70 -0
- package/src/nodes/utils/EquirectUVNode.js +2 -2
- package/src/nodes/utils/JoinNode.js +27 -2
- package/src/nodes/utils/LoopNode.js +58 -28
- package/src/nodes/utils/MaxMipLevelNode.js +1 -1
- package/src/nodes/utils/ReflectorNode.js +2 -2
- package/src/nodes/utils/RemapNode.js +6 -6
- package/src/nodes/utils/RotateNode.js +1 -1
- package/src/nodes/utils/SpriteSheetUVNode.js +3 -3
- package/src/nodes/utils/StorageArrayElementNode.js +1 -1
- package/src/nodes/utils/TriplanarTexturesNode.js +3 -3
- package/src/objects/BatchedMesh.js +4 -4
- package/src/objects/InstancedMesh.js +2 -2
- package/src/objects/LOD.js +1 -1
- package/src/objects/Skeleton.js +1 -1
- package/src/renderers/WebGL3DRenderTarget.js +25 -0
- package/src/renderers/WebGLArrayRenderTarget.js +25 -0
- package/src/renderers/WebGLCubeRenderTarget.js +39 -1
- package/src/renderers/WebGLRenderTarget.js +19 -0
- package/src/renderers/WebGLRenderer.js +617 -79
- package/src/renderers/common/Animation.js +2 -2
- package/src/renderers/common/Attributes.js +2 -2
- package/src/renderers/common/Backend.js +12 -3
- package/src/renderers/common/Background.js +1 -0
- package/src/renderers/common/Color4.js +1 -1
- package/src/renderers/common/CubeRenderTarget.js +13 -0
- package/src/renderers/common/PostProcessing.js +2 -0
- package/src/renderers/common/QuadMesh.js +2 -0
- package/src/renderers/common/RenderList.js +2 -2
- package/src/renderers/common/RenderObject.js +1 -1
- package/src/renderers/common/RenderObjects.js +2 -2
- package/src/renderers/common/Renderer.js +52 -31
- package/src/renderers/common/XRManager.js +333 -10
- package/src/renderers/common/extras/PMREMGenerator.js +6 -0
- package/src/renderers/common/nodes/NodeBuilderState.js +3 -3
- package/src/renderers/shaders/UniformsLib.js +1 -4
- package/src/renderers/shaders/UniformsUtils.js +1 -3
- package/src/renderers/webgl/WebGLBackground.js +4 -2
- package/src/renderers/webgl/WebGLState.js +9 -9
- package/src/renderers/webgl-fallback/WebGLBackend.js +25 -26
- package/src/renderers/webgl-fallback/nodes/GLSLNodeBuilder.js +3 -12
- package/src/renderers/webgl-fallback/utils/WebGLTextureUtils.js +67 -19
- package/src/renderers/webgl-fallback/utils/WebGLUtils.js +1 -1
- package/src/renderers/webgpu/WebGPUBackend.js +128 -87
- package/src/renderers/webgpu/WebGPURenderer.Nodes.js +1 -11
- package/src/renderers/webgpu/WebGPURenderer.js +17 -11
- package/src/renderers/webgpu/nodes/WGSLNodeBuilder.js +4 -4
- package/src/renderers/webgpu/utils/WebGPUAttributeUtils.js +5 -3
- package/src/renderers/webgpu/utils/WebGPUConstants.js +1 -1
- package/src/renderers/webgpu/utils/WebGPUTextureUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +87 -2
- package/src/renderers/webxr/WebXRDepthSensing.js +49 -0
- package/src/renderers/webxr/WebXRManager.js +173 -1
- package/src/scenes/Scene.js +2 -1
- package/src/textures/CanvasTexture.js +28 -0
- package/src/textures/CompressedArrayTexture.js +57 -0
- package/src/textures/CompressedCubeTexture.js +29 -0
- package/src/textures/CompressedTexture.js +64 -6
- package/src/textures/CubeTexture.js +52 -4
- package/src/textures/Data3DTexture.js +77 -0
- package/src/textures/DataArrayTexture.js +93 -0
- package/src/textures/DataTexture.js +65 -0
- package/src/textures/DepthTexture.js +59 -9
- package/src/textures/FramebufferTexture.js +62 -0
- package/src/textures/Source.js +69 -0
- package/src/textures/Texture.js +5 -5
- package/src/textures/VideoFrameTexture.js +43 -6
- package/src/textures/VideoTexture.js +49 -4
- package/examples/jsm/geometries/ParametricGeometries.js +0 -254
|
@@ -7,17 +7,53 @@ import {
|
|
|
7
7
|
DataUtils
|
|
8
8
|
} from 'three';
|
|
9
9
|
|
|
10
|
+
/**
|
|
11
|
+
* A loader for the RGBM HDR texture format.
|
|
12
|
+
*
|
|
13
|
+
* ```js
|
|
14
|
+
* const loader = new RGBMLoader();
|
|
15
|
+
* loader.setMaxRange( 16 );
|
|
16
|
+
*
|
|
17
|
+
* const texture = await loader.loadAsync( 'textures/memorial.png' );
|
|
18
|
+
* ```
|
|
19
|
+
*
|
|
20
|
+
* @augments DataTextureLoader
|
|
21
|
+
*/
|
|
10
22
|
class RGBMLoader extends DataTextureLoader {
|
|
11
23
|
|
|
24
|
+
/**
|
|
25
|
+
* Constructs a new RGBM loader.
|
|
26
|
+
*
|
|
27
|
+
* @param {LoadingManager} [manager] - The loading manager.
|
|
28
|
+
*/
|
|
12
29
|
constructor( manager ) {
|
|
13
30
|
|
|
14
31
|
super( manager );
|
|
15
32
|
|
|
33
|
+
/**
|
|
34
|
+
* The texture type.
|
|
35
|
+
*
|
|
36
|
+
* @type {(HalfFloatType|FloatType)}
|
|
37
|
+
* @default HalfFloatType
|
|
38
|
+
*/
|
|
16
39
|
this.type = HalfFloatType;
|
|
17
|
-
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* More information about this property at [The difference between RGBM and RGBD]{@link https://iwasbeingirony.blogspot.com/2010/06/difference-between-rgbm-and-rgbd.html}
|
|
43
|
+
*
|
|
44
|
+
* @type {(7|16)}
|
|
45
|
+
* @default 7
|
|
46
|
+
*/
|
|
47
|
+
this.maxRange = 7;
|
|
18
48
|
|
|
19
49
|
}
|
|
20
50
|
|
|
51
|
+
/**
|
|
52
|
+
* Sets the texture type.
|
|
53
|
+
*
|
|
54
|
+
* @param {(HalfFloatType|FloatType)} value - The texture type to set.
|
|
55
|
+
* @return {RGBMLoader} A reference to this loader.
|
|
56
|
+
*/
|
|
21
57
|
setDataType( value ) {
|
|
22
58
|
|
|
23
59
|
this.type = value;
|
|
@@ -25,6 +61,12 @@ class RGBMLoader extends DataTextureLoader {
|
|
|
25
61
|
|
|
26
62
|
}
|
|
27
63
|
|
|
64
|
+
/**
|
|
65
|
+
* Sets the maximum range.
|
|
66
|
+
*
|
|
67
|
+
* @param {(7|16)} value - The maximum range to set.
|
|
68
|
+
* @return {RGBMLoader} A reference to this loader.
|
|
69
|
+
*/
|
|
28
70
|
setMaxRange( value ) {
|
|
29
71
|
|
|
30
72
|
this.maxRange = value;
|
|
@@ -32,6 +74,16 @@ class RGBMLoader extends DataTextureLoader {
|
|
|
32
74
|
|
|
33
75
|
}
|
|
34
76
|
|
|
77
|
+
/**
|
|
78
|
+
* Starts loading from the given URLs and passes the loaded RGBM cube map
|
|
79
|
+
* to the `onLoad()` callback.
|
|
80
|
+
*
|
|
81
|
+
* @param {Array<string>} urls - The paths/URLs of the files to be loaded. This can also be a data URIs.
|
|
82
|
+
* @param {function(CubeTexture)} onLoad - Executed when the loading process has been finished.
|
|
83
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
84
|
+
* @param {onErrorCallback} onError - Executed when errors occur.
|
|
85
|
+
* @return {CubeTexture} The cube texture.
|
|
86
|
+
*/
|
|
35
87
|
loadCubemap( urls, onLoad, onProgress, onError ) {
|
|
36
88
|
|
|
37
89
|
const texture = new CubeTexture();
|
|
@@ -81,6 +133,14 @@ class RGBMLoader extends DataTextureLoader {
|
|
|
81
133
|
|
|
82
134
|
}
|
|
83
135
|
|
|
136
|
+
/**
|
|
137
|
+
* Async version of {@link RGBMLoader#loadCubemap}.
|
|
138
|
+
*
|
|
139
|
+
* @async
|
|
140
|
+
* @param {Array<string>} urls - The paths/URLs of the files to be loaded. This can also be a data URIs.
|
|
141
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
142
|
+
* @return {Promise<CubeTexture>} A Promise that resolves with the loaded cube map.
|
|
143
|
+
*/
|
|
84
144
|
loadCubemapAsync( urls, onProgress ) {
|
|
85
145
|
|
|
86
146
|
return new Promise( ( resolve, reject ) => {
|
|
@@ -91,6 +151,12 @@ class RGBMLoader extends DataTextureLoader {
|
|
|
91
151
|
|
|
92
152
|
}
|
|
93
153
|
|
|
154
|
+
/**
|
|
155
|
+
* Parses the given RGBM texture data.
|
|
156
|
+
*
|
|
157
|
+
* @param {ArrayBuffer} buffer - The raw texture data.
|
|
158
|
+
* @return {DataTextureLoader~TexData} An object representing the parsed texture data.
|
|
159
|
+
*/
|
|
94
160
|
parse( buffer ) {
|
|
95
161
|
|
|
96
162
|
const img = UPNG.decode( buffer );
|
|
@@ -10,65 +10,68 @@ import {
|
|
|
10
10
|
} from 'three';
|
|
11
11
|
|
|
12
12
|
/**
|
|
13
|
-
*
|
|
13
|
+
* A loader for the STL format, as created by Solidworks and other CAD programs.
|
|
14
14
|
*
|
|
15
|
-
* Supports both binary and ASCII encoded files
|
|
16
|
-
*
|
|
17
|
-
* The loader returns a non-indexed buffer geometry.
|
|
15
|
+
* Supports both binary and ASCII encoded files. The loader returns a non-indexed buffer geometry.
|
|
18
16
|
*
|
|
19
17
|
* Limitations:
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
*
|
|
24
|
-
* Usage:
|
|
25
|
-
* const loader = new STLLoader();
|
|
26
|
-
* loader.load( './models/stl/slotted_disk.stl', function ( geometry ) {
|
|
27
|
-
* scene.add( new THREE.Mesh( geometry ) );
|
|
28
|
-
* });
|
|
18
|
+
* - Binary decoding supports "Magics" color format (http://en.wikipedia.org/wiki/STL_(file_format)#Color_in_binary_STL).
|
|
19
|
+
* - There is perhaps some question as to how valid it is to always assume little-endian-ness.
|
|
20
|
+
* - ASCII decoding assumes file is UTF-8.
|
|
29
21
|
*
|
|
22
|
+
* ```js
|
|
23
|
+
* const loader = new STLLoader();
|
|
24
|
+
* const geometry = await loader.loadAsync( './models/stl/slotted_disk.stl' )
|
|
25
|
+
* scene.add( new THREE.Mesh( geometry ) );
|
|
26
|
+
* ```
|
|
30
27
|
* For binary STLs geometry might contain colors for vertices. To use it:
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
*
|
|
36
|
-
*
|
|
28
|
+
* ```js
|
|
29
|
+
* // use the same code to load STL as above
|
|
30
|
+
* if ( geometry.hasColors ) {
|
|
31
|
+
* material = new THREE.MeshPhongMaterial( { opacity: geometry.alpha, vertexColors: true } );
|
|
32
|
+
* }
|
|
33
|
+
* const mesh = new THREE.Mesh( geometry, material );
|
|
34
|
+
* ```
|
|
37
35
|
* For ASCII STLs containing multiple solids, each solid is assigned to a different group.
|
|
38
36
|
* Groups can be used to assign a different color by defining an array of materials with the same length of
|
|
39
37
|
* geometry.groups and passing it to the Mesh constructor:
|
|
40
38
|
*
|
|
41
|
-
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
39
|
+
* ```js
|
|
40
|
+
* const materials = [];
|
|
41
|
+
* const nGeometryGroups = geometry.groups.length;
|
|
44
42
|
*
|
|
45
|
-
*
|
|
46
|
-
*
|
|
43
|
+
* for ( let i = 0; i < nGeometryGroups; i ++ ) {
|
|
44
|
+
* const material = new THREE.MeshPhongMaterial( { color: colorMap[ i ], wireframe: false } );
|
|
45
|
+
* materials.push( material );
|
|
46
|
+
* }
|
|
47
47
|
*
|
|
48
|
-
*
|
|
48
|
+
* const mesh = new THREE.Mesh(geometry, materials);
|
|
49
|
+
* ```
|
|
49
50
|
*
|
|
50
|
-
*
|
|
51
|
-
*
|
|
52
|
-
* const material = new THREE.MeshPhongMaterial({
|
|
53
|
-
* color: colorMap[i],
|
|
54
|
-
* wireframe: false
|
|
55
|
-
* });
|
|
56
|
-
*
|
|
57
|
-
* }
|
|
58
|
-
*
|
|
59
|
-
* materials.push(material);
|
|
60
|
-
* const mesh = new THREE.Mesh(geometry, materials);
|
|
51
|
+
* @augments Loader
|
|
61
52
|
*/
|
|
62
|
-
|
|
63
|
-
|
|
64
53
|
class STLLoader extends Loader {
|
|
65
54
|
|
|
55
|
+
/**
|
|
56
|
+
* Constructs a new STL loader.
|
|
57
|
+
*
|
|
58
|
+
* @param {LoadingManager} [manager] - The loading manager.
|
|
59
|
+
*/
|
|
66
60
|
constructor( manager ) {
|
|
67
61
|
|
|
68
62
|
super( manager );
|
|
69
63
|
|
|
70
64
|
}
|
|
71
65
|
|
|
66
|
+
/**
|
|
67
|
+
* Starts loading from the given URL and passes the loaded STL asset
|
|
68
|
+
* to the `onLoad()` callback.
|
|
69
|
+
*
|
|
70
|
+
* @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
|
|
71
|
+
* @param {function(BufferGeometry)} onLoad - Executed when the loading process has been finished.
|
|
72
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
73
|
+
* @param {onErrorCallback} onError - Executed when errors occur.
|
|
74
|
+
*/
|
|
72
75
|
load( url, onLoad, onProgress, onError ) {
|
|
73
76
|
|
|
74
77
|
const scope = this;
|
|
@@ -105,6 +108,12 @@ class STLLoader extends Loader {
|
|
|
105
108
|
|
|
106
109
|
}
|
|
107
110
|
|
|
111
|
+
/**
|
|
112
|
+
* Parses the given STL data and returns the resulting geometry.
|
|
113
|
+
*
|
|
114
|
+
* @param {ArrayBuffer} data - The raw STL data as an array buffer.
|
|
115
|
+
* @return {BufferGeometry} The parsed geometry.
|
|
116
|
+
*/
|
|
108
117
|
parse( data ) {
|
|
109
118
|
|
|
110
119
|
function isBinary( data ) {
|
|
@@ -16,20 +16,84 @@ import {
|
|
|
16
16
|
|
|
17
17
|
const COLOR_SPACE_SVG = SRGBColorSpace;
|
|
18
18
|
|
|
19
|
+
/**
|
|
20
|
+
* A loader for the SVG format.
|
|
21
|
+
*
|
|
22
|
+
* Scalable Vector Graphics is an XML-based vector image format for two-dimensional graphics
|
|
23
|
+
* with support for interactivity and animation.
|
|
24
|
+
*
|
|
25
|
+
* ```js
|
|
26
|
+
* const loader = new SVGLoader();
|
|
27
|
+
* const data = await loader.loadAsync( 'data/svgSample.svg' );
|
|
28
|
+
*
|
|
29
|
+
* const paths = data.paths;
|
|
30
|
+
* const group = new THREE.Group();
|
|
31
|
+
*
|
|
32
|
+
* for ( let i = 0; i < paths.length; i ++ ) {
|
|
33
|
+
*
|
|
34
|
+
* const path = paths[ i ];
|
|
35
|
+
* const material = new THREE.MeshBasicMaterial( {
|
|
36
|
+
* color: path.color,
|
|
37
|
+
* side: THREE.DoubleSide,
|
|
38
|
+
* depthWrite: false
|
|
39
|
+
* } );
|
|
40
|
+
*
|
|
41
|
+
* const shapes = SVGLoader.createShapes( path );
|
|
42
|
+
*
|
|
43
|
+
* for ( let j = 0; j < shapes.length; j ++ ) {
|
|
44
|
+
*
|
|
45
|
+
* const shape = shapes[ j ];
|
|
46
|
+
* const geometry = new THREE.ShapeGeometry( shape );
|
|
47
|
+
* const mesh = new THREE.Mesh( geometry, material );
|
|
48
|
+
* group.add( mesh );
|
|
49
|
+
*
|
|
50
|
+
* }
|
|
51
|
+
*
|
|
52
|
+
* }
|
|
53
|
+
*
|
|
54
|
+
* scene.add( group );
|
|
55
|
+
* ```
|
|
56
|
+
*
|
|
57
|
+
* @augments Loader
|
|
58
|
+
*/
|
|
19
59
|
class SVGLoader extends Loader {
|
|
20
60
|
|
|
61
|
+
/**
|
|
62
|
+
* Constructs a new SVG loader.
|
|
63
|
+
*
|
|
64
|
+
* @param {LoadingManager} [manager] - The loading manager.
|
|
65
|
+
*/
|
|
21
66
|
constructor( manager ) {
|
|
22
67
|
|
|
23
68
|
super( manager );
|
|
24
69
|
|
|
25
|
-
|
|
70
|
+
/**
|
|
71
|
+
* Default dots per inch.
|
|
72
|
+
*
|
|
73
|
+
* @type {number}
|
|
74
|
+
* @default 90
|
|
75
|
+
*/
|
|
26
76
|
this.defaultDPI = 90;
|
|
27
77
|
|
|
28
|
-
|
|
78
|
+
/**
|
|
79
|
+
* Default unit.
|
|
80
|
+
*
|
|
81
|
+
* @type {('mm'|'cm'|'in'|'pt'|'pc'|'px')}
|
|
82
|
+
* @default 'px'
|
|
83
|
+
*/
|
|
29
84
|
this.defaultUnit = 'px';
|
|
30
85
|
|
|
31
86
|
}
|
|
32
87
|
|
|
88
|
+
/**
|
|
89
|
+
* Starts loading from the given URL and passes the loaded SVG asset
|
|
90
|
+
* to the `onLoad()` callback.
|
|
91
|
+
*
|
|
92
|
+
* @param {string} url - The path/URL of the file to be loaded. This can also be a data URI.
|
|
93
|
+
* @param {function({paths:Array<ShapePath>,xml:string})} onLoad - Executed when the loading process has been finished.
|
|
94
|
+
* @param {onProgressCallback} onProgress - Executed while the loading is in progress.
|
|
95
|
+
* @param {onErrorCallback} onError - Executed when errors occur.
|
|
96
|
+
*/
|
|
33
97
|
load( url, onLoad, onProgress, onError ) {
|
|
34
98
|
|
|
35
99
|
const scope = this;
|
|
@@ -64,6 +128,13 @@ class SVGLoader extends Loader {
|
|
|
64
128
|
|
|
65
129
|
}
|
|
66
130
|
|
|
131
|
+
/**
|
|
132
|
+
* Parses the given SVG data and returns the resulting data.
|
|
133
|
+
*
|
|
134
|
+
* @param {string} text - The raw SVG data as a string.
|
|
135
|
+
* @return {{paths:Array<ShapePath>,xml:string}} An object holding an array of shape paths and the
|
|
136
|
+
* SVG XML document.
|
|
137
|
+
*/
|
|
67
138
|
parse( text ) {
|
|
68
139
|
|
|
69
140
|
const scope = this;
|
|
@@ -775,6 +846,7 @@ class SVGLoader extends Loader {
|
|
|
775
846
|
* According to https://www.w3.org/TR/SVG/shapes.html#RectElementRXAttribute
|
|
776
847
|
* rounded corner should be rendered to elliptical arc, but bezier curve does the job well enough
|
|
777
848
|
*/
|
|
849
|
+
|
|
778
850
|
function parseRectNode( node ) {
|
|
779
851
|
|
|
780
852
|
const x = parseFloatWithUnits( node.getAttribute( 'x' ) || 0 );
|
|
@@ -1916,11 +1988,14 @@ class SVGLoader extends Loader {
|
|
|
1916
1988
|
|
|
1917
1989
|
}
|
|
1918
1990
|
|
|
1991
|
+
/**
|
|
1992
|
+
* Creates from the given shape path and array of shapes.
|
|
1993
|
+
*
|
|
1994
|
+
* @param {ShapePath} shapePath - The shape path.
|
|
1995
|
+
* @return {Array<Shape>} An array of shapes.
|
|
1996
|
+
*/
|
|
1919
1997
|
static createShapes( shapePath ) {
|
|
1920
1998
|
|
|
1921
|
-
// Param shapePath: a shapepath as returned by the parse function of this class
|
|
1922
|
-
// Returns Shape object
|
|
1923
|
-
|
|
1924
1999
|
const BIGNUMBER = 999999999;
|
|
1925
2000
|
|
|
1926
2001
|
const IntersectionLocationType = {
|
|
@@ -2360,15 +2435,18 @@ class SVGLoader extends Loader {
|
|
|
2360
2435
|
|
|
2361
2436
|
}
|
|
2362
2437
|
|
|
2438
|
+
/**
|
|
2439
|
+
* Returns a stroke style object from the given parameters.
|
|
2440
|
+
*
|
|
2441
|
+
* @param {number} [width=1] - The stroke width.
|
|
2442
|
+
* @param {string} [color='#000'] - The stroke color, as returned by {@link Color#getStyle}.
|
|
2443
|
+
* @param {'round'|'bevel'|'miter'|'miter-limit'} [lineJoin='miter'] - The line join style.
|
|
2444
|
+
* @param {'round'|'square'|'butt'} [lineCap='butt'] - The line cap style.
|
|
2445
|
+
* @param {number} [miterLimit=4] - Maximum join length, in multiples of the `width` parameter (join is truncated if it exceeds that distance).
|
|
2446
|
+
* @return {Object} The style object.
|
|
2447
|
+
*/
|
|
2363
2448
|
static getStrokeStyle( width, color, lineJoin, lineCap, miterLimit ) {
|
|
2364
2449
|
|
|
2365
|
-
// Param width: Stroke width
|
|
2366
|
-
// Param color: As returned by THREE.Color.getStyle()
|
|
2367
|
-
// Param lineJoin: One of "round", "bevel", "miter" or "miter-limit"
|
|
2368
|
-
// Param lineCap: One of "round", "square" or "butt"
|
|
2369
|
-
// Param miterLimit: Maximum join length, in multiples of the "width" parameter (join is truncated if it exceeds that distance)
|
|
2370
|
-
// Returns style object
|
|
2371
|
-
|
|
2372
2450
|
width = width !== undefined ? width : 1;
|
|
2373
2451
|
color = color !== undefined ? color : '#000';
|
|
2374
2452
|
lineJoin = lineJoin !== undefined ? lineJoin : 'miter';
|
|
@@ -2385,16 +2463,18 @@ class SVGLoader extends Loader {
|
|
|
2385
2463
|
|
|
2386
2464
|
}
|
|
2387
2465
|
|
|
2466
|
+
/**
|
|
2467
|
+
* Creates a stroke from an array of points.
|
|
2468
|
+
*
|
|
2469
|
+
* @param {Array<Vector2>} points - The points in 2D space. Minimum 2 points. The path can be open or closed (last point equals to first point).
|
|
2470
|
+
* @param {Object} style - Object with SVG properties as returned by `SVGLoader.getStrokeStyle()`, or `SVGLoader.parse()` in the `path.userData.style` object.
|
|
2471
|
+
* @param {number} [arcDivisions=12] - Arc divisions for round joins and endcaps.
|
|
2472
|
+
* @param {number} [minDistance=0.001] - Points closer to this distance will be merged.
|
|
2473
|
+
* @return {?BufferGeometry} The stroke geometry. UV coordinates are generated ('u' along path. 'v' across it, from left to right).
|
|
2474
|
+
* Returns `null` if not geometry was generated.
|
|
2475
|
+
*/
|
|
2388
2476
|
static pointsToStroke( points, style, arcDivisions, minDistance ) {
|
|
2389
2477
|
|
|
2390
|
-
// Generates a stroke with some width around the given path.
|
|
2391
|
-
// The path can be open or closed (last point equals to first point)
|
|
2392
|
-
// Param points: Array of Vector2D (the path). Minimum 2 points.
|
|
2393
|
-
// Param style: Object with SVG properties as returned by SVGLoader.getStrokeStyle(), or SVGLoader.parse() in the path.userData.style object
|
|
2394
|
-
// Params arcDivisions: Arc divisions for round joins and endcaps. (Optional)
|
|
2395
|
-
// Param minDistance: Points closer to this distance will be merged. (Optional)
|
|
2396
|
-
// Returns BufferGeometry with stroke triangles (In plane z = 0). UV coordinates are generated ('u' along path. 'v' across it, from left to right)
|
|
2397
|
-
|
|
2398
2478
|
const vertices = [];
|
|
2399
2479
|
const normals = [];
|
|
2400
2480
|
const uvs = [];
|
|
@@ -2414,6 +2494,19 @@ class SVGLoader extends Loader {
|
|
|
2414
2494
|
|
|
2415
2495
|
}
|
|
2416
2496
|
|
|
2497
|
+
/**
|
|
2498
|
+
* Creates a stroke from an array of points.
|
|
2499
|
+
*
|
|
2500
|
+
* @param {Array<Vector2>} points - The points in 2D space. Minimum 2 points.
|
|
2501
|
+
* @param {Object} style - Object with SVG properties as returned by `SVGLoader.getStrokeStyle()`, or `SVGLoader.parse()` in the `path.userData.style` object.
|
|
2502
|
+
* @param {number} [arcDivisions=12] - Arc divisions for round joins and endcaps.
|
|
2503
|
+
* @param {number} [minDistance=0.001] - Points closer to this distance will be merged.
|
|
2504
|
+
* @param {Array<number>} vertices - An array holding vertices.
|
|
2505
|
+
* @param {Array<number>} normals - An array holding normals.
|
|
2506
|
+
* @param {Array<number>} uvs - An array holding uvs.
|
|
2507
|
+
* @param {number} [vertexOffset=0] - The vertex offset.
|
|
2508
|
+
* @return {number} The number of vertices.
|
|
2509
|
+
*/
|
|
2417
2510
|
static pointsToStrokeWithBuffers( points, style, arcDivisions, minDistance, vertices, normals, uvs, vertexOffset ) {
|
|
2418
2511
|
|
|
2419
2512
|
// This function can be called to update existing arrays or buffers.
|