super-three 0.141.0 → 0.144.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 +8 -8
- package/build/three.cjs +1558 -1034
- package/build/three.js +1558 -1034
- package/build/three.min.js +1 -1
- package/build/three.module.js +2012 -1243
- package/examples/js/animation/MMDPhysics.js +1 -16
- package/examples/js/controls/ArcballControls.js +16 -3
- package/examples/js/controls/FirstPersonControls.js +0 -7
- package/examples/js/controls/FlyControls.js +0 -8
- package/examples/js/controls/OrbitControls.js +0 -4
- package/examples/js/controls/PointerLockControls.js +0 -8
- package/examples/js/controls/TrackballControls.js +0 -2
- package/examples/js/controls/TransformControls.js +20 -16
- package/examples/js/effects/AnaglyphEffect.js +2 -2
- package/examples/js/effects/OutlineEffect.js +4 -24
- package/examples/js/effects/ParallaxBarrierEffect.js +2 -2
- package/examples/js/effects/PeppersGhostEffect.js +2 -2
- package/examples/js/effects/StereoEffect.js +2 -2
- package/examples/js/environments/RoomEnvironment.js +22 -0
- package/examples/js/exporters/ColladaExporter.js +4 -13
- package/examples/js/exporters/DRACOExporter.js +0 -12
- package/examples/js/exporters/GLTFExporter.js +28 -29
- package/examples/js/exporters/OBJExporter.js +2 -23
- package/examples/js/exporters/PLYExporter.js +12 -24
- package/examples/js/exporters/STLExporter.js +0 -7
- package/examples/js/exporters/USDZExporter.js +6 -0
- package/examples/js/geometries/ConvexGeometry.js +1 -1
- package/examples/js/geometries/ParametricGeometry.js +1 -8
- package/examples/js/interactive/SelectionHelper.js +2 -0
- package/examples/js/libs/ktx-parse.umd.js +1 -0
- package/examples/js/libs/meshopt_decoder.js +98 -32
- package/examples/js/loaders/ColladaLoader.js +1 -0
- package/examples/js/loaders/DRACOLoader.js +2 -25
- package/examples/js/loaders/EXRLoader.js +2 -13
- package/examples/js/loaders/FBXLoader.js +10 -3
- package/examples/js/loaders/FontLoader.js +3 -16
- package/examples/js/loaders/GLTFLoader.js +52 -36
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -11
- package/examples/js/loaders/LDrawLoader.js +139 -74
- package/examples/js/loaders/OBJLoader.js +7 -13
- package/examples/js/loaders/PCDLoader.js +59 -14
- package/examples/js/loaders/PLYLoader.js +3 -3
- package/examples/js/loaders/SVGLoader.js +4 -3
- package/examples/js/loaders/TIFFLoader.js +31 -0
- package/examples/js/loaders/VRMLLoader.js +33 -24
- package/examples/js/loaders/VTKLoader.js +1 -1
- package/examples/js/loaders/lwo/LWO2Parser.js +8 -7
- package/examples/js/loaders/lwo/LWO3Parser.js +8 -7
- package/examples/js/materials/MeshGouraudMaterial.js +385 -0
- package/examples/js/math/ColorConverter.js +0 -50
- package/examples/js/misc/GPUComputationRenderer.js +23 -0
- package/examples/js/misc/Volume.js +198 -190
- package/examples/js/misc/VolumeSlice.js +90 -88
- package/examples/js/modifiers/SimplifyModifier.js +1 -1
- package/examples/js/objects/GroundProjectedEnv.js +193 -0
- package/examples/js/objects/Reflector.js +9 -2
- package/examples/js/objects/ReflectorForSSRPass.js +3 -4
- package/examples/js/objects/Refractor.js +10 -4
- package/examples/js/objects/ShadowMesh.js +5 -1
- package/examples/js/postprocessing/OutlinePass.js +5 -3
- package/examples/js/renderers/CSS2DRenderer.js +2 -2
- package/examples/js/renderers/CSS3DRenderer.js +2 -2
- package/examples/js/renderers/Projector.js +2 -23
- package/examples/js/shaders/LuminosityShader.js +1 -1
- package/examples/js/shaders/MMDToonShader.js +6 -2
- package/examples/js/shaders/ToneMapShader.js +1 -1
- package/examples/js/utils/BufferGeometryUtils.js +1 -1
- package/examples/js/utils/GeometryUtils.js +2 -18
- package/examples/js/utils/PackedPhongMaterial.js +1 -1
- package/examples/js/utils/SceneUtils.js +0 -16
- package/examples/jsm/animation/MMDPhysics.js +3 -22
- package/examples/jsm/controls/ArcballControls.js +17 -2
- package/examples/jsm/controls/FirstPersonControls.js +0 -7
- package/examples/jsm/controls/FlyControls.js +0 -7
- package/examples/jsm/controls/OrbitControls.js +0 -5
- package/examples/jsm/controls/PointerLockControls.js +0 -7
- package/examples/jsm/controls/TrackballControls.js +0 -3
- package/examples/jsm/controls/TransformControls.js +18 -16
- 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 -31
- 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 +14 -3
- package/examples/jsm/geometries/ConvexGeometry.js +1 -1
- package/examples/jsm/geometries/ParametricGeometry.js +0 -6
- package/examples/jsm/interactive/HTMLMesh.js +9 -9
- package/examples/jsm/interactive/SelectionHelper.js +5 -3
- 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/loaders/ColladaLoader.js +1 -0
- package/examples/jsm/loaders/DRACOLoader.js +2 -28
- package/examples/jsm/loaders/EXRLoader.js +3 -13
- package/examples/jsm/loaders/FBXLoader.js +10 -3
- package/examples/jsm/loaders/FontLoader.js +3 -16
- package/examples/jsm/loaders/GLTFLoader.js +52 -36
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +0 -13
- package/examples/jsm/loaders/KTX2Loader.js +192 -30
- package/examples/jsm/loaders/LDrawLoader.js +135 -74
- package/examples/jsm/loaders/OBJLoader.js +6 -14
- package/examples/jsm/loaders/PCDLoader.js +59 -13
- package/examples/jsm/loaders/PLYLoader.js +3 -3
- package/examples/jsm/loaders/RGBELoader.js +1 -1
- package/examples/jsm/loaders/SVGLoader.js +4 -3
- package/examples/jsm/loaders/TIFFLoader.js +36 -0
- package/examples/jsm/loaders/USDZLoader.js +393 -0
- package/examples/jsm/loaders/VRMLLoader.js +23 -25
- 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/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/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/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 +1 -1
- package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +1 -1
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +1 -1
- package/examples/jsm/node-editor/math/AngleEditor.js +1 -1
- package/examples/jsm/node-editor/math/DotEditor.js +1 -1
- package/examples/jsm/node-editor/math/InvertEditor.js +1 -1
- 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/utils/JoinEditor.js +1 -1
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +1 -1
- package/examples/jsm/node-editor/utils/PreviewEditor.js +3 -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 +43 -13
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +9 -5
- package/examples/jsm/nodes/accessors/NormalNode.js +4 -4
- package/examples/jsm/nodes/accessors/PositionNode.js +5 -5
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +31 -0
- package/examples/jsm/nodes/core/AttributeNode.js +3 -3
- 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 +14 -12
- package/examples/jsm/nodes/core/NodeBuilder.js +12 -12
- package/examples/jsm/nodes/core/NodeUtils.js +23 -1
- package/examples/jsm/nodes/core/{NodeVary.js → NodeVarying.js} +3 -3
- package/examples/jsm/nodes/core/{VaryNode.js → VaryingNode.js} +7 -7
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +94 -0
- package/examples/jsm/nodes/geometry/RangeNode.js +109 -0
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +2 -0
- 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 +31 -0
- package/examples/jsm/nodes/materials/Materials.js +13 -25
- 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 +2 -2
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +28 -17
- package/examples/jsm/nodes/materialx/Disclaimer.md +199 -0
- package/examples/jsm/nodes/materialx/functions/lib/mx_hsv.js +56 -0
- package/examples/jsm/nodes/materialx/functions/lib/mx_noise.js +607 -0
- package/examples/jsm/nodes/math/MathNode.js +2 -12
- 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 +5 -5
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +8 -5
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +20 -6
- package/examples/jsm/nodes/utils/ConvertNode.js +8 -3
- package/examples/jsm/nodes/utils/JoinNode.js +7 -7
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +2 -1
- package/examples/jsm/nodes/utils/RotateUVNode.js +32 -0
- package/examples/jsm/nodes/utils/SplitNode.js +21 -5
- package/examples/jsm/nodes/utils/TimerNode.js +2 -2
- 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/OutlinePass.js +5 -3
- 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 +329 -218
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +7 -3
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +39 -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 +66 -81
- 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 +25 -30
- 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 -2
- package/examples/jsm/shaders/ToneMapShader.js +1 -1
- package/examples/jsm/utils/BufferGeometryUtils.js +2 -1
- package/examples/jsm/utils/GeometryUtils.js +17 -25
- package/examples/jsm/utils/PackedPhongMaterial.js +0 -1
- package/examples/jsm/utils/SceneUtils.js +1 -21
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -1
- package/examples/jsm/webxr/VRButton.js +1 -7
- package/package.json +18 -14
- package/src/Three.Legacy.js +262 -36
- package/src/Three.js +3 -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 +24 -5
- package/src/cameras/CubeCamera.js +0 -7
- 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/InterleavedBuffer.js +1 -1
- package/src/core/InterleavedBufferAttribute.js +56 -7
- 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/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 +1 -1
- package/src/geometries/RingGeometry.js +1 -1
- package/src/geometries/ShapeGeometry.js +2 -1
- 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/CameraHelper.js +97 -38
- package/src/helpers/DirectionalLightHelper.js +1 -0
- package/src/helpers/HemisphereLightHelper.js +1 -0
- package/src/helpers/PlaneHelper.js +6 -9
- package/src/helpers/PolarGridHelper.js +18 -14
- package/src/helpers/SpotLightHelper.js +1 -0
- package/src/lights/SpotLight.js +2 -0
- package/src/loaders/FileLoader.js +12 -1
- package/src/loaders/LoadingManager.js +1 -1
- package/src/loaders/MaterialLoader.js +49 -7
- package/src/loaders/ObjectLoader.js +4 -41
- package/src/materials/Material.js +1 -33
- package/src/materials/Materials.js +0 -27
- package/src/materials/MeshLambertMaterial.js +28 -1
- package/src/materials/ShaderMaterial.js +3 -7
- package/src/math/Color.js +3 -13
- package/src/math/MathUtils.js +1 -7
- package/src/math/Matrix3.js +1 -7
- package/src/math/Matrix4.js +3 -27
- package/src/math/Quaternion.js +1 -21
- package/src/math/Vector2.js +4 -24
- package/src/math/Vector3.js +7 -46
- package/src/math/Vector4.js +4 -24
- package/src/renderers/WebGLRenderer.js +84 -8
- 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_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 -12
- package/src/renderers/shaders/ShaderChunk/lights_lambert_fragment.glsl.js +5 -0
- package/src/renderers/shaders/ShaderChunk/lights_lambert_pars_fragment.glsl.js +30 -0
- 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/normalmap_pars_fragment.glsl.js +2 -4
- package/src/renderers/shaders/ShaderChunk/output_fragment.glsl.js +1 -1
- 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/worldpos_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk.js +4 -2
- 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.js +31 -31
- package/src/renderers/shaders/UniformsLib.js +12 -11
- package/src/renderers/shaders/UniformsUtils.js +14 -0
- package/src/renderers/webgl/WebGLBackground.js +2 -2
- package/src/renderers/webgl/WebGLLights.js +37 -13
- 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 +10 -15
- package/src/renderers/webgl/WebGLState.js +47 -0
- package/src/renderers/webgl/WebGLUniforms.js +4 -4
- package/src/renderers/webgl/WebGLUniformsGroups.js +372 -0
- package/src/renderers/webgl/WebGLUtils.js +2 -0
- package/src/renderers/webvr/WebVRManager.js +42 -9
- package/src/renderers/webvr/WebVRUtils.js +1 -1
- package/src/renderers/webxr/WebXRController.js +45 -37
- package/src/renderers/webxr/WebXRManager.js +58 -33
- package/src/scenes/Scene.js +16 -3
- package/src/textures/Source.js +1 -1
- package/src/utils.js +1 -1
- package/examples/js/controls/experimental/CameraControls.js +0 -1048
- package/examples/js/loaders/KTX2Loader.js +0 -558
- package/examples/jsm/controls/experimental/CameraControls.js +0 -1248
- package/examples/jsm/nodes/accessors/ReflectNode.js +0 -70
- package/examples/jsm/package.json +0 -3
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +0 -45
- 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,
|
|
@@ -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
|
|
@@ -90,7 +90,7 @@ class PLYLoader extends Loader {
|
|
|
90
90
|
|
|
91
91
|
function parseHeader( data ) {
|
|
92
92
|
|
|
93
|
-
const patternHeader = /^ply([\s\S]*)end_header\r
|
|
93
|
+
const patternHeader = /^ply([\s\S]*)end_header(\r\n|\r|\n)/;
|
|
94
94
|
let headerText = '';
|
|
95
95
|
let headerLength = 0;
|
|
96
96
|
const result = patternHeader.exec( data );
|
|
@@ -109,7 +109,7 @@ class PLYLoader extends Loader {
|
|
|
109
109
|
objInfo: ''
|
|
110
110
|
};
|
|
111
111
|
|
|
112
|
-
const lines = headerText.split(
|
|
112
|
+
const lines = headerText.split( /\r\n|\r|\n/ );
|
|
113
113
|
let currentElement;
|
|
114
114
|
|
|
115
115
|
function make_ply_element_property( propertValues, propertyNameMapping ) {
|
|
@@ -283,7 +283,7 @@ class PLYLoader extends Loader {
|
|
|
283
283
|
|
|
284
284
|
}
|
|
285
285
|
|
|
286
|
-
const lines = body.split(
|
|
286
|
+
const lines = body.split( /\r\n|\r|\n/ );
|
|
287
287
|
let currentElement = 0;
|
|
288
288
|
let currentElementCount = 0;
|
|
289
289
|
|
|
@@ -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
|
|
|
@@ -2106,7 +2107,7 @@ class SVGLoader extends Loader {
|
|
|
2106
2107
|
simplePaths = simplePaths.filter( sp => sp.points.length > 1 );
|
|
2107
2108
|
|
|
2108
2109
|
// check if path is solid or a hole
|
|
2109
|
-
const isAHole = simplePaths.map( p => isHoleTo( p, simplePaths, scanlineMinX, scanlineMaxX, shapePath.userData
|
|
2110
|
+
const isAHole = simplePaths.map( p => isHoleTo( p, simplePaths, scanlineMinX, scanlineMaxX, shapePath.userData?.style.fillRule ) );
|
|
2110
2111
|
|
|
2111
2112
|
|
|
2112
2113
|
const shapesToReturn = [];
|
|
@@ -2312,7 +2313,7 @@ class SVGLoader extends Loader {
|
|
|
2312
2313
|
const dot = Math.abs( normal1.dot( tempV2_3 ) );
|
|
2313
2314
|
|
|
2314
2315
|
// If path is straight, don't create join
|
|
2315
|
-
if ( dot
|
|
2316
|
+
if ( dot > Number.EPSILON ) {
|
|
2316
2317
|
|
|
2317
2318
|
// Compute inner and outer segment intersections
|
|
2318
2319
|
const miterSide = strokeWidth2 / dot;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import {
|
|
2
|
+
DataTextureLoader,
|
|
3
|
+
LinearFilter,
|
|
4
|
+
LinearMipmapLinearFilter
|
|
5
|
+
} from 'three';
|
|
6
|
+
|
|
7
|
+
import UTIF from '../libs/utif.module.js';
|
|
8
|
+
|
|
9
|
+
class TIFFLoader extends DataTextureLoader {
|
|
10
|
+
|
|
11
|
+
constructor( manager ) {
|
|
12
|
+
|
|
13
|
+
super( manager );
|
|
14
|
+
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
parse( buffer ) {
|
|
18
|
+
|
|
19
|
+
const ifds = UTIF.decode( buffer );
|
|
20
|
+
UTIF.decodeImage( buffer, ifds[ 0 ] );
|
|
21
|
+
const rgba = UTIF.toRGBA8( ifds[ 0 ] );
|
|
22
|
+
|
|
23
|
+
return {
|
|
24
|
+
width: ifds[ 0 ].width,
|
|
25
|
+
height: ifds[ 0 ].height,
|
|
26
|
+
data: rgba,
|
|
27
|
+
flipY: true,
|
|
28
|
+
magFilter: LinearFilter,
|
|
29
|
+
minFilter: LinearMipmapLinearFilter
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export { TIFFLoader };
|
|
@@ -0,0 +1,393 @@
|
|
|
1
|
+
import {
|
|
2
|
+
BufferAttribute,
|
|
3
|
+
BufferGeometry,
|
|
4
|
+
FileLoader,
|
|
5
|
+
Group,
|
|
6
|
+
Loader,
|
|
7
|
+
Mesh,
|
|
8
|
+
MeshStandardMaterial,
|
|
9
|
+
TextureLoader
|
|
10
|
+
} from 'three';
|
|
11
|
+
|
|
12
|
+
import * as fflate from '../libs/fflate.module.js';
|
|
13
|
+
|
|
14
|
+
class USDZLoader extends Loader {
|
|
15
|
+
|
|
16
|
+
constructor( manager ) {
|
|
17
|
+
|
|
18
|
+
super( manager );
|
|
19
|
+
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
load( url, onLoad, onProgress, onError ) {
|
|
23
|
+
|
|
24
|
+
const scope = this;
|
|
25
|
+
|
|
26
|
+
const loader = new FileLoader( scope.manager );
|
|
27
|
+
loader.setPath( scope.path );
|
|
28
|
+
loader.setResponseType( 'arraybuffer' );
|
|
29
|
+
loader.setRequestHeader( scope.requestHeader );
|
|
30
|
+
loader.setWithCredentials( scope.withCredentials );
|
|
31
|
+
loader.load( url, function ( text ) {
|
|
32
|
+
|
|
33
|
+
try {
|
|
34
|
+
|
|
35
|
+
onLoad( scope.parse( text ) );
|
|
36
|
+
|
|
37
|
+
} catch ( e ) {
|
|
38
|
+
|
|
39
|
+
if ( onError ) {
|
|
40
|
+
|
|
41
|
+
onError( e );
|
|
42
|
+
|
|
43
|
+
} else {
|
|
44
|
+
|
|
45
|
+
console.error( e );
|
|
46
|
+
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
scope.manager.itemError( url );
|
|
50
|
+
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
}, onProgress, onError );
|
|
54
|
+
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
parse( buffer ) {
|
|
58
|
+
|
|
59
|
+
function createImages( zip ) {
|
|
60
|
+
|
|
61
|
+
const data = {};
|
|
62
|
+
const loader = new FileLoader();
|
|
63
|
+
loader.setResponseType( 'arraybuffer' );
|
|
64
|
+
|
|
65
|
+
for ( const filename in zip ) {
|
|
66
|
+
|
|
67
|
+
if ( filename.endsWith( 'png' ) ) {
|
|
68
|
+
|
|
69
|
+
const blob = new Blob( [ zip[ filename ] ], { type: { type: 'image/png' } } );
|
|
70
|
+
data[ filename ] = URL.createObjectURL( blob );
|
|
71
|
+
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return data;
|
|
77
|
+
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
function findUSD( zip ) {
|
|
81
|
+
|
|
82
|
+
for ( const filename in zip ) {
|
|
83
|
+
|
|
84
|
+
if ( filename.endsWith( 'usda' ) ) {
|
|
85
|
+
|
|
86
|
+
return zip[ filename ];
|
|
87
|
+
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const zip = fflate.unzipSync( new Uint8Array( buffer ) ); // eslint-disable-line no-undef
|
|
95
|
+
|
|
96
|
+
// console.log( zip );
|
|
97
|
+
|
|
98
|
+
const images = createImages( zip );
|
|
99
|
+
const file = findUSD( zip );
|
|
100
|
+
|
|
101
|
+
if ( file === undefined ) {
|
|
102
|
+
|
|
103
|
+
console.warn( 'THREE.USDZLoader: No usda file found.' );
|
|
104
|
+
|
|
105
|
+
return {};
|
|
106
|
+
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
// Parse file
|
|
110
|
+
|
|
111
|
+
const text = fflate.strFromU8( file );
|
|
112
|
+
const lines = text.split( '\n' );
|
|
113
|
+
const length = lines.length;
|
|
114
|
+
|
|
115
|
+
const data = {};
|
|
116
|
+
|
|
117
|
+
let current = 0;
|
|
118
|
+
let string = null;
|
|
119
|
+
let target = data;
|
|
120
|
+
|
|
121
|
+
const stack = [ data ];
|
|
122
|
+
|
|
123
|
+
// debugger;
|
|
124
|
+
|
|
125
|
+
function parseNextLine() {
|
|
126
|
+
|
|
127
|
+
const line = lines[ current ];
|
|
128
|
+
|
|
129
|
+
// console.log( line );
|
|
130
|
+
|
|
131
|
+
if ( line.includes( '=' ) ) {
|
|
132
|
+
|
|
133
|
+
const assignment = line.split( '=' );
|
|
134
|
+
|
|
135
|
+
const lhs = assignment[ 0 ].trim();
|
|
136
|
+
const rhs = assignment[ 1 ].trim();
|
|
137
|
+
|
|
138
|
+
if ( rhs.endsWith( '{' ) ) {
|
|
139
|
+
|
|
140
|
+
const group = {};
|
|
141
|
+
stack.push( group );
|
|
142
|
+
|
|
143
|
+
target[ lhs ] = group;
|
|
144
|
+
target = group;
|
|
145
|
+
|
|
146
|
+
} else {
|
|
147
|
+
|
|
148
|
+
target[ lhs ] = rhs;
|
|
149
|
+
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
} else if ( line.endsWith( '{' ) ) {
|
|
153
|
+
|
|
154
|
+
const group = target[ string ] || {};
|
|
155
|
+
stack.push( group );
|
|
156
|
+
|
|
157
|
+
target[ string ] = group;
|
|
158
|
+
target = group;
|
|
159
|
+
|
|
160
|
+
} else if ( line.endsWith( '}' ) ) {
|
|
161
|
+
|
|
162
|
+
stack.pop();
|
|
163
|
+
|
|
164
|
+
if ( stack.length === 0 ) return;
|
|
165
|
+
|
|
166
|
+
target = stack[ stack.length - 1 ];
|
|
167
|
+
|
|
168
|
+
} else if ( line.endsWith( '(' ) ) {
|
|
169
|
+
|
|
170
|
+
const meta = {};
|
|
171
|
+
stack.push( meta );
|
|
172
|
+
|
|
173
|
+
string = line.split( '(' )[ 0 ].trim() || string;
|
|
174
|
+
|
|
175
|
+
target[ string ] = meta;
|
|
176
|
+
target = meta;
|
|
177
|
+
|
|
178
|
+
} else if ( line.endsWith( ')' ) ) {
|
|
179
|
+
|
|
180
|
+
stack.pop();
|
|
181
|
+
|
|
182
|
+
target = stack[ stack.length - 1 ];
|
|
183
|
+
|
|
184
|
+
} else {
|
|
185
|
+
|
|
186
|
+
string = line.trim();
|
|
187
|
+
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
current ++;
|
|
191
|
+
|
|
192
|
+
if ( current < length ) {
|
|
193
|
+
|
|
194
|
+
parseNextLine();
|
|
195
|
+
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
parseNextLine();
|
|
201
|
+
|
|
202
|
+
// Build scene
|
|
203
|
+
|
|
204
|
+
function findGeometry( data ) {
|
|
205
|
+
|
|
206
|
+
for ( const name in data ) {
|
|
207
|
+
|
|
208
|
+
const object = data[ name ];
|
|
209
|
+
|
|
210
|
+
if ( name.startsWith( 'def Mesh' ) ) {
|
|
211
|
+
|
|
212
|
+
// Move st indices to Mesh
|
|
213
|
+
|
|
214
|
+
if ( data[ 'int[] primvars:st:indices' ] ) {
|
|
215
|
+
|
|
216
|
+
object[ 'int[] primvars:st:indices' ] = data[ 'int[] primvars:st:indices' ];
|
|
217
|
+
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
return object;
|
|
221
|
+
|
|
222
|
+
}
|
|
223
|
+
|
|
224
|
+
|
|
225
|
+
if ( typeof object === 'object' ) {
|
|
226
|
+
|
|
227
|
+
const geometry = findGeometry( object );
|
|
228
|
+
|
|
229
|
+
if ( geometry ) return geometry;
|
|
230
|
+
|
|
231
|
+
}
|
|
232
|
+
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
function buildGeometry( data ) {
|
|
238
|
+
|
|
239
|
+
const geometry = new BufferGeometry();
|
|
240
|
+
|
|
241
|
+
const positions = JSON.parse( data[ 'point3f[] points' ].replace( /[()]*/g, '' ) );
|
|
242
|
+
const attribute = new BufferAttribute( new Float32Array( positions ), 3 );
|
|
243
|
+
|
|
244
|
+
if ( data[ 'int[] faceVertexIndices' ] ) {
|
|
245
|
+
|
|
246
|
+
const indices = JSON.parse( data[ 'int[] faceVertexIndices' ] );
|
|
247
|
+
geometry.setAttribute( 'position', toFlatBufferAttribute( attribute, indices ) );
|
|
248
|
+
|
|
249
|
+
} else {
|
|
250
|
+
|
|
251
|
+
geometry.setAttribute( 'position', attribute );
|
|
252
|
+
|
|
253
|
+
}
|
|
254
|
+
|
|
255
|
+
|
|
256
|
+
if ( data[ 'texCoord2f[] primvars:st' ] ) {
|
|
257
|
+
|
|
258
|
+
const uvs = JSON.parse( data[ 'texCoord2f[] primvars:st' ].replace( /[()]*/g, '' ) );
|
|
259
|
+
const attribute = new BufferAttribute( new Float32Array( uvs ), 2 );
|
|
260
|
+
|
|
261
|
+
if ( data[ 'int[] primvars:st:indices' ] ) {
|
|
262
|
+
|
|
263
|
+
const indices = JSON.parse( data[ 'int[] primvars:st:indices' ] );
|
|
264
|
+
geometry.setAttribute( 'uv', toFlatBufferAttribute( attribute, indices ) );
|
|
265
|
+
|
|
266
|
+
} else {
|
|
267
|
+
|
|
268
|
+
geometry.setAttribute( 'uv', attribute );
|
|
269
|
+
|
|
270
|
+
}
|
|
271
|
+
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
geometry.computeVertexNormals();
|
|
275
|
+
|
|
276
|
+
return geometry;
|
|
277
|
+
|
|
278
|
+
}
|
|
279
|
+
|
|
280
|
+
function toFlatBufferAttribute( attribute, indices ) {
|
|
281
|
+
|
|
282
|
+
const array = attribute.array;
|
|
283
|
+
const itemSize = attribute.itemSize;
|
|
284
|
+
|
|
285
|
+
const array2 = new array.constructor( indices.length * itemSize );
|
|
286
|
+
|
|
287
|
+
let index = 0, index2 = 0;
|
|
288
|
+
|
|
289
|
+
for ( let i = 0, l = indices.length; i < l; i ++ ) {
|
|
290
|
+
|
|
291
|
+
index = indices[ i ] * itemSize;
|
|
292
|
+
|
|
293
|
+
for ( let j = 0; j < itemSize; j ++ ) {
|
|
294
|
+
|
|
295
|
+
array2[ index2 ++ ] = array[ index ++ ];
|
|
296
|
+
|
|
297
|
+
}
|
|
298
|
+
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
return new BufferAttribute( array2, itemSize );
|
|
302
|
+
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
function findMaterial( data ) {
|
|
306
|
+
|
|
307
|
+
for ( const name in data ) {
|
|
308
|
+
|
|
309
|
+
const object = data[ name ];
|
|
310
|
+
|
|
311
|
+
if ( name.startsWith( 'def Material' ) ) {
|
|
312
|
+
|
|
313
|
+
return object;
|
|
314
|
+
|
|
315
|
+
}
|
|
316
|
+
|
|
317
|
+
|
|
318
|
+
if ( typeof object === 'object' ) {
|
|
319
|
+
|
|
320
|
+
const material = findMaterial( object );
|
|
321
|
+
|
|
322
|
+
if ( material ) return material;
|
|
323
|
+
|
|
324
|
+
}
|
|
325
|
+
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function buildMaterial( data ) {
|
|
331
|
+
|
|
332
|
+
const material = new MeshStandardMaterial();
|
|
333
|
+
|
|
334
|
+
// console.log( data );
|
|
335
|
+
|
|
336
|
+
if ( data[ 'def Shader "diffuseColor_texture"' ] ) {
|
|
337
|
+
|
|
338
|
+
const texture = data[ 'def Shader "diffuseColor_texture"' ];
|
|
339
|
+
const file = texture[ 'asset inputs:file' ].replace( /@*/g, '' );
|
|
340
|
+
|
|
341
|
+
material.map = new TextureLoader().load( images[ file ] );
|
|
342
|
+
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
if ( data[ 'def Shader "normal_texture"' ] ) {
|
|
346
|
+
|
|
347
|
+
const texture = data[ 'def Shader "normal_texture"' ];
|
|
348
|
+
const file = texture[ 'asset inputs:file' ].replace( /@*/g, '' );
|
|
349
|
+
|
|
350
|
+
material.normalMap = new TextureLoader().load( images[ file ] );
|
|
351
|
+
|
|
352
|
+
}
|
|
353
|
+
|
|
354
|
+
|
|
355
|
+
return material;
|
|
356
|
+
|
|
357
|
+
}
|
|
358
|
+
|
|
359
|
+
function buildMesh( data ) {
|
|
360
|
+
|
|
361
|
+
const geometry = buildGeometry( findGeometry( data ) );
|
|
362
|
+
const material = buildMaterial( findMaterial( data ) );
|
|
363
|
+
|
|
364
|
+
const mesh = new Mesh( geometry, material );
|
|
365
|
+
|
|
366
|
+
return mesh;
|
|
367
|
+
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
// console.log( data );
|
|
371
|
+
|
|
372
|
+
const group = new Group();
|
|
373
|
+
|
|
374
|
+
for ( const name in data ) {
|
|
375
|
+
|
|
376
|
+
if ( name.startsWith( 'def Xform' ) ) {
|
|
377
|
+
|
|
378
|
+
const mesh = buildMesh( data[ name ] );
|
|
379
|
+
group.add( mesh );
|
|
380
|
+
|
|
381
|
+
}
|
|
382
|
+
|
|
383
|
+
}
|
|
384
|
+
|
|
385
|
+
// console.log( group );
|
|
386
|
+
|
|
387
|
+
return group;
|
|
388
|
+
|
|
389
|
+
}
|
|
390
|
+
|
|
391
|
+
}
|
|
392
|
+
|
|
393
|
+
export { USDZLoader };
|