super-three 0.141.0 → 0.147.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -9
- package/build/three.cjs +2441 -1569
- package/build/three.js +2441 -1569
- package/build/three.min.js +1 -1
- package/build/three.module.js +2847 -1576
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +50 -67
- package/examples/js/animation/MMDAnimationHelper.js +66 -137
- package/examples/js/animation/MMDPhysics.js +71 -150
- package/examples/js/cameras/CinematicCamera.js +33 -22
- package/examples/js/controls/ArcballControls.js +149 -403
- package/examples/js/controls/DragControls.js +8 -33
- package/examples/js/controls/FirstPersonControls.js +32 -61
- package/examples/js/controls/FlyControls.js +29 -63
- package/examples/js/controls/OrbitControls.js +125 -103
- package/examples/js/controls/PointerLockControls.js +5 -22
- package/examples/js/controls/TrackballControls.js +33 -88
- package/examples/js/controls/TransformControls.js +101 -182
- package/examples/js/csm/CSM.js +4 -39
- package/examples/js/csm/CSMFrustum.js +3 -9
- package/examples/js/csm/CSMHelper.js +24 -4
- package/examples/js/csm/CSMShader.js +2 -6
- package/examples/js/curves/CurveExtras.js +27 -27
- package/examples/js/curves/NURBSCurve.js +4 -16
- package/examples/js/curves/NURBSSurface.js +3 -9
- package/examples/js/curves/NURBSUtils.js +8 -45
- package/examples/js/effects/AnaglyphEffect.js +6 -20
- package/examples/js/effects/AsciiEffect.js +32 -31
- package/examples/js/effects/OutlineEffect.js +30 -54
- package/examples/js/effects/ParallaxBarrierEffect.js +2 -15
- package/examples/js/effects/PeppersGhostEffect.js +14 -41
- package/examples/js/effects/StereoEffect.js +2 -6
- package/examples/js/environments/RoomEnvironment.js +32 -8
- package/examples/js/exporters/ColladaExporter.js +52 -78
- package/examples/js/exporters/DRACOExporter.js +22 -34
- package/examples/js/exporters/EXRExporter.js +15 -18
- package/examples/js/exporters/GLTFExporter.js +168 -345
- package/examples/js/exporters/MMDExporter.js +5 -12
- package/examples/js/exporters/OBJExporter.js +40 -52
- package/examples/js/exporters/PLYExporter.js +50 -57
- package/examples/js/exporters/STLExporter.js +5 -14
- package/examples/js/exporters/USDZExporter.js +119 -27
- package/examples/js/geometries/BoxLineGeometry.js +0 -1
- package/examples/js/geometries/ConvexGeometry.js +12 -7
- package/examples/js/geometries/DecalGeometry.js +53 -20
- package/examples/js/geometries/LightningStrike.js +54 -67
- package/examples/js/geometries/ParametricGeometries.js +8 -7
- package/examples/js/geometries/ParametricGeometry.js +23 -17
- package/examples/js/geometries/RoundedBoxGeometry.js +21 -19
- package/examples/js/geometries/TeapotGeometry.js +54 -50
- package/examples/js/geometries/TextGeometry.js +6 -4
- package/examples/js/helpers/LightProbeHelper.js +1 -2
- package/examples/js/helpers/OctreeHelper.js +22 -20
- package/examples/js/helpers/PositionalAudioHelper.js +8 -6
- package/examples/js/helpers/RectAreaLightHelper.js +6 -7
- package/examples/js/helpers/VertexNormalsHelper.js +15 -13
- package/examples/js/helpers/VertexTangentsHelper.js +15 -9
- package/examples/js/helpers/ViewHelper.js +31 -16
- package/examples/js/interactive/HTMLMesh.js +25 -39
- package/examples/js/interactive/InteractiveGroup.js +9 -14
- package/examples/js/interactive/SelectionBox.js +3 -70
- package/examples/js/interactive/SelectionHelper.js +2 -8
- package/examples/js/libs/ktx-parse.umd.js +1 -0
- package/examples/js/libs/meshopt_decoder.js +98 -32
- package/examples/js/lights/LightProbeGenerator.js +32 -39
- package/examples/js/lights/RectAreaLightUniformsLib.js +5 -1
- package/examples/js/lines/LineGeometry.js +3 -5
- package/examples/js/lines/LineMaterial.js +4 -11
- package/examples/js/lines/LineSegments2.js +40 -89
- package/examples/js/lines/LineSegmentsGeometry.js +7 -28
- package/examples/js/lines/Wireframe.js +2 -7
- package/examples/js/lines/WireframeGeometry2.js +3 -1
- package/examples/js/loaders/3DMLoader.js +58 -155
- package/examples/js/loaders/3MFLoader.js +72 -106
- package/examples/js/loaders/AMFLoader.js +0 -25
- package/examples/js/loaders/BVHLoader.js +44 -43
- package/examples/js/loaders/BasisTextureLoader.js +16 -46
- package/examples/js/loaders/ColladaLoader.js +229 -359
- package/examples/js/loaders/DDSLoader.js +24 -25
- package/examples/js/loaders/DRACOLoader.js +30 -90
- package/examples/js/loaders/EXRLoader.js +69 -177
- package/examples/js/loaders/FBXLoader.js +294 -441
- package/examples/js/loaders/FontLoader.js +9 -31
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +458 -739
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -17
- package/examples/js/loaders/KMZLoader.js +3 -7
- package/examples/js/loaders/KTXLoader.js +12 -30
- package/examples/js/loaders/LDrawLoader.js +309 -355
- package/examples/js/loaders/LUT3dlLoader.js +7 -11
- package/examples/js/loaders/LUTCubeLoader.js +0 -8
- package/examples/js/loaders/LWOLoader.js +59 -124
- package/examples/js/loaders/LogLuvLoader.js +27 -77
- package/examples/js/loaders/LottieLoader.js +4 -4
- package/examples/js/loaders/MD2Loader.js +26 -27
- package/examples/js/loaders/MDDLoader.js +6 -10
- package/examples/js/loaders/MMDLoader.js +180 -189
- package/examples/js/loaders/MTLLoader.js +18 -47
- package/examples/js/loaders/NRRDLoader.js +44 -84
- package/examples/js/loaders/OBJLoader.js +56 -77
- package/examples/js/loaders/PCDLoader.js +92 -42
- package/examples/js/loaders/PDBLoader.js +17 -13
- package/examples/js/loaders/PLYLoader.js +65 -51
- package/examples/js/loaders/PRWMLoader.js +11 -22
- package/examples/js/loaders/PVRLoader.js +7 -16
- package/examples/js/loaders/RGBELoader.js +36 -61
- package/examples/js/loaders/RGBMLoader.js +26 -87
- package/examples/js/loaders/STLLoader.js +20 -27
- package/examples/js/loaders/SVGLoader.js +365 -236
- package/examples/js/loaders/TDSLoader.js +81 -118
- package/examples/js/loaders/TGALoader.js +39 -41
- package/examples/js/loaders/TIFFLoader.js +30 -0
- package/examples/js/loaders/TTFLoader.js +0 -8
- package/examples/js/loaders/TiltLoader.js +14 -15
- package/examples/js/loaders/VOXLoader.js +8 -16
- package/examples/js/loaders/VRMLLoader.js +266 -354
- package/examples/js/loaders/VTKLoader.js +102 -119
- package/examples/js/loaders/XYZLoader.js +2 -4
- package/examples/js/loaders/lwo/IFFParser.js +55 -136
- package/examples/js/loaders/lwo/LWO2Parser.js +39 -89
- package/examples/js/loaders/lwo/LWO3Parser.js +38 -79
- package/examples/js/materials/MeshGouraudMaterial.js +387 -0
- package/examples/js/math/Capsule.js +0 -17
- package/examples/js/math/ColorConverter.js +3 -53
- package/examples/js/math/ConvexHull.js +185 -141
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/math/Lut.js +8 -15
- package/examples/js/math/MeshSurfaceSampler.js +6 -28
- package/examples/js/math/OBB.js +90 -49
- package/examples/js/math/Octree.js +2 -57
- package/examples/js/math/SimplexNoise.js +74 -88
- package/examples/js/misc/ConvexObjectBreaker.js +37 -48
- package/examples/js/misc/GPUComputationRenderer.js +47 -14
- package/examples/js/misc/Gyroscope.js +5 -9
- package/examples/js/misc/MD2Character.js +14 -23
- package/examples/js/misc/MD2CharacterComplex.js +73 -54
- package/examples/js/misc/MorphAnimMesh.js +0 -6
- package/examples/js/misc/MorphBlendMesh.js +3 -30
- package/examples/js/misc/ProgressiveLightMap.js +47 -43
- package/examples/js/misc/RollerCoaster.js +17 -24
- package/examples/js/misc/TubePainter.js +18 -12
- package/examples/js/misc/Volume.js +173 -194
- package/examples/js/misc/VolumeSlice.js +91 -99
- package/examples/js/modifiers/CurveModifier.js +19 -21
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
- package/examples/js/modifiers/SimplifyModifier.js +57 -60
- package/examples/js/modifiers/TessellateModifier.js +2 -9
- package/examples/js/objects/GroundProjectedEnv.js +181 -0
- package/examples/js/objects/Lensflare.js +47 -38
- package/examples/js/objects/LightningStorm.js +10 -13
- package/examples/js/objects/MarchingCubes.js +80 -59
- package/examples/js/objects/Reflector.js +31 -22
- package/examples/js/objects/ReflectorForSSRPass.js +20 -25
- package/examples/js/objects/Refractor.js +61 -33
- package/examples/js/objects/ShadowMesh.js +6 -3
- package/examples/js/objects/Sky.js +2 -7
- package/examples/js/objects/Water.js +23 -18
- package/examples/js/objects/Water2.js +20 -19
- package/examples/js/physics/AmmoPhysics.js +23 -20
- package/examples/js/physics/OimoPhysics.js +19 -17
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +13 -20
- package/examples/js/postprocessing/AfterimagePass.js +19 -12
- package/examples/js/postprocessing/BloomPass.js +38 -17
- package/examples/js/postprocessing/BokehPass.js +29 -12
- package/examples/js/postprocessing/ClearPass.js +1 -6
- package/examples/js/postprocessing/CubeTexturePass.js +12 -9
- package/examples/js/postprocessing/DotScreenPass.js +7 -5
- package/examples/js/postprocessing/EffectComposer.js +25 -32
- package/examples/js/postprocessing/FilmPass.js +7 -5
- package/examples/js/postprocessing/GlitchPass.js +10 -11
- package/examples/js/postprocessing/HalftonePass.js +9 -9
- package/examples/js/postprocessing/LUTPass.js +2 -15
- package/examples/js/postprocessing/MaskPass.js +20 -17
- package/examples/js/postprocessing/OutlinePass.js +49 -38
- package/examples/js/postprocessing/Pass.js +11 -14
- package/examples/js/postprocessing/RenderPass.js +3 -7
- package/examples/js/postprocessing/RenderPixelatedPass.js +215 -0
- package/examples/js/postprocessing/SAOPass.js +40 -32
- package/examples/js/postprocessing/SMAAPass.js +34 -17
- package/examples/js/postprocessing/SSAARenderPass.js +14 -14
- package/examples/js/postprocessing/SSAOPass.js +56 -42
- package/examples/js/postprocessing/SSRPass.js +78 -61
- package/examples/js/postprocessing/SavePass.js +14 -6
- package/examples/js/postprocessing/ShaderPass.js +9 -8
- package/examples/js/postprocessing/TAARenderPass.js +11 -9
- package/examples/js/postprocessing/TexturePass.js +7 -4
- package/examples/js/postprocessing/UnrealBloomPass.js +43 -25
- package/examples/js/renderers/CSS2DRenderer.js +4 -23
- package/examples/js/renderers/CSS3DRenderer.js +5 -26
- package/examples/js/renderers/Projector.js +31 -108
- package/examples/js/renderers/SVGRenderer.js +4 -50
- package/examples/js/shaders/ACESFilmicToneMappingShader.js +3 -6
- package/examples/js/shaders/AfterimageShader.js +3 -6
- package/examples/js/shaders/BasicShader.js +3 -6
- package/examples/js/shaders/BleachBypassShader.js +3 -6
- package/examples/js/shaders/BlendShader.js +3 -6
- package/examples/js/shaders/BokehShader.js +3 -6
- package/examples/js/shaders/BokehShader2.js +4 -13
- package/examples/js/shaders/BrightnessContrastShader.js +3 -6
- package/examples/js/shaders/ColorCorrectionShader.js +2 -6
- package/examples/js/shaders/ColorifyShader.js +2 -6
- package/examples/js/shaders/ConvolutionShader.js +5 -10
- package/examples/js/shaders/CopyShader.js +3 -6
- package/examples/js/shaders/DOFMipMapShader.js +3 -6
- package/examples/js/shaders/DepthLimitedBlurShader.js +2 -9
- package/examples/js/shaders/DigitalGlitch.js +3 -6
- package/examples/js/shaders/DotScreenShader.js +2 -6
- package/examples/js/shaders/FXAAShader.js +1 -3
- package/examples/js/shaders/FilmShader.js +3 -6
- package/examples/js/shaders/FocusShader.js +3 -6
- package/examples/js/shaders/FreiChenShader.js +2 -6
- package/examples/js/shaders/GammaCorrectionShader.js +3 -6
- package/examples/js/shaders/GodRaysShader.js +11 -24
- package/examples/js/shaders/HalftoneShader.js +3 -6
- package/examples/js/shaders/HorizontalBlurShader.js +3 -6
- package/examples/js/shaders/HorizontalTiltShiftShader.js +3 -6
- package/examples/js/shaders/HueSaturationShader.js +3 -6
- package/examples/js/shaders/KaleidoShader.js +3 -6
- package/examples/js/shaders/LuminosityHighPassShader.js +2 -6
- package/examples/js/shaders/LuminosityShader.js +4 -7
- package/examples/js/shaders/MMDToonShader.js +2 -4
- package/examples/js/shaders/MirrorShader.js +3 -6
- package/examples/js/shaders/NormalMapShader.js +2 -6
- package/examples/js/shaders/RGBShiftShader.js +3 -6
- package/examples/js/shaders/SAOShader.js +2 -6
- package/examples/js/shaders/SMAAShader.js +6 -18
- package/examples/js/shaders/SSAOShader.js +2 -6
- package/examples/js/shaders/SSRShader.js +6 -18
- package/examples/js/shaders/SepiaShader.js +3 -6
- package/examples/js/shaders/SobelOperatorShader.js +2 -6
- package/examples/js/shaders/TechnicolorShader.js +3 -6
- package/examples/js/shaders/ToneMapShader.js +4 -7
- package/examples/js/shaders/ToonShader.js +8 -24
- package/examples/js/shaders/TriangleBlurShader.js +2 -6
- package/examples/js/shaders/UnpackDepthRGBAShader.js +3 -6
- package/examples/js/shaders/VelocityShader.js +126 -0
- package/examples/js/shaders/VerticalBlurShader.js +3 -6
- package/examples/js/shaders/VerticalTiltShiftShader.js +3 -6
- package/examples/js/shaders/VignetteShader.js +3 -6
- package/examples/js/shaders/VolumeShader.js +2 -6
- package/examples/js/shaders/WaterRefractionShader.js +2 -6
- package/examples/js/textures/FlakesTexture.js +0 -1
- package/examples/js/utils/BufferGeometryUtils.js +237 -171
- package/examples/js/utils/CameraUtils.js +5 -20
- package/examples/js/utils/GPUStatsPanel.js +3 -12
- package/examples/js/utils/GeometryCompressionUtils.js +19 -44
- package/examples/js/utils/GeometryUtils.js +15 -36
- package/examples/js/utils/LDrawUtils.js +8 -11
- package/examples/js/utils/PackedPhongMaterial.js +6 -4
- package/examples/js/utils/SceneUtils.js +109 -14
- package/examples/js/utils/ShadowMapViewer.js +17 -14
- package/examples/js/utils/SkeletonUtils.js +13 -27
- package/examples/js/utils/UVsDebug.js +20 -12
- package/examples/js/utils/WorkerPool.js +1 -11
- package/examples/jsm/animation/CCDIKSolver.js +27 -3
- package/examples/jsm/animation/MMDPhysics.js +28 -22
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/ArcballControls.js +17 -2
- package/examples/jsm/controls/FirstPersonControls.js +20 -27
- package/examples/jsm/controls/FlyControls.js +16 -24
- package/examples/jsm/controls/OrbitControls.js +44 -9
- package/examples/jsm/controls/PointerLockControls.js +0 -7
- package/examples/jsm/controls/TrackballControls.js +14 -5
- package/examples/jsm/controls/TransformControls.js +18 -16
- package/examples/jsm/csm/CSM.js +1 -0
- package/examples/jsm/csm/CSMHelper.js +30 -0
- package/examples/jsm/effects/AnaglyphEffect.js +2 -2
- package/examples/jsm/effects/OutlineEffect.js +4 -25
- package/examples/jsm/effects/ParallaxBarrierEffect.js +2 -2
- package/examples/jsm/effects/PeppersGhostEffect.js +2 -2
- package/examples/jsm/effects/StereoEffect.js +2 -2
- package/examples/jsm/environments/RoomEnvironment.js +23 -0
- package/examples/jsm/exporters/ColladaExporter.js +4 -13
- package/examples/jsm/exporters/DRACOExporter.js +0 -13
- package/examples/jsm/exporters/GLTFExporter.js +29 -110
- package/examples/jsm/exporters/KTX2Exporter.js +29 -29
- package/examples/jsm/exporters/OBJExporter.js +0 -18
- package/examples/jsm/exporters/PLYExporter.js +14 -22
- package/examples/jsm/exporters/STLExporter.js +1 -9
- package/examples/jsm/exporters/USDZExporter.js +107 -4
- package/examples/jsm/geometries/ConvexGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +0 -6
- package/examples/jsm/helpers/OctreeHelper.js +22 -8
- package/examples/jsm/helpers/VertexNormalsHelper.js +7 -1
- package/examples/jsm/helpers/VertexTangentsHelper.js +7 -0
- package/examples/jsm/helpers/ViewHelper.js +24 -0
- package/examples/jsm/interactive/HTMLMesh.js +14 -15
- package/examples/jsm/interactive/InteractiveGroup.js +4 -2
- package/examples/jsm/interactive/SelectionHelper.js +5 -3
- package/examples/jsm/libs/flow.module.js +610 -160
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/libs/meshopt_decoder.module.js +97 -32
- package/examples/jsm/libs/utif.module.js +1579 -0
- package/examples/jsm/libs/zstddec.module.js +1 -0
- package/examples/jsm/lines/LineSegments2.js +4 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +29 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -28
- package/examples/jsm/loaders/EXRLoader.js +3 -13
- package/examples/jsm/loaders/FBXLoader.js +26 -3
- package/examples/jsm/loaders/FontLoader.js +3 -16
- package/examples/jsm/loaders/GLTFLoader.js +321 -464
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
- package/examples/jsm/loaders/KTX2Loader.js +254 -53
- package/examples/jsm/loaders/LDrawLoader.js +149 -87
- package/examples/jsm/loaders/LottieLoader.js +4 -2
- package/examples/jsm/loaders/MaterialXLoader.js +728 -0
- package/examples/jsm/loaders/OBJLoader.js +6 -14
- package/examples/jsm/loaders/PCDLoader.js +60 -14
- package/examples/jsm/loaders/PLYLoader.js +71 -19
- package/examples/jsm/loaders/RGBELoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +231 -17
- package/examples/jsm/loaders/TIFFLoader.js +36 -0
- package/examples/jsm/loaders/USDZLoader.js +633 -0
- package/examples/jsm/loaders/VRMLLoader.js +36 -26
- package/examples/jsm/loaders/VTKLoader.js +1 -1
- package/examples/jsm/loaders/lwo/LWO2Parser.js +6 -8
- package/examples/jsm/loaders/lwo/LWO3Parser.js +6 -8
- package/examples/jsm/materials/MeshGouraudMaterial.js +423 -0
- package/examples/jsm/math/ColorConverter.js +1 -49
- package/examples/jsm/math/ConvexHull.js +4 -4
- package/examples/jsm/math/Octree.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +43 -0
- package/examples/jsm/misc/Volume.js +169 -171
- package/examples/jsm/misc/VolumeSlice.js +78 -80
- package/examples/jsm/modifiers/SimplifyModifier.js +1 -1
- package/examples/jsm/node-editor/NodeEditor.js +91 -12
- package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/NormalEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/PositionEditor.js +1 -1
- package/examples/jsm/node-editor/accessors/UVEditor.js +1 -1
- package/examples/jsm/node-editor/core/BaseNode.js +10 -3
- package/examples/jsm/node-editor/display/BlendEditor.js +1 -1
- package/examples/jsm/node-editor/display/NormalMapEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/ColorEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/FloatEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/SliderEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/TextureEditor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +1 -1
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +1 -1
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +7 -10
- package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +7 -10
- package/examples/jsm/node-editor/math/AngleEditor.js +4 -4
- package/examples/jsm/node-editor/math/DotEditor.js +1 -1
- package/examples/jsm/node-editor/math/InvertEditor.js +3 -3
- package/examples/jsm/node-editor/math/LimiterEditor.js +1 -1
- package/examples/jsm/node-editor/math/NormalizeEditor.js +1 -1
- package/examples/jsm/node-editor/math/OperatorEditor.js +1 -1
- package/examples/jsm/node-editor/math/PowerEditor.js +1 -1
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +1 -1
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +1 -1
- package/examples/jsm/node-editor/scene/MeshEditor.js +11 -8
- package/examples/jsm/node-editor/utils/JoinEditor.js +1 -1
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
- package/examples/jsm/node-editor/utils/PreviewEditor.js +7 -3
- package/examples/jsm/node-editor/utils/SplitEditor.js +1 -1
- package/examples/jsm/node-editor/utils/TimerEditor.js +1 -1
- package/examples/jsm/nodes/Nodes.js +70 -13
- package/examples/jsm/nodes/accessors/BitangentNode.js +62 -0
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
- package/examples/jsm/nodes/accessors/NormalNode.js +8 -8
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +11 -5
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
- package/examples/jsm/nodes/accessors/SkinningNode.js +8 -1
- package/examples/jsm/nodes/accessors/TangentNode.js +95 -0
- package/examples/jsm/nodes/core/AttributeNode.js +32 -9
- package/examples/jsm/nodes/core/CodeNode.js +3 -3
- package/examples/jsm/nodes/core/FunctionCallNode.js +20 -5
- package/examples/jsm/nodes/core/FunctionNode.js +2 -2
- package/examples/jsm/nodes/core/Node.js +15 -13
- package/examples/jsm/nodes/core/NodeBuilder.js +67 -18
- package/examples/jsm/nodes/core/NodeFrame.js +2 -2
- package/examples/jsm/nodes/core/NodeUtils.js +23 -1
- package/examples/jsm/nodes/core/NodeVarying.js +17 -0
- package/examples/jsm/nodes/core/VaryingNode.js +56 -0
- package/examples/jsm/nodes/core/constants.js +13 -13
- package/examples/jsm/nodes/display/BlendModeNode.js +85 -0
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +84 -0
- package/examples/jsm/nodes/display/NormalMapNode.js +19 -12
- package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +5 -5
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +3 -3
- package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +2 -2
- package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +3 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +8 -7
- package/examples/jsm/nodes/lighting/LightingContextNode.js +4 -4
- package/examples/jsm/nodes/loaders/NodeLoader.js +2 -2
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +33 -0
- package/examples/jsm/nodes/materials/Materials.js +21 -31
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +70 -0
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +4 -7
- package/examples/jsm/nodes/materials/NodeMaterial.js +11 -3
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
- package/examples/jsm/nodes/materialx/DISCLAIMER.md +199 -0
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +59 -0
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +56 -0
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +617 -0
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +7 -17
- package/examples/jsm/nodes/math/OperatorNode.js +16 -3
- package/examples/jsm/nodes/parsers/GLSLNodeFunction.js +21 -6
- package/examples/jsm/nodes/procedural/CheckerNode.js +2 -2
- package/examples/jsm/nodes/shadernode/ShaderNode.js +40 -25
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +95 -68
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +49 -6
- package/examples/jsm/nodes/utils/ConvertNode.js +18 -12
- package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
- package/examples/jsm/nodes/utils/JoinNode.js +15 -9
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +3 -2
- package/examples/jsm/nodes/utils/OscNode.js +2 -2
- package/examples/jsm/nodes/utils/RemapNode.js +34 -0
- package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
- package/examples/jsm/nodes/utils/SplitNode.js +21 -5
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +23 -3
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
- package/examples/jsm/objects/GroundProjectedEnv.js +186 -0
- package/examples/jsm/objects/Reflector.js +12 -5
- package/examples/jsm/objects/ReflectorForSSRPass.js +3 -5
- package/examples/jsm/objects/Refractor.js +12 -6
- package/examples/jsm/objects/ShadowMesh.js +8 -2
- package/examples/jsm/postprocessing/AfterimagePass.js +17 -4
- package/examples/jsm/postprocessing/BloomPass.js +22 -3
- package/examples/jsm/postprocessing/BokehPass.js +18 -4
- package/examples/jsm/postprocessing/CubeTexturePass.js +12 -5
- package/examples/jsm/postprocessing/DotScreenPass.js +8 -0
- package/examples/jsm/postprocessing/EffectComposer.js +9 -0
- package/examples/jsm/postprocessing/FilmPass.js +8 -0
- package/examples/jsm/postprocessing/GlitchPass.js +13 -1
- package/examples/jsm/postprocessing/HalftonePass.js +8 -0
- package/examples/jsm/postprocessing/OutlinePass.js +25 -3
- package/examples/jsm/postprocessing/Pass.js +2 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +234 -0
- package/examples/jsm/postprocessing/SAOPass.js +20 -0
- package/examples/jsm/postprocessing/SMAAPass.js +16 -0
- package/examples/jsm/postprocessing/SSAARenderPass.js +4 -0
- package/examples/jsm/postprocessing/SavePass.js +17 -1
- package/examples/jsm/postprocessing/ShaderPass.js +8 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +9 -0
- package/examples/jsm/postprocessing/TexturePass.js +8 -0
- package/examples/jsm/postprocessing/UnrealBloomPass.js +16 -0
- package/examples/jsm/renderers/CSS2DRenderer.js +2 -2
- package/examples/jsm/renderers/CSS3DRenderer.js +2 -2
- package/examples/jsm/renderers/Projector.js +2 -24
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +9 -5
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +363 -231
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
- package/examples/jsm/renderers/webgpu/WebGPUAnimation.js +58 -0
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +63 -5
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +68 -3
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +6 -0
- package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +6 -0
- package/examples/jsm/renderers/webgpu/WebGPUObjects.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +17 -19
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +16 -14
- package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +113 -93
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +5 -3
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUUtils.js +81 -0
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +63 -36
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/shaders/LuminosityShader.js +1 -1
- package/examples/jsm/shaders/MMDToonShader.js +2 -4
- package/examples/jsm/shaders/ToneMapShader.js +1 -1
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +176 -43
- package/examples/jsm/utils/GeometryUtils.js +17 -25
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
- package/examples/jsm/utils/SceneUtils.js +117 -12
- package/examples/jsm/webxr/OculusHandModel.js +3 -2
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
- package/examples/jsm/webxr/VRButton.js +1 -7
- package/examples/jsm/webxr/XRHandMeshModel.js +8 -3
- package/package.json +22 -18
- package/src/Three.Legacy.js +262 -36
- package/src/Three.js +4 -2
- package/src/animation/AnimationAction.js +6 -5
- package/src/animation/AnimationClip.js +1 -1
- package/src/animation/AnimationMixer.js +1 -1
- package/src/animation/AnimationUtils.js +204 -199
- package/src/animation/KeyframeTrack.js +1 -1
- package/src/animation/PropertyBinding.js +31 -5
- package/src/audio/AudioContext.js +5 -5
- package/src/cameras/CubeCamera.js +14 -21
- package/src/constants.js +2 -4
- package/src/core/BufferAttribute.js +81 -111
- package/src/core/BufferGeometry.js +3 -41
- package/src/core/InstancedBufferAttribute.js +0 -10
- package/src/core/InstancedBufferGeometry.js +1 -7
- package/src/core/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +57 -8
- package/src/core/Object3D.js +22 -5
- package/src/core/Uniform.js +0 -7
- package/src/core/UniformsGroup.js +92 -0
- package/src/extras/DataUtils.js +104 -88
- package/src/extras/Earcut.js +67 -67
- package/src/extras/core/Path.js +1 -0
- package/src/extras/core/ShapePath.js +1 -4
- package/src/extras/curves/CatmullRomCurve3.js +4 -2
- package/src/geometries/BoxGeometry.js +1 -1
- package/src/geometries/CapsuleGeometry.js +1 -1
- package/src/geometries/CircleGeometry.js +1 -1
- package/src/geometries/ConeGeometry.js +1 -1
- package/src/geometries/CylinderGeometry.js +2 -1
- package/src/geometries/DodecahedronGeometry.js +1 -1
- package/src/geometries/EdgesGeometry.js +5 -4
- package/src/geometries/ExtrudeGeometry.js +2 -11
- package/src/geometries/IcosahedronGeometry.js +1 -1
- package/src/geometries/LatheGeometry.js +2 -2
- package/src/geometries/OctahedronGeometry.js +1 -1
- package/src/geometries/PlaneGeometry.js +2 -1
- package/src/geometries/PolyhedronGeometry.js +2 -2
- package/src/geometries/RingGeometry.js +1 -1
- package/src/geometries/ShapeGeometry.js +3 -2
- package/src/geometries/SphereGeometry.js +2 -1
- package/src/geometries/TetrahedronGeometry.js +1 -1
- package/src/geometries/TorusGeometry.js +2 -1
- package/src/geometries/TorusKnotGeometry.js +2 -1
- package/src/geometries/TubeGeometry.js +2 -1
- package/src/geometries/WireframeGeometry.js +1 -0
- package/src/helpers/ArrowHelper.js +9 -0
- package/src/helpers/Box3Helper.js +7 -0
- package/src/helpers/BoxHelper.js +7 -1
- package/src/helpers/CameraHelper.js +97 -38
- package/src/helpers/DirectionalLightHelper.js +6 -1
- package/src/helpers/GridHelper.js +7 -0
- package/src/helpers/HemisphereLightHelper.js +5 -1
- package/src/helpers/PlaneHelper.js +15 -9
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/PolarGridHelper.js +25 -14
- package/src/helpers/SkeletonHelper.js +7 -0
- package/src/helpers/SpotLightHelper.js +5 -2
- package/src/lights/LightShadow.js +1 -2
- package/src/lights/PointLight.js +2 -2
- package/src/lights/SpotLight.js +4 -2
- package/src/loaders/FileLoader.js +16 -2
- package/src/loaders/LoadingManager.js +1 -1
- package/src/loaders/MaterialLoader.js +49 -7
- package/src/loaders/ObjectLoader.js +9 -42
- package/src/materials/Material.js +2 -34
- package/src/materials/Materials.js +0 -27
- package/src/materials/MeshLambertMaterial.js +28 -1
- package/src/materials/MeshPhysicalMaterial.js +1 -1
- package/src/materials/ShaderMaterial.js +3 -7
- package/src/math/Color.js +8 -18
- package/src/math/MathUtils.js +1 -7
- package/src/math/Matrix3.js +54 -25
- package/src/math/Matrix4.js +3 -27
- package/src/math/Quaternion.js +1 -21
- package/src/math/Ray.js +2 -5
- package/src/math/Sphere.js +36 -21
- package/src/math/Vector2.js +4 -24
- package/src/math/Vector3.js +7 -46
- package/src/math/Vector4.js +4 -24
- package/src/objects/InstancedMesh.js +7 -0
- package/src/objects/LOD.js +25 -6
- package/src/renderers/WebGL3DRenderTarget.js +1 -1
- package/src/renderers/WebGLArrayRenderTarget.js +1 -1
- package/src/renderers/WebGLCubeRenderTarget.js +1 -1
- package/src/renderers/WebGLMultipleRenderTargets.js +1 -1
- package/src/renderers/WebGLRenderTarget.js +1 -1
- package/src/renderers/WebGLRenderer.js +119 -69
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +12 -12
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +3 -5
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +6 -5
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +24 -24
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
- package/src/renderers/shaders/ShaderChunk/envmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_pars_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +2 -1
- package/src/renderers/shaders/ShaderChunk/iridescence_fragment.glsl.js +113 -99
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +34 -13
- package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +28 -0
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +3 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +13 -1
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +18 -7
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +8 -3
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +9 -6
- package/src/renderers/shaders/ShaderChunk/shadowmask_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +14 -10
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/worldpos_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +7 -2
- package/src/renderers/shaders/ShaderLib/background.glsl.js +7 -2
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +62 -0
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +4 -6
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +22 -50
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +0 -1
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +0 -3
- package/src/renderers/shaders/ShaderLib.js +50 -36
- package/src/renderers/shaders/UniformsLib.js +13 -12
- package/src/renderers/shaders/UniformsUtils.js +29 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -0
- package/src/renderers/webgl/WebGLBackground.js +17 -9
- package/src/renderers/webgl/WebGLLights.js +37 -17
- package/src/renderers/webgl/WebGLMaterials.js +2 -1
- package/src/renderers/webgl/WebGLMorphtargets.js +0 -20
- package/src/renderers/webgl/WebGLProgram.js +6 -11
- package/src/renderers/webgl/WebGLPrograms.js +30 -26
- package/src/renderers/webgl/WebGLRenderLists.js +5 -4
- package/src/renderers/webgl/WebGLRenderStates.js +5 -4
- package/src/renderers/webgl/WebGLShaderCache.js +9 -6
- package/src/renderers/webgl/WebGLShadowMap.js +13 -16
- package/src/renderers/webgl/WebGLState.js +125 -41
- package/src/renderers/webgl/WebGLTextures.js +94 -39
- package/src/renderers/webgl/WebGLUniforms.js +156 -28
- package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
- package/src/renderers/webgl/WebGLUtils.js +3 -1
- package/src/renderers/webvr/WebVRManager.js +42 -9
- package/src/renderers/webvr/WebVRUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +91 -50
- package/src/renderers/webxr/WebXRManager.js +127 -34
- package/src/scenes/Scene.js +24 -3
- package/src/textures/CompressedArrayTexture.js +18 -0
- package/src/textures/Source.js +1 -1
- package/src/textures/Texture.js +2 -1
- package/src/utils.js +1 -1
- package/examples/js/controls/experimental/CameraControls.js +0 -1048
- package/examples/js/libs/lottie_canvas.js +0 -12751
- package/examples/js/loaders/KTX2Loader.js +0 -558
- package/examples/js/shaders/PixelShader.js +0 -51
- package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
- package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
- package/examples/jsm/nodes/core/NodeVary.js +0 -14
- package/examples/jsm/nodes/core/VaryNode.js +0 -54
- package/examples/jsm/package.json +0 -3
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
- package/examples/jsm/shaders/PixelShader.js +0 -44
- package/src/renderers/shaders/ShaderChunk/lights_lambert_vertex.glsl.js +0 -122
|
@@ -23,6 +23,7 @@ const _material_library_pattern = /^mtllib /;
|
|
|
23
23
|
const _material_use_pattern = /^usemtl /;
|
|
24
24
|
// usemap map_name
|
|
25
25
|
const _map_use_pattern = /^usemap /;
|
|
26
|
+
const _face_vertex_data_separator_pattern = /\s+/;
|
|
26
27
|
|
|
27
28
|
const _vA = new Vector3();
|
|
28
29
|
const _vB = new Vector3();
|
|
@@ -503,31 +504,22 @@ class OBJLoader extends Loader {
|
|
|
503
504
|
}
|
|
504
505
|
|
|
505
506
|
const lines = text.split( '\n' );
|
|
506
|
-
let line = '', lineFirstChar = '';
|
|
507
|
-
let lineLength = 0;
|
|
508
507
|
let result = [];
|
|
509
508
|
|
|
510
|
-
// Faster to just trim left side of the line. Use if available.
|
|
511
|
-
const trimLeft = ( typeof ''.trimLeft === 'function' );
|
|
512
|
-
|
|
513
509
|
for ( let i = 0, l = lines.length; i < l; i ++ ) {
|
|
514
510
|
|
|
515
|
-
line = lines[ i ];
|
|
516
|
-
|
|
517
|
-
line = trimLeft ? line.trimLeft() : line.trim();
|
|
518
|
-
|
|
519
|
-
lineLength = line.length;
|
|
511
|
+
const line = lines[ i ].trimStart();
|
|
520
512
|
|
|
521
|
-
if (
|
|
513
|
+
if ( line.length === 0 ) continue;
|
|
522
514
|
|
|
523
|
-
lineFirstChar = line.charAt( 0 );
|
|
515
|
+
const lineFirstChar = line.charAt( 0 );
|
|
524
516
|
|
|
525
517
|
// @todo invoke passed in handler if any
|
|
526
518
|
if ( lineFirstChar === '#' ) continue;
|
|
527
519
|
|
|
528
520
|
if ( lineFirstChar === 'v' ) {
|
|
529
521
|
|
|
530
|
-
const data = line.split(
|
|
522
|
+
const data = line.split( _face_vertex_data_separator_pattern );
|
|
531
523
|
|
|
532
524
|
switch ( data[ 0 ] ) {
|
|
533
525
|
|
|
@@ -575,7 +567,7 @@ class OBJLoader extends Loader {
|
|
|
575
567
|
} else if ( lineFirstChar === 'f' ) {
|
|
576
568
|
|
|
577
569
|
const lineData = line.slice( 1 ).trim();
|
|
578
|
-
const vertexData = lineData.split(
|
|
570
|
+
const vertexData = lineData.split( _face_vertex_data_separator_pattern );
|
|
579
571
|
const faceVertices = [];
|
|
580
572
|
|
|
581
573
|
// Parse the face vertex data into an easy to work with format
|
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
BufferGeometry,
|
|
3
3
|
FileLoader,
|
|
4
4
|
Float32BufferAttribute,
|
|
5
|
+
Int32BufferAttribute,
|
|
5
6
|
Loader,
|
|
6
7
|
LoaderUtils,
|
|
7
8
|
Points,
|
|
@@ -122,7 +123,7 @@ class PCDLoader extends Loader {
|
|
|
122
123
|
|
|
123
124
|
// remove comments
|
|
124
125
|
|
|
125
|
-
PCDheader.str = PCDheader.str.replace(
|
|
126
|
+
PCDheader.str = PCDheader.str.replace( /#.*/gi, '' );
|
|
126
127
|
|
|
127
128
|
// parse
|
|
128
129
|
|
|
@@ -229,6 +230,8 @@ class PCDLoader extends Loader {
|
|
|
229
230
|
const position = [];
|
|
230
231
|
const normal = [];
|
|
231
232
|
const color = [];
|
|
233
|
+
const intensity = [];
|
|
234
|
+
const label = [];
|
|
232
235
|
|
|
233
236
|
// ascii
|
|
234
237
|
|
|
@@ -285,6 +288,18 @@ class PCDLoader extends Loader {
|
|
|
285
288
|
|
|
286
289
|
}
|
|
287
290
|
|
|
291
|
+
if ( offset.intensity !== undefined ) {
|
|
292
|
+
|
|
293
|
+
intensity.push( parseFloat( line[ offset.intensity ] ) );
|
|
294
|
+
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
if ( offset.label !== undefined ) {
|
|
298
|
+
|
|
299
|
+
label.push( parseInt( line[ offset.label ] ) );
|
|
300
|
+
|
|
301
|
+
}
|
|
302
|
+
|
|
288
303
|
}
|
|
289
304
|
|
|
290
305
|
}
|
|
@@ -309,25 +324,46 @@ class PCDLoader extends Loader {
|
|
|
309
324
|
|
|
310
325
|
if ( offset.x !== undefined ) {
|
|
311
326
|
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
327
|
+
const xIndex = PCDheader.fields.indexOf( 'x' );
|
|
328
|
+
const yIndex = PCDheader.fields.indexOf( 'y' );
|
|
329
|
+
const zIndex = PCDheader.fields.indexOf( 'z' );
|
|
330
|
+
position.push( dataview.getFloat32( ( PCDheader.points * offset.x ) + PCDheader.size[ xIndex ] * i, this.littleEndian ) );
|
|
331
|
+
position.push( dataview.getFloat32( ( PCDheader.points * offset.y ) + PCDheader.size[ yIndex ] * i, this.littleEndian ) );
|
|
332
|
+
position.push( dataview.getFloat32( ( PCDheader.points * offset.z ) + PCDheader.size[ zIndex ] * i, this.littleEndian ) );
|
|
315
333
|
|
|
316
334
|
}
|
|
317
335
|
|
|
318
336
|
if ( offset.rgb !== undefined ) {
|
|
319
337
|
|
|
320
|
-
|
|
321
|
-
color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[
|
|
322
|
-
color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[
|
|
338
|
+
const rgbIndex = PCDheader.fields.indexOf( 'rgb' );
|
|
339
|
+
color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 2 ) / 255.0 );
|
|
340
|
+
color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 1 ) / 255.0 );
|
|
341
|
+
color.push( dataview.getUint8( ( PCDheader.points * offset.rgb ) + PCDheader.size[ rgbIndex ] * i + 0 ) / 255.0 );
|
|
323
342
|
|
|
324
343
|
}
|
|
325
344
|
|
|
326
345
|
if ( offset.normal_x !== undefined ) {
|
|
327
346
|
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
347
|
+
const xIndex = PCDheader.fields.indexOf( 'normal_x' );
|
|
348
|
+
const yIndex = PCDheader.fields.indexOf( 'normal_y' );
|
|
349
|
+
const zIndex = PCDheader.fields.indexOf( 'normal_z' );
|
|
350
|
+
normal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_x ) + PCDheader.size[ xIndex ] * i, this.littleEndian ) );
|
|
351
|
+
normal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_y ) + PCDheader.size[ yIndex ] * i, this.littleEndian ) );
|
|
352
|
+
normal.push( dataview.getFloat32( ( PCDheader.points * offset.normal_z ) + PCDheader.size[ zIndex ] * i, this.littleEndian ) );
|
|
353
|
+
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
if ( offset.intensity !== undefined ) {
|
|
357
|
+
|
|
358
|
+
const intensityIndex = PCDheader.fields.indexOf( 'intensity' );
|
|
359
|
+
intensity.push( dataview.getFloat32( ( PCDheader.points * offset.intensity ) + PCDheader.size[ intensityIndex ] * i, this.littleEndian ) );
|
|
360
|
+
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
if ( offset.label !== undefined ) {
|
|
364
|
+
|
|
365
|
+
const labelIndex = PCDheader.fields.indexOf( 'label' );
|
|
366
|
+
label.push( dataview.getInt32( ( PCDheader.points * offset.label ) + PCDheader.size[ labelIndex ] * i, this.littleEndian ) );
|
|
331
367
|
|
|
332
368
|
}
|
|
333
369
|
|
|
@@ -368,6 +404,18 @@ class PCDLoader extends Loader {
|
|
|
368
404
|
|
|
369
405
|
}
|
|
370
406
|
|
|
407
|
+
if ( offset.intensity !== undefined ) {
|
|
408
|
+
|
|
409
|
+
intensity.push( dataview.getFloat32( row + offset.intensity, this.littleEndian ) );
|
|
410
|
+
|
|
411
|
+
}
|
|
412
|
+
|
|
413
|
+
if ( offset.label !== undefined ) {
|
|
414
|
+
|
|
415
|
+
label.push( dataview.getInt32( row + offset.label, this.littleEndian ) );
|
|
416
|
+
|
|
417
|
+
}
|
|
418
|
+
|
|
371
419
|
}
|
|
372
420
|
|
|
373
421
|
}
|
|
@@ -379,6 +427,8 @@ class PCDLoader extends Loader {
|
|
|
379
427
|
if ( position.length > 0 ) geometry.setAttribute( 'position', new Float32BufferAttribute( position, 3 ) );
|
|
380
428
|
if ( normal.length > 0 ) geometry.setAttribute( 'normal', new Float32BufferAttribute( normal, 3 ) );
|
|
381
429
|
if ( color.length > 0 ) geometry.setAttribute( 'color', new Float32BufferAttribute( color, 3 ) );
|
|
430
|
+
if ( intensity.length > 0 ) geometry.setAttribute( 'intensity', new Float32BufferAttribute( intensity, 1 ) );
|
|
431
|
+
if ( label.length > 0 ) geometry.setAttribute( 'label', new Int32BufferAttribute( label, 1 ) );
|
|
382
432
|
|
|
383
433
|
geometry.computeBoundingSphere();
|
|
384
434
|
|
|
@@ -390,10 +440,6 @@ class PCDLoader extends Loader {
|
|
|
390
440
|
|
|
391
441
|
material.vertexColors = true;
|
|
392
442
|
|
|
393
|
-
} else {
|
|
394
|
-
|
|
395
|
-
material.color.setHex( Math.random() * 0xffffff );
|
|
396
|
-
|
|
397
443
|
}
|
|
398
444
|
|
|
399
445
|
// build point cloud
|
|
@@ -31,6 +31,16 @@ import {
|
|
|
31
31
|
* diffuse_blue: 'blue'
|
|
32
32
|
* } );
|
|
33
33
|
*
|
|
34
|
+
* Custom properties outside of the defaults for position, uv, normal
|
|
35
|
+
* and color attributes can be added using the setCustomPropertyMapping method.
|
|
36
|
+
* For example, the following maps the element properties “custom_property_a”
|
|
37
|
+
* and “custom_property_b” to an attribute “customAttribute” with an item size of 2.
|
|
38
|
+
* Attribute item sizes are set from the number of element properties in the property array.
|
|
39
|
+
*
|
|
40
|
+
* loader.setCustomPropertyMapping( {
|
|
41
|
+
* customAttribute: ['custom_property_a', 'custom_property_b'],
|
|
42
|
+
* } );
|
|
43
|
+
*
|
|
34
44
|
*/
|
|
35
45
|
|
|
36
46
|
const _color = new Color();
|
|
@@ -42,6 +52,7 @@ class PLYLoader extends Loader {
|
|
|
42
52
|
super( manager );
|
|
43
53
|
|
|
44
54
|
this.propertyNameMapping = {};
|
|
55
|
+
this.customPropertyMapping = {};
|
|
45
56
|
|
|
46
57
|
}
|
|
47
58
|
|
|
@@ -86,11 +97,17 @@ class PLYLoader extends Loader {
|
|
|
86
97
|
|
|
87
98
|
}
|
|
88
99
|
|
|
100
|
+
setCustomPropertyNameMapping( mapping ) {
|
|
101
|
+
|
|
102
|
+
this.customPropertyMapping = mapping;
|
|
103
|
+
|
|
104
|
+
}
|
|
105
|
+
|
|
89
106
|
parse( data ) {
|
|
90
107
|
|
|
91
108
|
function parseHeader( data ) {
|
|
92
109
|
|
|
93
|
-
const patternHeader = /^ply([\s\S]*)end_header\r
|
|
110
|
+
const patternHeader = /^ply([\s\S]*)end_header(\r\n|\r|\n)/;
|
|
94
111
|
let headerText = '';
|
|
95
112
|
let headerLength = 0;
|
|
96
113
|
const result = patternHeader.exec( data );
|
|
@@ -109,7 +126,7 @@ class PLYLoader extends Loader {
|
|
|
109
126
|
objInfo: ''
|
|
110
127
|
};
|
|
111
128
|
|
|
112
|
-
const lines = headerText.split(
|
|
129
|
+
const lines = headerText.split( /\r\n|\r|\n/ );
|
|
113
130
|
let currentElement;
|
|
114
131
|
|
|
115
132
|
function make_ply_element_property( propertValues, propertyNameMapping ) {
|
|
@@ -260,18 +277,32 @@ class PLYLoader extends Loader {
|
|
|
260
277
|
|
|
261
278
|
}
|
|
262
279
|
|
|
280
|
+
function createBuffer() {
|
|
281
|
+
|
|
282
|
+
const buffer = {
|
|
283
|
+
indices: [],
|
|
284
|
+
vertices: [],
|
|
285
|
+
normals: [],
|
|
286
|
+
uvs: [],
|
|
287
|
+
faceVertexUvs: [],
|
|
288
|
+
colors: [],
|
|
289
|
+
};
|
|
290
|
+
|
|
291
|
+
for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
|
|
292
|
+
|
|
293
|
+
buffer[ customProperty ] = [];
|
|
294
|
+
|
|
295
|
+
}
|
|
296
|
+
|
|
297
|
+
return buffer;
|
|
298
|
+
|
|
299
|
+
}
|
|
300
|
+
|
|
263
301
|
function parseASCII( data, header ) {
|
|
264
302
|
|
|
265
303
|
// PLY ascii format specification, as per http://en.wikipedia.org/wiki/PLY_(file_format)
|
|
266
304
|
|
|
267
|
-
const buffer =
|
|
268
|
-
indices: [],
|
|
269
|
-
vertices: [],
|
|
270
|
-
normals: [],
|
|
271
|
-
uvs: [],
|
|
272
|
-
faceVertexUvs: [],
|
|
273
|
-
colors: []
|
|
274
|
-
};
|
|
305
|
+
const buffer = createBuffer();
|
|
275
306
|
|
|
276
307
|
let result;
|
|
277
308
|
|
|
@@ -283,7 +314,7 @@ class PLYLoader extends Loader {
|
|
|
283
314
|
|
|
284
315
|
}
|
|
285
316
|
|
|
286
|
-
const lines = body.split(
|
|
317
|
+
const lines = body.split( /\r\n|\r|\n/ );
|
|
287
318
|
let currentElement = 0;
|
|
288
319
|
let currentElementCount = 0;
|
|
289
320
|
|
|
@@ -357,6 +388,24 @@ class PLYLoader extends Loader {
|
|
|
357
388
|
|
|
358
389
|
}
|
|
359
390
|
|
|
391
|
+
// custom buffer data
|
|
392
|
+
|
|
393
|
+
for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
|
|
394
|
+
|
|
395
|
+
if ( buffer[ customProperty ].length > 0 ) {
|
|
396
|
+
|
|
397
|
+
geometry.setAttribute(
|
|
398
|
+
customProperty,
|
|
399
|
+
new Float32BufferAttribute(
|
|
400
|
+
buffer[ customProperty ],
|
|
401
|
+
scope.customPropertyMapping[ customProperty ].length
|
|
402
|
+
)
|
|
403
|
+
);
|
|
404
|
+
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
}
|
|
408
|
+
|
|
360
409
|
geometry.computeBoundingSphere();
|
|
361
410
|
|
|
362
411
|
return geometry;
|
|
@@ -419,6 +468,16 @@ class PLYLoader extends Loader {
|
|
|
419
468
|
|
|
420
469
|
}
|
|
421
470
|
|
|
471
|
+
for ( const customProperty of Object.keys( scope.customPropertyMapping ) ) {
|
|
472
|
+
|
|
473
|
+
for ( const elementProperty of scope.customPropertyMapping[ customProperty ] ) {
|
|
474
|
+
|
|
475
|
+
buffer[ customProperty ].push( element[ elementProperty ] );
|
|
476
|
+
|
|
477
|
+
}
|
|
478
|
+
|
|
479
|
+
}
|
|
480
|
+
|
|
422
481
|
} else if ( elementName === 'face' ) {
|
|
423
482
|
|
|
424
483
|
const vertex_indices = element.vertex_indices || element.vertex_index; // issue #9338
|
|
@@ -506,14 +565,7 @@ class PLYLoader extends Loader {
|
|
|
506
565
|
|
|
507
566
|
function parseBinary( data, header ) {
|
|
508
567
|
|
|
509
|
-
const buffer =
|
|
510
|
-
indices: [],
|
|
511
|
-
vertices: [],
|
|
512
|
-
normals: [],
|
|
513
|
-
uvs: [],
|
|
514
|
-
faceVertexUvs: [],
|
|
515
|
-
colors: []
|
|
516
|
-
};
|
|
568
|
+
const buffer = createBuffer();
|
|
517
569
|
|
|
518
570
|
const little_endian = ( header.format === 'binary_little_endian' );
|
|
519
571
|
const body = new DataView( data, header.headerLength );
|
|
@@ -78,6 +78,7 @@ class SVGLoader extends Loader {
|
|
|
78
78
|
switch ( node.nodeName ) {
|
|
79
79
|
|
|
80
80
|
case 'svg':
|
|
81
|
+
style = parseStyle( node, style );
|
|
81
82
|
break;
|
|
82
83
|
|
|
83
84
|
case 'style':
|
|
@@ -1458,7 +1459,7 @@ class SVGLoader extends Loader {
|
|
|
1458
1459
|
if ( array.length >= 1 ) {
|
|
1459
1460
|
|
|
1460
1461
|
const tx = array[ 0 ];
|
|
1461
|
-
let ty =
|
|
1462
|
+
let ty = 0;
|
|
1462
1463
|
|
|
1463
1464
|
if ( array.length >= 2 ) {
|
|
1464
1465
|
|
|
@@ -1481,7 +1482,7 @@ class SVGLoader extends Loader {
|
|
|
1481
1482
|
let cy = 0;
|
|
1482
1483
|
|
|
1483
1484
|
// Angle
|
|
1484
|
-
angle =
|
|
1485
|
+
angle = array[ 0 ] * Math.PI / 180;
|
|
1485
1486
|
|
|
1486
1487
|
if ( array.length >= 3 ) {
|
|
1487
1488
|
|
|
@@ -1492,10 +1493,10 @@ class SVGLoader extends Loader {
|
|
|
1492
1493
|
}
|
|
1493
1494
|
|
|
1494
1495
|
// Rotate around center (cx, cy)
|
|
1495
|
-
tempTransform1.
|
|
1496
|
-
tempTransform2.
|
|
1496
|
+
tempTransform1.makeTranslation( - cx, - cy );
|
|
1497
|
+
tempTransform2.makeRotation( angle );
|
|
1497
1498
|
tempTransform3.multiplyMatrices( tempTransform2, tempTransform1 );
|
|
1498
|
-
tempTransform1.
|
|
1499
|
+
tempTransform1.makeTranslation( cx, cy );
|
|
1499
1500
|
currentTransform.multiplyMatrices( tempTransform1, tempTransform3 );
|
|
1500
1501
|
|
|
1501
1502
|
}
|
|
@@ -1587,7 +1588,120 @@ class SVGLoader extends Loader {
|
|
|
1587
1588
|
|
|
1588
1589
|
}
|
|
1589
1590
|
|
|
1590
|
-
|
|
1591
|
+
function transfEllipseGeneric( curve ) {
|
|
1592
|
+
|
|
1593
|
+
// For math description see:
|
|
1594
|
+
// https://math.stackexchange.com/questions/4544164
|
|
1595
|
+
|
|
1596
|
+
const a = curve.xRadius;
|
|
1597
|
+
const b = curve.yRadius;
|
|
1598
|
+
|
|
1599
|
+
const cosTheta = Math.cos( curve.aRotation );
|
|
1600
|
+
const sinTheta = Math.sin( curve.aRotation );
|
|
1601
|
+
|
|
1602
|
+
const v1 = new Vector3( a * cosTheta, a * sinTheta, 0 );
|
|
1603
|
+
const v2 = new Vector3( -b * sinTheta, b * cosTheta, 0 );
|
|
1604
|
+
|
|
1605
|
+
const f1 = v1.applyMatrix3( m );
|
|
1606
|
+
const f2 = v2.applyMatrix3( m );
|
|
1607
|
+
|
|
1608
|
+
const mF = tempTransform0.set(
|
|
1609
|
+
f1.x, f2.x, 0,
|
|
1610
|
+
f1.y, f2.y, 0,
|
|
1611
|
+
0, 0, 1,
|
|
1612
|
+
);
|
|
1613
|
+
|
|
1614
|
+
const mFInv = tempTransform1.copy( mF ).invert();
|
|
1615
|
+
const mFInvT = tempTransform2.copy( mFInv ).transpose();
|
|
1616
|
+
const mQ = mFInvT.multiply( mFInv );
|
|
1617
|
+
const mQe = mQ.elements;
|
|
1618
|
+
|
|
1619
|
+
const ed = eigenDecomposition( mQe[0], mQe[1], mQe[4] );
|
|
1620
|
+
const rt1sqrt = Math.sqrt( ed.rt1 );
|
|
1621
|
+
const rt2sqrt = Math.sqrt( ed.rt2 );
|
|
1622
|
+
|
|
1623
|
+
curve.xRadius = 1 / rt1sqrt;
|
|
1624
|
+
curve.yRadius = 1 / rt2sqrt;
|
|
1625
|
+
curve.aRotation = Math.atan2( ed.sn, ed.cs );
|
|
1626
|
+
|
|
1627
|
+
const isFullEllipse =
|
|
1628
|
+
( curve.aEndAngle - curve.aStartAngle ) % ( 2 * Math.PI ) < Number.EPSILON;
|
|
1629
|
+
|
|
1630
|
+
// Do not touch angles of a full ellipse because after transformation they
|
|
1631
|
+
// would converge to a sinle value effectively removing the whole curve
|
|
1632
|
+
|
|
1633
|
+
if ( !isFullEllipse ) {
|
|
1634
|
+
|
|
1635
|
+
const mDsqrt = tempTransform1.set(
|
|
1636
|
+
rt1sqrt, 0, 0,
|
|
1637
|
+
0, rt2sqrt, 0,
|
|
1638
|
+
0, 0, 1,
|
|
1639
|
+
);
|
|
1640
|
+
|
|
1641
|
+
const mRT = tempTransform2.set(
|
|
1642
|
+
ed.cs, ed.sn, 0,
|
|
1643
|
+
-ed.sn, ed.cs, 0,
|
|
1644
|
+
0, 0, 1,
|
|
1645
|
+
);
|
|
1646
|
+
|
|
1647
|
+
const mDRF = mDsqrt.multiply( mRT ).multiply( mF );
|
|
1648
|
+
|
|
1649
|
+
const transformAngle = phi => {
|
|
1650
|
+
|
|
1651
|
+
const { x: cosR, y: sinR } =
|
|
1652
|
+
new Vector3( Math.cos( phi ), Math.sin( phi ), 0 ).applyMatrix3( mDRF );
|
|
1653
|
+
|
|
1654
|
+
return Math.atan2( sinR, cosR );
|
|
1655
|
+
|
|
1656
|
+
}
|
|
1657
|
+
|
|
1658
|
+
curve.aStartAngle = transformAngle( curve.aStartAngle );
|
|
1659
|
+
curve.aEndAngle = transformAngle( curve.aEndAngle );
|
|
1660
|
+
|
|
1661
|
+
if ( isTransformFlipped( m ) ) {
|
|
1662
|
+
|
|
1663
|
+
curve.aClockwise = !curve.aClockwise;
|
|
1664
|
+
|
|
1665
|
+
}
|
|
1666
|
+
|
|
1667
|
+
}
|
|
1668
|
+
|
|
1669
|
+
}
|
|
1670
|
+
|
|
1671
|
+
function transfEllipseNoSkew( curve ) {
|
|
1672
|
+
|
|
1673
|
+
// Faster shortcut if no skew is applied
|
|
1674
|
+
// (e.g, a euclidean transform of a group containing the ellipse)
|
|
1675
|
+
|
|
1676
|
+
const sx = getTransformScaleX( m );
|
|
1677
|
+
const sy = getTransformScaleY( m );
|
|
1678
|
+
|
|
1679
|
+
curve.xRadius *= sx;
|
|
1680
|
+
curve.yRadius *= sy;
|
|
1681
|
+
|
|
1682
|
+
// Extract rotation angle from the matrix of form:
|
|
1683
|
+
//
|
|
1684
|
+
// | cosθ sx -sinθ sy |
|
|
1685
|
+
// | sinθ sx cosθ sy |
|
|
1686
|
+
//
|
|
1687
|
+
// Remembering that tanθ = sinθ / cosθ; and that
|
|
1688
|
+
// `sx`, `sy`, or both might be zero.
|
|
1689
|
+
const theta =
|
|
1690
|
+
sx > Number.EPSILON
|
|
1691
|
+
? Math.atan2( m.elements[ 1 ], m.elements[ 0 ] )
|
|
1692
|
+
: Math.atan2( - m.elements[ 3 ], m.elements[ 4 ] );
|
|
1693
|
+
|
|
1694
|
+
curve.aRotation += theta;
|
|
1695
|
+
|
|
1696
|
+
if ( isTransformFlipped( m ) ) {
|
|
1697
|
+
|
|
1698
|
+
curve.aStartAngle *= -1;
|
|
1699
|
+
curve.aEndAngle *= -1;
|
|
1700
|
+
curve.aClockwise = !curve.aClockwise;
|
|
1701
|
+
|
|
1702
|
+
}
|
|
1703
|
+
|
|
1704
|
+
}
|
|
1591
1705
|
|
|
1592
1706
|
const subPaths = path.subPaths;
|
|
1593
1707
|
|
|
@@ -1620,19 +1734,24 @@ class SVGLoader extends Loader {
|
|
|
1620
1734
|
|
|
1621
1735
|
} else if ( curve.isEllipseCurve ) {
|
|
1622
1736
|
|
|
1623
|
-
|
|
1624
|
-
|
|
1625
|
-
console.warn( 'SVGLoader: Elliptic arc or ellipse rotation or skewing is not implemented.' );
|
|
1626
|
-
|
|
1627
|
-
}
|
|
1737
|
+
// Transform ellipse center point
|
|
1628
1738
|
|
|
1629
1739
|
tempV2.set( curve.aX, curve.aY );
|
|
1630
1740
|
transfVec2( tempV2 );
|
|
1631
1741
|
curve.aX = tempV2.x;
|
|
1632
1742
|
curve.aY = tempV2.y;
|
|
1633
1743
|
|
|
1634
|
-
|
|
1635
|
-
|
|
1744
|
+
// Transform ellipse shape parameters
|
|
1745
|
+
|
|
1746
|
+
if ( isTransformSkewed( m ) ) {
|
|
1747
|
+
|
|
1748
|
+
transfEllipseGeneric( curve );
|
|
1749
|
+
|
|
1750
|
+
} else {
|
|
1751
|
+
|
|
1752
|
+
transfEllipseNoSkew( curve );
|
|
1753
|
+
|
|
1754
|
+
}
|
|
1636
1755
|
|
|
1637
1756
|
}
|
|
1638
1757
|
|
|
@@ -1642,9 +1761,25 @@ class SVGLoader extends Loader {
|
|
|
1642
1761
|
|
|
1643
1762
|
}
|
|
1644
1763
|
|
|
1645
|
-
function
|
|
1764
|
+
function isTransformFlipped( m ) {
|
|
1765
|
+
|
|
1766
|
+
const te = m.elements;
|
|
1767
|
+
return te[ 0 ] * te[ 4 ] - te[ 1 ] * te[ 3 ] < 0;
|
|
1768
|
+
|
|
1769
|
+
}
|
|
1770
|
+
|
|
1771
|
+
function isTransformSkewed( m ) {
|
|
1772
|
+
|
|
1773
|
+
const te = m.elements;
|
|
1774
|
+
const basisDot = te[ 0 ] * te[ 3 ] + te[ 1 ] * te[ 4 ];
|
|
1775
|
+
|
|
1776
|
+
// Shortcut for trivial rotations and transformations
|
|
1777
|
+
if ( basisDot === 0 ) return false;
|
|
1778
|
+
|
|
1779
|
+
const sx = getTransformScaleX( m );
|
|
1780
|
+
const sy = getTransformScaleY( m );
|
|
1646
1781
|
|
|
1647
|
-
return
|
|
1782
|
+
return Math.abs( basisDot / ( sx * sy ) ) > Number.EPSILON;
|
|
1648
1783
|
|
|
1649
1784
|
}
|
|
1650
1785
|
|
|
@@ -1662,6 +1797,85 @@ class SVGLoader extends Loader {
|
|
|
1662
1797
|
|
|
1663
1798
|
}
|
|
1664
1799
|
|
|
1800
|
+
// Calculates the eigensystem of a real symmetric 2x2 matrix
|
|
1801
|
+
// [ A B ]
|
|
1802
|
+
// [ B C ]
|
|
1803
|
+
// in the form
|
|
1804
|
+
// [ A B ] = [ cs -sn ] [ rt1 0 ] [ cs sn ]
|
|
1805
|
+
// [ B C ] [ sn cs ] [ 0 rt2 ] [ -sn cs ]
|
|
1806
|
+
// where rt1 >= rt2.
|
|
1807
|
+
//
|
|
1808
|
+
// Adapted from: https://www.mpi-hd.mpg.de/personalhomes/globes/3x3/index.html
|
|
1809
|
+
// -> Algorithms for real symmetric matrices -> Analytical (2x2 symmetric)
|
|
1810
|
+
function eigenDecomposition( A, B, C ) {
|
|
1811
|
+
|
|
1812
|
+
let rt1, rt2, cs, sn, t;
|
|
1813
|
+
const sm = A + C;
|
|
1814
|
+
const df = A - C;
|
|
1815
|
+
const rt = Math.sqrt( df * df + 4 * B * B );
|
|
1816
|
+
|
|
1817
|
+
if ( sm > 0 ) {
|
|
1818
|
+
|
|
1819
|
+
rt1 = 0.5 * ( sm + rt );
|
|
1820
|
+
t = 1 / rt1;
|
|
1821
|
+
rt2 = A * t * C - B * t * B;
|
|
1822
|
+
|
|
1823
|
+
} else if ( sm < 0 ) {
|
|
1824
|
+
|
|
1825
|
+
rt2 = 0.5 * ( sm - rt );
|
|
1826
|
+
|
|
1827
|
+
} else {
|
|
1828
|
+
|
|
1829
|
+
// This case needs to be treated separately to avoid div by 0
|
|
1830
|
+
|
|
1831
|
+
rt1 = 0.5 * rt;
|
|
1832
|
+
rt2 = -0.5 * rt;
|
|
1833
|
+
|
|
1834
|
+
}
|
|
1835
|
+
|
|
1836
|
+
// Calculate eigenvectors
|
|
1837
|
+
|
|
1838
|
+
if ( df > 0 ) {
|
|
1839
|
+
|
|
1840
|
+
cs = df + rt;
|
|
1841
|
+
|
|
1842
|
+
} else {
|
|
1843
|
+
|
|
1844
|
+
cs = df - rt;
|
|
1845
|
+
|
|
1846
|
+
}
|
|
1847
|
+
|
|
1848
|
+
if ( Math.abs( cs ) > 2 * Math.abs( B ) ) {
|
|
1849
|
+
|
|
1850
|
+
t = -2 * B / cs;
|
|
1851
|
+
sn = 1 / Math.sqrt( 1 + t * t );
|
|
1852
|
+
cs = t * sn;
|
|
1853
|
+
|
|
1854
|
+
} else if ( Math.abs( B ) === 0 ) {
|
|
1855
|
+
|
|
1856
|
+
cs = 1;
|
|
1857
|
+
sn = 0;
|
|
1858
|
+
|
|
1859
|
+
} else {
|
|
1860
|
+
|
|
1861
|
+
t = -0.5 * cs / B;
|
|
1862
|
+
cs = 1 / Math.sqrt( 1 + t * t );
|
|
1863
|
+
sn = t * cs;
|
|
1864
|
+
|
|
1865
|
+
}
|
|
1866
|
+
|
|
1867
|
+
if ( df > 0 ) {
|
|
1868
|
+
|
|
1869
|
+
t = cs;
|
|
1870
|
+
cs = -sn;
|
|
1871
|
+
sn = t;
|
|
1872
|
+
|
|
1873
|
+
}
|
|
1874
|
+
|
|
1875
|
+
return { rt1, rt2, cs, sn };
|
|
1876
|
+
|
|
1877
|
+
}
|
|
1878
|
+
|
|
1665
1879
|
//
|
|
1666
1880
|
|
|
1667
1881
|
const paths = [];
|
|
@@ -2106,7 +2320,7 @@ class SVGLoader extends Loader {
|
|
|
2106
2320
|
simplePaths = simplePaths.filter( sp => sp.points.length > 1 );
|
|
2107
2321
|
|
|
2108
2322
|
// check if path is solid or a hole
|
|
2109
|
-
const isAHole = simplePaths.map( p => isHoleTo( p, simplePaths, scanlineMinX, scanlineMaxX, shapePath.userData
|
|
2323
|
+
const isAHole = simplePaths.map( p => isHoleTo( p, simplePaths, scanlineMinX, scanlineMaxX, shapePath.userData?.style.fillRule ) );
|
|
2110
2324
|
|
|
2111
2325
|
|
|
2112
2326
|
const shapesToReturn = [];
|
|
@@ -2312,7 +2526,7 @@ class SVGLoader extends Loader {
|
|
|
2312
2526
|
const dot = Math.abs( normal1.dot( tempV2_3 ) );
|
|
2313
2527
|
|
|
2314
2528
|
// If path is straight, don't create join
|
|
2315
|
-
if ( dot
|
|
2529
|
+
if ( dot > Number.EPSILON ) {
|
|
2316
2530
|
|
|
2317
2531
|
// Compute inner and outer segment intersections
|
|
2318
2532
|
const miterSide = strokeWidth2 / dot;
|