@needle-tools/three 0.145.4 → 0.146.2
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 +1 -1
- package/build/three.cjs +32586 -35951
- package/build/three.js +32600 -35965
- package/build/three.min.js +6 -7
- package/build/three.module.js +1547 -1154
- package/examples/js/animation/AnimationClipCreator.js +0 -8
- package/examples/js/animation/CCDIKSolver.js +49 -66
- package/examples/js/animation/MMDAnimationHelper.js +66 -137
- package/examples/js/animation/MMDPhysics.js +70 -134
- package/examples/js/cameras/CinematicCamera.js +33 -22
- package/examples/js/controls/ArcballControls.js +138 -405
- package/examples/js/controls/DragControls.js +8 -33
- package/examples/js/controls/FirstPersonControls.js +32 -54
- package/examples/js/controls/FlyControls.js +29 -55
- package/examples/js/controls/OrbitControls.js +85 -95
- package/examples/js/controls/PointerLockControls.js +5 -14
- package/examples/js/controls/TrackballControls.js +33 -86
- package/examples/js/controls/TransformControls.js +84 -169
- 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 +4 -18
- package/examples/js/effects/AsciiEffect.js +32 -31
- package/examples/js/effects/OutlineEffect.js +26 -30
- package/examples/js/effects/ParallaxBarrierEffect.js +0 -13
- package/examples/js/effects/PeppersGhostEffect.js +12 -39
- package/examples/js/effects/StereoEffect.js +0 -4
- package/examples/js/environments/RoomEnvironment.js +12 -10
- package/examples/js/exporters/ColladaExporter.js +48 -65
- package/examples/js/exporters/DRACOExporter.js +22 -22
- package/examples/js/exporters/EXRExporter.js +15 -18
- package/examples/js/exporters/GLTFExporter.js +143 -261
- package/examples/js/exporters/MMDExporter.js +5 -12
- package/examples/js/exporters/OBJExporter.js +42 -33
- package/examples/js/exporters/PLYExporter.js +38 -33
- package/examples/js/exporters/STLExporter.js +5 -7
- package/examples/js/exporters/USDZExporter.js +110 -25
- package/examples/js/geometries/BoxLineGeometry.js +0 -1
- package/examples/js/geometries/ConvexGeometry.js +11 -6
- 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 +25 -12
- 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 +22 -33
- package/examples/js/interactive/InteractiveGroup.js +6 -12
- package/examples/js/interactive/SelectionBox.js +3 -70
- package/examples/js/interactive/SelectionHelper.js +0 -8
- 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 +38 -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 +201 -359
- package/examples/js/loaders/DDSLoader.js +24 -25
- package/examples/js/loaders/DRACOLoader.js +29 -66
- package/examples/js/loaders/EXRLoader.js +67 -164
- package/examples/js/loaders/FBXLoader.js +286 -441
- package/examples/js/loaders/FontLoader.js +6 -15
- package/examples/js/loaders/GCodeLoader.js +15 -16
- package/examples/js/loaders/GLTFLoader.js +354 -405
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -6
- package/examples/js/loaders/KMZLoader.js +3 -7
- package/examples/js/loaders/KTXLoader.js +12 -30
- package/examples/js/loaders/LDrawLoader.js +178 -289
- 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/MaterialXLoader.js +392 -0
- package/examples/js/loaders/NRRDLoader.js +44 -84
- package/examples/js/loaders/OBJLoader.js +50 -65
- package/examples/js/loaders/PCDLoader.js +34 -29
- package/examples/js/loaders/PDBLoader.js +17 -13
- package/examples/js/loaders/PLYLoader.js +9 -39
- 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 +361 -233
- package/examples/js/loaders/TDSLoader.js +81 -118
- package/examples/js/loaders/TGALoader.js +39 -41
- package/examples/js/loaders/TIFFLoader.js +0 -1
- 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 +243 -340
- package/examples/js/loaders/VTKLoader.js +101 -118
- package/examples/js/loaders/XYZLoader.js +2 -4
- package/examples/js/loaders/lwo/IFFParser.js +55 -136
- package/examples/js/loaders/lwo/LWO2Parser.js +32 -83
- package/examples/js/loaders/lwo/LWO3Parser.js +31 -73
- package/examples/js/materials/MeshGouraudMaterial.js +15 -13
- package/examples/js/math/Capsule.js +0 -17
- package/examples/js/math/ColorConverter.js +3 -3
- package/examples/js/math/ConvexHull.js +183 -139
- 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 +14 -18
- 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 +16 -45
- package/examples/js/misc/VolumeSlice.js +14 -24
- package/examples/js/modifiers/CurveModifier.js +19 -21
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -30
- package/examples/js/modifiers/SimplifyModifier.js +56 -59
- package/examples/js/modifiers/TessellateModifier.js +2 -9
- package/examples/js/objects/GroundProjectedEnv.js +2 -14
- 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 +22 -20
- package/examples/js/objects/ReflectorForSSRPass.js +19 -23
- package/examples/js/objects/Refractor.js +52 -30
- package/examples/js/objects/ShadowMesh.js +1 -2
- 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 +45 -36
- package/examples/js/postprocessing/Pass.js +11 -14
- package/examples/js/postprocessing/RenderPass.js +3 -7
- 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 +2 -21
- package/examples/js/renderers/CSS3DRenderer.js +3 -24
- package/examples/js/renderers/Projector.js +29 -85
- 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 +3 -6
- package/examples/js/shaders/MMDToonShader.js +2 -6
- 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 +3 -6
- 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 +234 -168
- 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 +13 -18
- package/examples/js/utils/LDrawUtils.js +8 -11
- package/examples/js/utils/PackedPhongMaterial.js +6 -4
- package/examples/js/utils/SceneUtils.js +117 -6
- 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 +1 -1
- package/examples/jsm/capabilities/WebGPU.js +3 -1
- package/examples/jsm/controls/OrbitControls.js +44 -4
- package/examples/jsm/exporters/GLTFExporter.js +17 -131
- package/examples/jsm/exporters/USDZExporter.js +75 -19
- package/examples/jsm/interactive/HTMLMesh.js +2 -0
- package/examples/jsm/libs/lottie_canvas.module.js +14844 -0
- package/examples/jsm/loaders/3DMLoader.js +1 -2
- package/examples/jsm/loaders/ColladaLoader.js +28 -0
- package/examples/jsm/loaders/FBXLoader.js +16 -2
- package/examples/jsm/loaders/GLTFLoader.js +204 -377
- package/examples/jsm/loaders/KTX2Loader.js +68 -29
- package/examples/jsm/loaders/LDrawLoader.js +14 -13
- package/examples/jsm/loaders/LottieLoader.js +4 -2
- package/examples/jsm/loaders/MaterialXLoader.js +728 -0
- package/examples/jsm/loaders/PCDLoader.js +1 -1
- package/examples/jsm/loaders/PLYLoader.js +68 -16
- package/examples/jsm/loaders/SVGLoader.js +227 -14
- package/examples/jsm/loaders/USDZLoader.js +31 -16
- package/examples/jsm/nodes/Nodes.js +14 -2
- package/examples/jsm/nodes/accessors/Object3DNode.js +1 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +6 -0
- package/examples/jsm/nodes/accessors/ReferenceNode.js +1 -1
- package/examples/jsm/nodes/accessors/SkinningNode.js +1 -1
- package/examples/jsm/nodes/core/Node.js +1 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +36 -4
- package/examples/jsm/nodes/core/NodeFrame.js +2 -2
- package/examples/jsm/nodes/core/NodeVarying.js +7 -4
- package/examples/jsm/nodes/core/VaryingNode.js +6 -4
- package/examples/jsm/nodes/core/constants.js +13 -13
- package/examples/jsm/nodes/display/PosterizeNode.js +25 -0
- package/examples/jsm/nodes/display/ViewportNode.js +106 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +1 -1
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +1 -1
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +3 -1
- package/examples/jsm/nodes/materials/Materials.js +9 -7
- package/examples/jsm/nodes/materials/NodeMaterial.js +9 -1
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +6 -2
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +18 -0
- package/examples/jsm/nodes/math/MathNode.js +5 -0
- package/examples/jsm/nodes/math/OperatorNode.js +6 -1
- package/examples/jsm/nodes/shadernode/ShaderNode.js +26 -13
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +2 -0
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +18 -0
- package/examples/jsm/nodes/utils/EquirectUVNode.js +27 -0
- package/examples/jsm/nodes/utils/JoinNode.js +8 -2
- package/examples/jsm/nodes/utils/MatcapUVNode.js +2 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +1 -1
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +8 -10
- package/examples/jsm/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +51 -0
- 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 +10 -0
- 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/webgl/nodes/WebGLNodeBuilder.js +39 -16
- 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 +36 -7
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +47 -12
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +35 -5
- package/examples/jsm/shaders/MMDToonShader.js +0 -2
- package/examples/jsm/shaders/VelocityShader.js +128 -0
- package/examples/jsm/utils/BufferGeometryUtils.js +130 -6
- package/examples/jsm/utils/SceneUtils.js +129 -4
- package/examples/jsm/utils/TextureUtils.js +85 -0
- package/examples/jsm/webxr/OculusHandModel.js +1 -1
- package/examples/jsm/webxr/XRHandMeshModel.js +6 -3
- package/package.json +11 -12
- package/src/Three.js +1 -0
- package/src/audio/AudioContext.js +5 -5
- package/src/cameras/CubeCamera.js +14 -14
- package/src/constants.js +1 -1
- package/src/core/InstancedBufferGeometry.js +1 -7
- package/src/extras/Earcut.js +67 -67
- package/src/helpers/DirectionalLightHelper.js +5 -1
- package/src/helpers/HemisphereLightHelper.js +4 -1
- package/src/helpers/PointLightHelper.js +2 -1
- package/src/helpers/SpotLightHelper.js +4 -2
- package/src/lights/PointLight.js +2 -2
- package/src/lights/SpotLight.js +2 -2
- package/src/loaders/FileLoader.js +4 -1
- package/src/loaders/ObjectLoader.js +5 -1
- package/src/materials/Material.js +1 -1
- package/src/math/Color.js +5 -5
- package/src/math/Matrix3.js +53 -18
- package/src/math/Ray.js +2 -5
- package/src/math/Sphere.js +19 -26
- 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 +36 -62
- package/src/renderers/shaders/ShaderChunk/envmap_fragment.glsl.js +0 -4
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_phong_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/lights_toon_pars_fragment.glsl.js +0 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +8 -0
- package/src/renderers/shaders/ShaderChunk.js +3 -0
- 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.js +20 -6
- package/src/renderers/shaders/UniformsLib.js +1 -1
- package/src/renderers/shaders/UniformsUtils.js +15 -0
- package/src/renderers/webgl/WebGLAttributes.js +2 -0
- package/src/renderers/webgl/WebGLBackground.js +15 -7
- package/src/renderers/webgl/WebGLLights.js +0 -4
- package/src/renderers/webgl/WebGLMaterials.js +2 -1
- package/src/renderers/webgl/WebGLShadowMap.js +3 -1
- package/src/renderers/webgl/WebGLState.js +31 -1
- package/src/renderers/webgl/WebGLTextures.js +71 -18
- package/src/renderers/webgl/WebGLUniforms.js +116 -20
- package/src/renderers/webgl/WebGLUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +46 -13
- package/src/renderers/webxr/WebXRManager.js +85 -3
- package/src/scenes/Scene.js +8 -0
- package/src/textures/CompressedArrayTexture.js +18 -0
- package/examples/js/libs/lottie_canvas.js +0 -12751
- package/examples/js/shaders/PixelShader.js +0 -51
- package/examples/jsm/shaders/PixelShader.js +0 -44
|
@@ -1,26 +1,20 @@
|
|
|
1
1
|
( function () {
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
3
|
+
// o object_name | g group_name
|
|
4
|
+
const _object_pattern = /^[og]\s*(.+)?/;
|
|
5
|
+
// mtllib file_reference
|
|
6
|
+
const _material_library_pattern = /^mtllib /;
|
|
7
|
+
// usemtl material_name
|
|
8
|
+
const _material_use_pattern = /^usemtl /;
|
|
9
|
+
// usemap map_name
|
|
9
10
|
const _map_use_pattern = /^usemap /;
|
|
10
11
|
const _face_vertex_data_separator_pattern = /\s+/;
|
|
11
|
-
|
|
12
12
|
const _vA = new THREE.Vector3();
|
|
13
|
-
|
|
14
13
|
const _vB = new THREE.Vector3();
|
|
15
|
-
|
|
16
14
|
const _vC = new THREE.Vector3();
|
|
17
|
-
|
|
18
15
|
const _ab = new THREE.Vector3();
|
|
19
|
-
|
|
20
16
|
const _cb = new THREE.Vector3();
|
|
21
|
-
|
|
22
17
|
const _color = new THREE.Color();
|
|
23
|
-
|
|
24
18
|
function ParserState() {
|
|
25
19
|
|
|
26
20
|
const state = {
|
|
@@ -45,7 +39,6 @@
|
|
|
45
39
|
}
|
|
46
40
|
|
|
47
41
|
const previousMaterial = this.object && typeof this.object.currentMaterial === 'function' ? this.object.currentMaterial() : undefined;
|
|
48
|
-
|
|
49
42
|
if ( this.object && typeof this.object._finalize === 'function' ) {
|
|
50
43
|
|
|
51
44
|
this.object._finalize( true );
|
|
@@ -66,10 +59,10 @@
|
|
|
66
59
|
smooth: true,
|
|
67
60
|
startMaterial: function ( name, libraries ) {
|
|
68
61
|
|
|
69
|
-
const previous = this._finalize( false );
|
|
70
|
-
// after the material, then it must be preserved for proper MultiMaterial continuation.
|
|
71
|
-
|
|
62
|
+
const previous = this._finalize( false );
|
|
72
63
|
|
|
64
|
+
// New usemtl declaration overwrites an inherited material, except if faces were declared
|
|
65
|
+
// after the material, then it must be preserved for proper MultiMaterial continuation.
|
|
73
66
|
if ( previous && ( previous.inherited || previous.groupCount <= 0 ) ) {
|
|
74
67
|
|
|
75
68
|
this.materials.splice( previous.index, 1 );
|
|
@@ -120,16 +113,15 @@
|
|
|
120
113
|
_finalize: function ( end ) {
|
|
121
114
|
|
|
122
115
|
const lastMultiMaterial = this.currentMaterial();
|
|
123
|
-
|
|
124
116
|
if ( lastMultiMaterial && lastMultiMaterial.groupEnd === - 1 ) {
|
|
125
117
|
|
|
126
118
|
lastMultiMaterial.groupEnd = this.geometry.vertices.length / 3;
|
|
127
119
|
lastMultiMaterial.groupCount = lastMultiMaterial.groupEnd - lastMultiMaterial.groupStart;
|
|
128
120
|
lastMultiMaterial.inherited = false;
|
|
129
121
|
|
|
130
|
-
}
|
|
131
|
-
|
|
122
|
+
}
|
|
132
123
|
|
|
124
|
+
// Ignore objects tail materials if no face declarations followed them before a new o/g started.
|
|
133
125
|
if ( end && this.materials.length > 1 ) {
|
|
134
126
|
|
|
135
127
|
for ( let mi = this.materials.length - 1; mi >= 0; mi -- ) {
|
|
@@ -142,9 +134,9 @@
|
|
|
142
134
|
|
|
143
135
|
}
|
|
144
136
|
|
|
145
|
-
}
|
|
146
|
-
|
|
137
|
+
}
|
|
147
138
|
|
|
139
|
+
// Guarantee at least one empty material, this makes the creation later more straight forward.
|
|
148
140
|
if ( end && this.materials.length === 0 ) {
|
|
149
141
|
|
|
150
142
|
this.materials.push( {
|
|
@@ -157,7 +149,9 @@
|
|
|
157
149
|
return lastMultiMaterial;
|
|
158
150
|
|
|
159
151
|
}
|
|
160
|
-
};
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
// Inherit previous objects material.
|
|
161
155
|
// Spec tells us that a declared material must be set to all objects until a new material is declared.
|
|
162
156
|
// If a usemtl declaration is encountered while this new object is being parsed, it will
|
|
163
157
|
// overwrite the inherited material. Exception being that there was already face declarations
|
|
@@ -237,21 +231,13 @@
|
|
|
237
231
|
|
|
238
232
|
const src = this.vertices;
|
|
239
233
|
const dst = this.object.geometry.normals;
|
|
240
|
-
|
|
241
234
|
_vA.fromArray( src, a );
|
|
242
|
-
|
|
243
235
|
_vB.fromArray( src, b );
|
|
244
|
-
|
|
245
236
|
_vC.fromArray( src, c );
|
|
246
|
-
|
|
247
237
|
_cb.subVectors( _vC, _vB );
|
|
248
|
-
|
|
249
238
|
_ab.subVectors( _vA, _vB );
|
|
250
|
-
|
|
251
239
|
_cb.cross( _ab );
|
|
252
|
-
|
|
253
240
|
_cb.normalize();
|
|
254
|
-
|
|
255
241
|
dst.push( _cb.x, _cb.y, _cb.z );
|
|
256
242
|
dst.push( _cb.x, _cb.y, _cb.z );
|
|
257
243
|
dst.push( _cb.x, _cb.y, _cb.z );
|
|
@@ -297,7 +283,9 @@
|
|
|
297
283
|
let ib = this.parseVertexIndex( b, vLen );
|
|
298
284
|
let ic = this.parseVertexIndex( c, vLen );
|
|
299
285
|
this.addVertex( ia, ib, ic );
|
|
300
|
-
this.addColor( ia, ib, ic );
|
|
286
|
+
this.addColor( ia, ib, ic );
|
|
287
|
+
|
|
288
|
+
// normals
|
|
301
289
|
|
|
302
290
|
if ( na !== undefined && na !== '' ) {
|
|
303
291
|
|
|
@@ -311,8 +299,9 @@
|
|
|
311
299
|
|
|
312
300
|
this.addFaceNormal( ia, ib, ic );
|
|
313
301
|
|
|
314
|
-
}
|
|
302
|
+
}
|
|
315
303
|
|
|
304
|
+
// uvs
|
|
316
305
|
|
|
317
306
|
if ( ua !== undefined && ua !== '' ) {
|
|
318
307
|
|
|
@@ -326,6 +315,7 @@
|
|
|
326
315
|
} else {
|
|
327
316
|
|
|
328
317
|
// add placeholder values (for inconsistent face definitions)
|
|
318
|
+
|
|
329
319
|
this.addDefaultUV();
|
|
330
320
|
|
|
331
321
|
}
|
|
@@ -335,7 +325,6 @@
|
|
|
335
325
|
|
|
336
326
|
this.object.geometry.type = 'Points';
|
|
337
327
|
const vLen = this.vertices.length;
|
|
338
|
-
|
|
339
328
|
for ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {
|
|
340
329
|
|
|
341
330
|
const index = this.parseVertexIndex( vertices[ vi ], vLen );
|
|
@@ -350,7 +339,6 @@
|
|
|
350
339
|
this.object.geometry.type = 'Line';
|
|
351
340
|
const vLen = this.vertices.length;
|
|
352
341
|
const uvLen = this.uvs.length;
|
|
353
|
-
|
|
354
342
|
for ( let vi = 0, l = vertices.length; vi < l; vi ++ ) {
|
|
355
343
|
|
|
356
344
|
this.addVertexLine( this.parseVertexIndex( vertices[ vi ], vLen ) );
|
|
@@ -368,8 +356,9 @@
|
|
|
368
356
|
state.startObject( '', false );
|
|
369
357
|
return state;
|
|
370
358
|
|
|
371
|
-
}
|
|
359
|
+
}
|
|
372
360
|
|
|
361
|
+
//
|
|
373
362
|
|
|
374
363
|
class OBJLoader extends THREE.Loader {
|
|
375
364
|
|
|
@@ -379,7 +368,6 @@
|
|
|
379
368
|
this.materials = null;
|
|
380
369
|
|
|
381
370
|
}
|
|
382
|
-
|
|
383
371
|
load( url, onLoad, onProgress, onError ) {
|
|
384
372
|
|
|
385
373
|
const scope = this;
|
|
@@ -412,18 +400,15 @@
|
|
|
412
400
|
}, onProgress, onError );
|
|
413
401
|
|
|
414
402
|
}
|
|
415
|
-
|
|
416
403
|
setMaterials( materials ) {
|
|
417
404
|
|
|
418
405
|
this.materials = materials;
|
|
419
406
|
return this;
|
|
420
407
|
|
|
421
408
|
}
|
|
422
|
-
|
|
423
409
|
parse( text ) {
|
|
424
410
|
|
|
425
411
|
const state = new ParserState();
|
|
426
|
-
|
|
427
412
|
if ( text.indexOf( '\r\n' ) !== - 1 ) {
|
|
428
413
|
|
|
429
414
|
// This is faster than String.split with regex that splits on both
|
|
@@ -440,43 +425,38 @@
|
|
|
440
425
|
|
|
441
426
|
const lines = text.split( '\n' );
|
|
442
427
|
let result = [];
|
|
443
|
-
|
|
444
428
|
for ( let i = 0, l = lines.length; i < l; i ++ ) {
|
|
445
429
|
|
|
446
430
|
const line = lines[ i ].trimStart();
|
|
447
431
|
if ( line.length === 0 ) continue;
|
|
448
|
-
const lineFirstChar = line.charAt( 0 );
|
|
432
|
+
const lineFirstChar = line.charAt( 0 );
|
|
449
433
|
|
|
434
|
+
// @todo invoke passed in handler if any
|
|
450
435
|
if ( lineFirstChar === '#' ) continue;
|
|
451
|
-
|
|
452
436
|
if ( lineFirstChar === 'v' ) {
|
|
453
437
|
|
|
454
438
|
const data = line.split( _face_vertex_data_separator_pattern );
|
|
455
|
-
|
|
456
439
|
switch ( data[ 0 ] ) {
|
|
457
440
|
|
|
458
441
|
case 'v':
|
|
459
442
|
state.vertices.push( parseFloat( data[ 1 ] ), parseFloat( data[ 2 ] ), parseFloat( data[ 3 ] ) );
|
|
460
|
-
|
|
461
443
|
if ( data.length >= 7 ) {
|
|
462
444
|
|
|
463
445
|
_color.setRGB( parseFloat( data[ 4 ] ), parseFloat( data[ 5 ] ), parseFloat( data[ 6 ] ) ).convertSRGBToLinear();
|
|
464
|
-
|
|
465
446
|
state.colors.push( _color.r, _color.g, _color.b );
|
|
466
447
|
|
|
467
448
|
} else {
|
|
468
449
|
|
|
469
450
|
// if no colors are defined, add placeholders so color and vertex indices match
|
|
451
|
+
|
|
470
452
|
state.colors.push( undefined, undefined, undefined );
|
|
471
453
|
|
|
472
454
|
}
|
|
473
455
|
|
|
474
456
|
break;
|
|
475
|
-
|
|
476
457
|
case 'vn':
|
|
477
458
|
state.normals.push( parseFloat( data[ 1 ] ), parseFloat( data[ 2 ] ), parseFloat( data[ 3 ] ) );
|
|
478
459
|
break;
|
|
479
|
-
|
|
480
460
|
case 'vt':
|
|
481
461
|
state.uvs.push( parseFloat( data[ 1 ] ), parseFloat( data[ 2 ] ) );
|
|
482
462
|
break;
|
|
@@ -487,12 +467,13 @@
|
|
|
487
467
|
|
|
488
468
|
const lineData = line.slice( 1 ).trim();
|
|
489
469
|
const vertexData = lineData.split( _face_vertex_data_separator_pattern );
|
|
490
|
-
const faceVertices = [];
|
|
470
|
+
const faceVertices = [];
|
|
471
|
+
|
|
472
|
+
// Parse the face vertex data into an easy to work with format
|
|
491
473
|
|
|
492
474
|
for ( let j = 0, jl = vertexData.length; j < jl; j ++ ) {
|
|
493
475
|
|
|
494
476
|
const vertex = vertexData[ j ];
|
|
495
|
-
|
|
496
477
|
if ( vertex.length > 0 ) {
|
|
497
478
|
|
|
498
479
|
const vertexParts = vertex.split( '/' );
|
|
@@ -500,11 +481,11 @@
|
|
|
500
481
|
|
|
501
482
|
}
|
|
502
483
|
|
|
503
|
-
}
|
|
484
|
+
}
|
|
504
485
|
|
|
486
|
+
// Draw an edge between the first vertex and all subsequent vertices to form an n-gon
|
|
505
487
|
|
|
506
488
|
const v1 = faceVertices[ 0 ];
|
|
507
|
-
|
|
508
489
|
for ( let j = 1, jl = faceVertices.length - 1; j < jl; j ++ ) {
|
|
509
490
|
|
|
510
491
|
const v2 = faceVertices[ j ];
|
|
@@ -518,7 +499,6 @@
|
|
|
518
499
|
const lineParts = line.substring( 1 ).trim().split( ' ' );
|
|
519
500
|
let lineVertices = [];
|
|
520
501
|
const lineUVs = [];
|
|
521
|
-
|
|
522
502
|
if ( line.indexOf( '/' ) === - 1 ) {
|
|
523
503
|
|
|
524
504
|
lineVertices = lineParts;
|
|
@@ -548,6 +528,7 @@
|
|
|
548
528
|
// o object_name
|
|
549
529
|
// or
|
|
550
530
|
// g group_name
|
|
531
|
+
|
|
551
532
|
// WORKAROUND: https://bugs.chromium.org/p/v8/issues/detail?id=2869
|
|
552
533
|
// let name = result[ 0 ].slice( 1 ).trim();
|
|
553
534
|
const name = ( ' ' + result[ 0 ].slice( 1 ).trim() ).slice( 1 );
|
|
@@ -556,22 +537,28 @@
|
|
|
556
537
|
} else if ( _material_use_pattern.test( line ) ) {
|
|
557
538
|
|
|
558
539
|
// material
|
|
540
|
+
|
|
559
541
|
state.object.startMaterial( line.substring( 7 ).trim(), state.materialLibraries );
|
|
560
542
|
|
|
561
543
|
} else if ( _material_library_pattern.test( line ) ) {
|
|
562
544
|
|
|
563
545
|
// mtl file
|
|
546
|
+
|
|
564
547
|
state.materialLibraries.push( line.substring( 7 ).trim() );
|
|
565
548
|
|
|
566
549
|
} else if ( _map_use_pattern.test( line ) ) {
|
|
567
550
|
|
|
568
551
|
// the line is parsed but ignored since the loader assumes textures are defined MTL files
|
|
569
552
|
// (according to https://www.okino.com/conv/imp_wave.htm, 'usemap' is the old-style Wavefront texture reference method)
|
|
553
|
+
|
|
570
554
|
console.warn( 'THREE.OBJLoader: Rendering identifier "usemap" not supported. Textures must be defined in MTL files.' );
|
|
571
555
|
|
|
572
556
|
} else if ( lineFirstChar === 's' ) {
|
|
573
557
|
|
|
574
|
-
result = line.split( ' ' );
|
|
558
|
+
result = line.split( ' ' );
|
|
559
|
+
|
|
560
|
+
// smooth shading
|
|
561
|
+
|
|
575
562
|
// @todo Handle files that have varying smooth values for a set of faces inside one geometry,
|
|
576
563
|
// but does not define a usemtl for each face set.
|
|
577
564
|
// This should be detected and a dummy material created (later MultiMaterial and geometry groups).
|
|
@@ -588,7 +575,6 @@
|
|
|
588
575
|
* surfaces, smoothing groups are either turned on or off; there is no difference between values greater
|
|
589
576
|
* than 0."
|
|
590
577
|
*/
|
|
591
|
-
|
|
592
578
|
if ( result.length > 1 ) {
|
|
593
579
|
|
|
594
580
|
const value = result[ 1 ].trim().toLowerCase();
|
|
@@ -618,7 +604,6 @@
|
|
|
618
604
|
const container = new THREE.Group();
|
|
619
605
|
container.materialLibraries = [].concat( state.materialLibraries );
|
|
620
606
|
const hasPrimitives = ! ( state.objects.length === 1 && state.objects[ 0 ].geometry.vertices.length === 0 );
|
|
621
|
-
|
|
622
607
|
if ( hasPrimitives === true ) {
|
|
623
608
|
|
|
624
609
|
for ( let i = 0, l = state.objects.length; i < l; i ++ ) {
|
|
@@ -628,12 +613,12 @@
|
|
|
628
613
|
const materials = object.materials;
|
|
629
614
|
const isLine = geometry.type === 'Line';
|
|
630
615
|
const isPoints = geometry.type === 'Points';
|
|
631
|
-
let hasVertexColors = false;
|
|
616
|
+
let hasVertexColors = false;
|
|
632
617
|
|
|
618
|
+
// Skip o/g line declarations that did not follow with any faces
|
|
633
619
|
if ( geometry.vertices.length === 0 ) continue;
|
|
634
620
|
const buffergeometry = new THREE.BufferGeometry();
|
|
635
621
|
buffergeometry.setAttribute( 'position', new THREE.Float32BufferAttribute( geometry.vertices, 3 ) );
|
|
636
|
-
|
|
637
622
|
if ( geometry.normals.length > 0 ) {
|
|
638
623
|
|
|
639
624
|
buffergeometry.setAttribute( 'normal', new THREE.Float32BufferAttribute( geometry.normals, 3 ) );
|
|
@@ -651,21 +636,21 @@
|
|
|
651
636
|
|
|
652
637
|
buffergeometry.setAttribute( 'uv', new THREE.Float32BufferAttribute( geometry.uvs, 2 ) );
|
|
653
638
|
|
|
654
|
-
}
|
|
639
|
+
}
|
|
655
640
|
|
|
641
|
+
// Create materials
|
|
656
642
|
|
|
657
643
|
const createdMaterials = [];
|
|
658
|
-
|
|
659
644
|
for ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {
|
|
660
645
|
|
|
661
646
|
const sourceMaterial = materials[ mi ];
|
|
662
647
|
const materialHash = sourceMaterial.name + '_' + sourceMaterial.smooth + '_' + hasVertexColors;
|
|
663
648
|
let material = state.materials[ materialHash ];
|
|
664
|
-
|
|
665
649
|
if ( this.materials !== null ) {
|
|
666
650
|
|
|
667
|
-
material = this.materials.create( sourceMaterial.name );
|
|
651
|
+
material = this.materials.create( sourceMaterial.name );
|
|
668
652
|
|
|
653
|
+
// mtl etc. loaders probably can't create line materials correctly, copy properties to a line material.
|
|
669
654
|
if ( isLine && material && ! ( material instanceof THREE.LineBasicMaterial ) ) {
|
|
670
655
|
|
|
671
656
|
const materialLine = new THREE.LineBasicMaterial();
|
|
@@ -716,11 +701,11 @@
|
|
|
716
701
|
|
|
717
702
|
createdMaterials.push( material );
|
|
718
703
|
|
|
719
|
-
}
|
|
704
|
+
}
|
|
720
705
|
|
|
706
|
+
// Create mesh
|
|
721
707
|
|
|
722
708
|
let mesh;
|
|
723
|
-
|
|
724
709
|
if ( createdMaterials.length > 1 ) {
|
|
725
710
|
|
|
726
711
|
for ( let mi = 0, miLen = materials.length; mi < miLen; mi ++ ) {
|
|
@@ -770,6 +755,7 @@
|
|
|
770
755
|
} else {
|
|
771
756
|
|
|
772
757
|
// if there is only the default parser state object with no geometry data, interpret data as point cloud
|
|
758
|
+
|
|
773
759
|
if ( state.vertices.length > 0 ) {
|
|
774
760
|
|
|
775
761
|
const material = new THREE.PointsMaterial( {
|
|
@@ -778,7 +764,6 @@
|
|
|
778
764
|
} );
|
|
779
765
|
const buffergeometry = new THREE.BufferGeometry();
|
|
780
766
|
buffergeometry.setAttribute( 'position', new THREE.Float32BufferAttribute( state.vertices, 3 ) );
|
|
781
|
-
|
|
782
767
|
if ( state.colors.length > 0 && state.colors[ 0 ] !== undefined ) {
|
|
783
768
|
|
|
784
769
|
buffergeometry.setAttribute( 'color', new THREE.Float32BufferAttribute( state.colors, 3 ) );
|
|
@@ -8,7 +8,6 @@
|
|
|
8
8
|
this.littleEndian = true;
|
|
9
9
|
|
|
10
10
|
}
|
|
11
|
-
|
|
12
11
|
load( url, onLoad, onProgress, onError ) {
|
|
13
12
|
|
|
14
13
|
const scope = this;
|
|
@@ -42,10 +41,10 @@
|
|
|
42
41
|
}, onProgress, onError );
|
|
43
42
|
|
|
44
43
|
}
|
|
45
|
-
|
|
46
44
|
parse( data ) {
|
|
47
45
|
|
|
48
46
|
// from https://gitlab.com/taketwo/three-pcd-loader/blob/master/decompress-lzf.js
|
|
47
|
+
|
|
49
48
|
function decompressLZF( inData, outLength ) {
|
|
50
49
|
|
|
51
50
|
const inLength = inData.length;
|
|
@@ -55,17 +54,14 @@
|
|
|
55
54
|
let ctrl;
|
|
56
55
|
let len;
|
|
57
56
|
let ref;
|
|
58
|
-
|
|
59
57
|
do {
|
|
60
58
|
|
|
61
59
|
ctrl = inData[ inPtr ++ ];
|
|
62
|
-
|
|
63
60
|
if ( ctrl < 1 << 5 ) {
|
|
64
61
|
|
|
65
62
|
ctrl ++;
|
|
66
63
|
if ( outPtr + ctrl > outLength ) throw new Error( 'Output buffer is not large enough' );
|
|
67
64
|
if ( inPtr + ctrl > inLength ) throw new Error( 'Invalid compressed data' );
|
|
68
|
-
|
|
69
65
|
do {
|
|
70
66
|
|
|
71
67
|
outData[ outPtr ++ ] = inData[ inPtr ++ ];
|
|
@@ -77,7 +73,6 @@
|
|
|
77
73
|
len = ctrl >> 5;
|
|
78
74
|
ref = outPtr - ( ( ctrl & 0x1f ) << 8 ) - 1;
|
|
79
75
|
if ( inPtr >= inLength ) throw new Error( 'Invalid compressed data' );
|
|
80
|
-
|
|
81
76
|
if ( len === 7 ) {
|
|
82
77
|
|
|
83
78
|
len += inData[ inPtr ++ ];
|
|
@@ -89,7 +84,6 @@
|
|
|
89
84
|
if ( outPtr + len + 2 > outLength ) throw new Error( 'Output buffer is not large enough' );
|
|
90
85
|
if ( ref < 0 ) throw new Error( 'Invalid compressed data' );
|
|
91
86
|
if ( ref >= outPtr ) throw new Error( 'Invalid compressed data' );
|
|
92
|
-
|
|
93
87
|
do {
|
|
94
88
|
|
|
95
89
|
outData[ outPtr ++ ] = outData[ ref ++ ];
|
|
@@ -111,9 +105,13 @@
|
|
|
111
105
|
const result2 = /[\r\n]DATA\s(\S*)\s/i.exec( data.slice( result1 - 1 ) );
|
|
112
106
|
PCDheader.data = result2[ 1 ];
|
|
113
107
|
PCDheader.headerLen = result2[ 0 ].length + result1;
|
|
114
|
-
PCDheader.str = data.slice( 0, PCDheader.headerLen );
|
|
108
|
+
PCDheader.str = data.slice( 0, PCDheader.headerLen );
|
|
115
109
|
|
|
116
|
-
|
|
110
|
+
// remove comments
|
|
111
|
+
|
|
112
|
+
PCDheader.str = PCDheader.str.replace( /\#.*/gi, '' );
|
|
113
|
+
|
|
114
|
+
// parse
|
|
117
115
|
|
|
118
116
|
PCDheader.version = /VERSION (.*)/i.exec( PCDheader.str );
|
|
119
117
|
PCDheader.fields = /FIELDS (.*)/i.exec( PCDheader.str );
|
|
@@ -123,7 +121,9 @@
|
|
|
123
121
|
PCDheader.width = /WIDTH (.*)/i.exec( PCDheader.str );
|
|
124
122
|
PCDheader.height = /HEIGHT (.*)/i.exec( PCDheader.str );
|
|
125
123
|
PCDheader.viewpoint = /VIEWPOINT (.*)/i.exec( PCDheader.str );
|
|
126
|
-
PCDheader.points = /POINTS (.*)/i.exec( PCDheader.str );
|
|
124
|
+
PCDheader.points = /POINTS (.*)/i.exec( PCDheader.str );
|
|
125
|
+
|
|
126
|
+
// evaluate
|
|
127
127
|
|
|
128
128
|
if ( PCDheader.version !== null ) PCDheader.version = parseFloat( PCDheader.version[ 1 ] );
|
|
129
129
|
PCDheader.fields = PCDheader.fields !== null ? PCDheader.fields[ 1 ].split( ' ' ) : [];
|
|
@@ -133,7 +133,6 @@
|
|
|
133
133
|
if ( PCDheader.viewpoint !== null ) PCDheader.viewpoint = PCDheader.viewpoint[ 1 ];
|
|
134
134
|
if ( PCDheader.points !== null ) PCDheader.points = parseInt( PCDheader.points[ 1 ], 10 );
|
|
135
135
|
if ( PCDheader.points === null ) PCDheader.points = PCDheader.width * PCDheader.height;
|
|
136
|
-
|
|
137
136
|
if ( PCDheader.size !== null ) {
|
|
138
137
|
|
|
139
138
|
PCDheader.size = PCDheader.size[ 1 ].split( ' ' ).map( function ( x ) {
|
|
@@ -155,7 +154,6 @@
|
|
|
155
154
|
} else {
|
|
156
155
|
|
|
157
156
|
PCDheader.count = [];
|
|
158
|
-
|
|
159
157
|
for ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {
|
|
160
158
|
|
|
161
159
|
PCDheader.count.push( 1 );
|
|
@@ -166,7 +164,6 @@
|
|
|
166
164
|
|
|
167
165
|
PCDheader.offset = {};
|
|
168
166
|
let sizeSum = 0;
|
|
169
|
-
|
|
170
167
|
for ( let i = 0, l = PCDheader.fields.length; i < l; i ++ ) {
|
|
171
168
|
|
|
172
169
|
if ( PCDheader.data === 'ascii' ) {
|
|
@@ -180,35 +177,40 @@
|
|
|
180
177
|
|
|
181
178
|
}
|
|
182
179
|
|
|
183
|
-
}
|
|
180
|
+
}
|
|
184
181
|
|
|
182
|
+
// for binary only
|
|
185
183
|
|
|
186
184
|
PCDheader.rowSize = sizeSum;
|
|
187
185
|
return PCDheader;
|
|
188
186
|
|
|
189
187
|
}
|
|
190
188
|
|
|
191
|
-
const textData = THREE.LoaderUtils.decodeText( new Uint8Array( data ) );
|
|
189
|
+
const textData = THREE.LoaderUtils.decodeText( new Uint8Array( data ) );
|
|
190
|
+
|
|
191
|
+
// parse header (always ascii format)
|
|
192
192
|
|
|
193
|
-
const PCDheader = parseHeader( textData );
|
|
193
|
+
const PCDheader = parseHeader( textData );
|
|
194
|
+
|
|
195
|
+
// parse data
|
|
194
196
|
|
|
195
197
|
const position = [];
|
|
196
198
|
const normal = [];
|
|
197
199
|
const color = [];
|
|
198
200
|
const intensity = [];
|
|
199
|
-
const label = [];
|
|
201
|
+
const label = [];
|
|
202
|
+
|
|
203
|
+
// ascii
|
|
200
204
|
|
|
201
205
|
if ( PCDheader.data === 'ascii' ) {
|
|
202
206
|
|
|
203
207
|
const offset = PCDheader.offset;
|
|
204
208
|
const pcdData = textData.slice( PCDheader.headerLen );
|
|
205
209
|
const lines = pcdData.split( '\n' );
|
|
206
|
-
|
|
207
210
|
for ( let i = 0, l = lines.length; i < l; i ++ ) {
|
|
208
211
|
|
|
209
212
|
if ( lines[ i ] === '' ) continue;
|
|
210
213
|
const line = lines[ i ].split( ' ' );
|
|
211
|
-
|
|
212
214
|
if ( offset.x !== undefined ) {
|
|
213
215
|
|
|
214
216
|
position.push( parseFloat( line[ offset.x ] ) );
|
|
@@ -223,7 +225,6 @@
|
|
|
223
225
|
const rgb_type = PCDheader.type[ rgb_field_index ];
|
|
224
226
|
const float = parseFloat( line[ offset.rgb ] );
|
|
225
227
|
let rgb = float;
|
|
226
|
-
|
|
227
228
|
if ( rgb_type === 'F' ) {
|
|
228
229
|
|
|
229
230
|
// treat float values as int
|
|
@@ -263,12 +264,14 @@
|
|
|
263
264
|
|
|
264
265
|
}
|
|
265
266
|
|
|
266
|
-
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
// binary-compressed
|
|
270
|
+
|
|
267
271
|
// normally data in PCD files are organized as array of structures: XYZRGBXYZRGB
|
|
268
272
|
// binary compressed PCD files organize their data as structure of arrays: XXYYZZRGBRGB
|
|
269
273
|
// that requires a totally different parsing approach compared to non-compressed data
|
|
270
274
|
|
|
271
|
-
|
|
272
275
|
if ( PCDheader.data === 'binary_compressed' ) {
|
|
273
276
|
|
|
274
277
|
const sizes = new Uint32Array( data.slice( PCDheader.headerLen, PCDheader.headerLen + 8 ) );
|
|
@@ -277,7 +280,6 @@
|
|
|
277
280
|
const decompressed = decompressLZF( new Uint8Array( data, PCDheader.headerLen + 8, compressedSize ), decompressedSize );
|
|
278
281
|
const dataview = new DataView( decompressed.buffer );
|
|
279
282
|
const offset = PCDheader.offset;
|
|
280
|
-
|
|
281
283
|
for ( let i = 0; i < PCDheader.points; i ++ ) {
|
|
282
284
|
|
|
283
285
|
if ( offset.x !== undefined ) {
|
|
@@ -327,14 +329,14 @@
|
|
|
327
329
|
|
|
328
330
|
}
|
|
329
331
|
|
|
330
|
-
}
|
|
332
|
+
}
|
|
331
333
|
|
|
334
|
+
// binary
|
|
332
335
|
|
|
333
336
|
if ( PCDheader.data === 'binary' ) {
|
|
334
337
|
|
|
335
338
|
const dataview = new DataView( data, PCDheader.headerLen );
|
|
336
339
|
const offset = PCDheader.offset;
|
|
337
|
-
|
|
338
340
|
for ( let i = 0, row = 0; i < PCDheader.points; i ++, row += PCDheader.rowSize ) {
|
|
339
341
|
|
|
340
342
|
if ( offset.x !== undefined ) {
|
|
@@ -375,8 +377,9 @@
|
|
|
375
377
|
|
|
376
378
|
}
|
|
377
379
|
|
|
378
|
-
}
|
|
380
|
+
}
|
|
379
381
|
|
|
382
|
+
// build geometry
|
|
380
383
|
|
|
381
384
|
const geometry = new THREE.BufferGeometry();
|
|
382
385
|
if ( position.length > 0 ) geometry.setAttribute( 'position', new THREE.Float32BufferAttribute( position, 3 ) );
|
|
@@ -384,18 +387,20 @@
|
|
|
384
387
|
if ( color.length > 0 ) geometry.setAttribute( 'color', new THREE.Float32BufferAttribute( color, 3 ) );
|
|
385
388
|
if ( intensity.length > 0 ) geometry.setAttribute( 'intensity', new THREE.Float32BufferAttribute( intensity, 1 ) );
|
|
386
389
|
if ( label.length > 0 ) geometry.setAttribute( 'label', new THREE.Int32BufferAttribute( label, 1 ) );
|
|
387
|
-
geometry.computeBoundingSphere();
|
|
390
|
+
geometry.computeBoundingSphere();
|
|
391
|
+
|
|
392
|
+
// build material
|
|
388
393
|
|
|
389
394
|
const material = new THREE.PointsMaterial( {
|
|
390
395
|
size: 0.005
|
|
391
396
|
} );
|
|
392
|
-
|
|
393
397
|
if ( color.length > 0 ) {
|
|
394
398
|
|
|
395
399
|
material.vertexColors = true;
|
|
396
400
|
|
|
397
|
-
}
|
|
401
|
+
}
|
|
398
402
|
|
|
403
|
+
// build point cloud
|
|
399
404
|
|
|
400
405
|
return new THREE.Points( geometry, material );
|
|
401
406
|
|