super-three 0.133.3 → 0.136.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build/three.js +1059 -783
- package/build/three.min.js +1 -1
- package/build/three.module.js +1424 -895
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff +0 -0
- package/examples/fonts/open-sans/open-sans-v15-cyrillic-ext_greek_greek-ext_cyrillic_latin_latin-ext_vietnamese-regular.woff2 +0 -0
- package/examples/fonts/open-sans/open-sans.css +9 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +3966 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.ttf +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.woff2 +0 -0
- package/examples/fonts/tabler-icons/tabler-icons.min.css +4 -0
- package/examples/js/animation/CCDIKSolver.js +0 -1
- package/examples/js/animation/MMDPhysics.js +1 -3
- package/examples/js/controls/ArcballControls.js +99 -72
- package/examples/js/controls/DragControls.js +7 -0
- package/examples/js/controls/OrbitControls.js +5 -36
- package/examples/js/controls/TrackballControls.js +3 -2
- package/examples/js/controls/TransformControls.js +24 -1
- package/examples/js/csm/CSM.js +2 -2
- package/examples/js/csm/CSMFrustum.js +133 -0
- package/examples/js/curves/CurveExtras.js +0 -2
- package/examples/js/effects/AsciiEffect.js +2 -9
- package/examples/js/exporters/GLTFExporter.js +148 -64
- package/examples/js/exporters/USDZExporter.js +45 -26
- package/examples/js/geometries/TeapotGeometry.js +0 -1
- package/examples/js/interactive/SelectionBox.js +2 -0
- package/examples/js/interactive/SelectionHelper.js +22 -7
- package/examples/js/lights/RectAreaLightUniformsLib.js +4 -0
- package/examples/js/lines/LineMaterial.js +58 -20
- package/examples/js/lines/LineSegments2.js +29 -24
- package/examples/js/loaders/3DMLoader.js +24 -11
- package/examples/js/loaders/3MFLoader.js +2 -2
- package/examples/js/loaders/AMFLoader.js +0 -2
- package/examples/js/loaders/ColladaLoader.js +61 -4
- package/examples/js/loaders/EXRLoader.js +185 -262
- package/examples/js/loaders/FBXLoader.js +4 -5
- package/examples/js/loaders/GLTFLoader.js +96 -33
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -8
- package/examples/js/loaders/KTX2Loader.js +23 -2
- package/examples/js/loaders/KTXLoader.js +1 -1
- package/examples/js/loaders/LDrawLoader.js +26 -30
- package/examples/js/loaders/LUT3dlLoader.js +2 -0
- package/examples/js/loaders/LUTCubeLoader.js +2 -0
- package/examples/js/loaders/LWOLoader.js +8 -6
- package/examples/js/loaders/LogLuvLoader.js +766 -0
- package/examples/js/loaders/MMDLoader.js +0 -1
- package/examples/js/loaders/NRRDLoader.js +9 -2
- package/examples/js/loaders/OBJLoader.js +0 -2
- package/examples/js/loaders/PLYLoader.js +33 -8
- package/examples/js/loaders/RGBELoader.js +2 -16
- package/examples/js/loaders/RGBMLoader.js +55 -5
- package/examples/js/loaders/SVGLoader.js +9 -5
- package/examples/js/loaders/TDSLoader.js +237 -271
- package/examples/js/loaders/VOXLoader.js +1 -0
- package/examples/js/loaders/VRMLLoader.js +2 -1
- package/examples/js/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/js/loaders/lwo/LWO3Parser.js +4 -2
- package/examples/js/math/ImprovedNoise.js +1 -1
- package/examples/js/misc/GPUComputationRenderer.js +3 -1
- package/examples/js/objects/Lensflare.js +2 -10
- package/examples/js/objects/MarchingCubes.js +42 -128
- package/examples/js/objects/Reflector.js +7 -0
- package/examples/js/objects/Refractor.js +7 -0
- package/examples/js/objects/Sky.js +1 -1
- package/examples/js/objects/Water.js +2 -2
- package/examples/js/objects/Water2.js +4 -7
- package/examples/js/postprocessing/GlitchPass.js +3 -1
- package/examples/js/postprocessing/SSAOPass.js +1 -0
- package/examples/js/renderers/CSS2DRenderer.js +4 -4
- package/examples/js/renderers/CSS3DRenderer.js +4 -4
- package/examples/js/shaders/ConvolutionShader.js +0 -1
- package/examples/js/shaders/FXAAShader.js +1 -1
- package/examples/js/shaders/FilmShader.js +1 -1
- package/examples/js/shaders/GammaCorrectionShader.js +1 -1
- package/examples/js/shaders/HorizontalBlurShader.js +1 -2
- package/examples/js/shaders/SSRShader.js +1 -1
- package/examples/js/shaders/SSRrShader.js +1 -1
- package/examples/js/shaders/VerticalBlurShader.js +1 -2
- package/examples/js/utils/GeometryUtils.js +1 -1
- package/examples/js/utils/RoughnessMipmapper.js +18 -28
- package/examples/jsm/animation/CCDIKSolver.js +0 -1
- package/examples/jsm/animation/MMDPhysics.js +0 -2
- package/examples/jsm/controls/ArcballControls.js +80 -77
- package/examples/jsm/controls/DragControls.js +7 -0
- package/examples/jsm/controls/OrbitControls.js +9 -51
- package/examples/jsm/controls/TrackballControls.js +1 -1
- package/examples/jsm/controls/TransformControls.js +24 -1
- package/examples/jsm/csm/CSM.js +3 -3
- package/examples/jsm/csm/{Frustum.js → CSMFrustum.js} +3 -3
- package/examples/jsm/curves/CurveExtras.js +0 -2
- package/examples/jsm/effects/AsciiEffect.js +2 -9
- package/examples/jsm/exporters/GLTFExporter.js +161 -75
- package/examples/jsm/exporters/USDZExporter.js +47 -26
- package/examples/jsm/geometries/TeapotGeometry.js +0 -1
- package/examples/jsm/interactive/SelectionBox.js +1 -0
- package/examples/jsm/interactive/SelectionHelper.js +19 -7
- package/examples/jsm/libs/flow.module.js +3338 -0
- package/examples/jsm/libs/lil-gui.module.min.js +8 -0
- package/examples/jsm/libs/rhino3dm/rhino3dm.wasm +0 -0
- package/examples/jsm/lights/RectAreaLightUniformsLib.js +7 -0
- package/examples/jsm/lines/LineMaterial.js +59 -23
- package/examples/jsm/lines/LineSegments2.js +22 -18
- package/examples/jsm/loaders/3DMLoader.js +18 -12
- package/examples/jsm/loaders/3MFLoader.js +2 -2
- package/examples/jsm/loaders/AMFLoader.js +0 -2
- package/examples/jsm/loaders/ColladaLoader.js +61 -4
- package/examples/jsm/loaders/EXRLoader.js +184 -293
- package/examples/jsm/loaders/FBXLoader.js +4 -5
- package/examples/jsm/loaders/GLTFLoader.js +101 -37
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +1 -14
- package/examples/jsm/loaders/KTX2Loader.js +30 -2
- package/examples/jsm/loaders/KTXLoader.js +1 -1
- package/examples/jsm/loaders/LDrawLoader.js +23 -24
- package/examples/jsm/loaders/LUT3dlLoader.js +2 -0
- package/examples/jsm/loaders/LUTCubeLoader.js +2 -0
- package/examples/jsm/loaders/LWOLoader.js +8 -6
- package/examples/jsm/loaders/LogLuvLoader.js +606 -0
- package/examples/jsm/loaders/MMDLoader.js +0 -1
- package/examples/jsm/loaders/NRRDLoader.js +10 -2
- package/examples/jsm/loaders/OBJLoader.js +0 -2
- package/examples/jsm/loaders/PLYLoader.js +34 -8
- package/examples/jsm/loaders/RGBELoader.js +0 -20
- package/examples/jsm/loaders/RGBMLoader.js +61 -7
- package/examples/jsm/loaders/SVGLoader.js +9 -6
- package/examples/jsm/loaders/TDSLoader.js +236 -275
- package/examples/jsm/loaders/VOXLoader.js +1 -0
- package/examples/jsm/loaders/VRMLLoader.js +2 -1
- package/examples/jsm/loaders/lwo/LWO2Parser.js +1 -0
- package/examples/jsm/loaders/lwo/LWO3Parser.js +2 -2
- package/examples/jsm/math/ImprovedNoise.js +1 -1
- package/examples/jsm/misc/GPUComputationRenderer.js +3 -1
- package/examples/jsm/node-editor/NodeEditor.js +456 -0
- package/examples/jsm/node-editor/accessors/NormalEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/PositionEditor.js +30 -0
- package/examples/jsm/node-editor/accessors/UVEditor.js +26 -0
- package/examples/jsm/node-editor/display/BlendEditor.js +43 -0
- package/examples/jsm/node-editor/examples/animate-uv.json +1 -0
- package/examples/jsm/node-editor/examples/fake-top-light.json +1 -0
- package/examples/jsm/node-editor/examples/oscillator-color.json +1 -0
- package/examples/jsm/node-editor/examples/rim.json +1 -0
- package/examples/jsm/node-editor/inputs/ColorEditor.js +91 -0
- package/examples/jsm/node-editor/inputs/FloatEditor.js +24 -0
- package/examples/jsm/node-editor/inputs/SliderEditor.js +68 -0
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +28 -0
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +30 -0
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +37 -0
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +108 -0
- package/examples/jsm/node-editor/math/DotEditor.js +36 -0
- package/examples/jsm/node-editor/math/InvertEditor.js +38 -0
- package/examples/jsm/node-editor/math/LimiterEditor.js +48 -0
- package/examples/jsm/node-editor/math/NormalizeEditor.js +26 -0
- package/examples/jsm/node-editor/math/OperatorEditor.js +50 -0
- package/examples/jsm/node-editor/math/PowerEditor.js +34 -0
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +39 -0
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +26 -0
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +42 -0
- package/examples/jsm/node-editor/utils/TimerEditor.js +57 -0
- package/examples/jsm/nodes/core/NodeBuilder.js +2 -2
- package/examples/jsm/nodes/materials/StandardNodeMaterial.js +1 -1
- package/examples/jsm/nodes/materials/nodes/StandardNode.js +7 -6
- package/examples/jsm/nodes/math/MathNode.js +12 -0
- package/examples/jsm/nodes/misc/BumpMapNode.js +1 -1
- package/examples/jsm/nodes/misc/TextureCubeUVNode.js +1 -4
- package/examples/jsm/nodes/utils/ColorSpaceNode.js +1 -164
- package/examples/jsm/objects/Lensflare.js +3 -14
- package/examples/jsm/objects/MarchingCubes.js +46 -152
- package/examples/jsm/objects/Reflector.js +7 -0
- package/examples/jsm/objects/Refractor.js +7 -0
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +2 -2
- package/examples/jsm/objects/Water2.js +4 -8
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +1 -1
- package/examples/jsm/postprocessing/AfterimagePass.js +1 -1
- package/examples/jsm/postprocessing/BloomPass.js +1 -1
- package/examples/jsm/postprocessing/BokehPass.js +1 -1
- package/examples/jsm/postprocessing/ClearPass.js +1 -1
- package/examples/jsm/postprocessing/CubeTexturePass.js +1 -1
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -1
- package/examples/jsm/postprocessing/EffectComposer.js +3 -3
- package/examples/jsm/postprocessing/FilmPass.js +1 -1
- package/examples/jsm/postprocessing/GlitchPass.js +4 -2
- package/examples/jsm/postprocessing/HalftonePass.js +1 -1
- package/examples/jsm/postprocessing/MaskPass.js +1 -1
- package/examples/jsm/postprocessing/OutlinePass.js +1 -1
- package/examples/jsm/postprocessing/RenderPass.js +1 -1
- package/examples/jsm/postprocessing/SAOPass.js +2 -2
- package/examples/jsm/postprocessing/SMAAPass.js +1 -1
- package/examples/jsm/postprocessing/SSAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/SSAOPass.js +2 -1
- package/examples/jsm/postprocessing/SSRPass.js +1 -1
- package/examples/jsm/postprocessing/SSRrPass.js +1 -1
- package/examples/jsm/postprocessing/SavePass.js +1 -1
- package/examples/jsm/postprocessing/ShaderPass.js +1 -1
- package/examples/jsm/postprocessing/TAARenderPass.js +1 -1
- package/examples/jsm/postprocessing/TexturePass.js +1 -1
- package/examples/jsm/postprocessing/UnrealBloomPass.js +1 -1
- package/examples/jsm/renderers/CSS2DRenderer.js +5 -4
- package/examples/jsm/renderers/CSS3DRenderer.js +5 -4
- package/examples/jsm/renderers/nodes/Nodes.js +15 -13
- package/examples/jsm/renderers/nodes/ShaderNode.js +194 -41
- package/examples/jsm/renderers/nodes/accessors/MaterialNode.js +6 -6
- package/examples/jsm/renderers/nodes/accessors/ModelViewProjectionNode.js +5 -5
- package/examples/jsm/renderers/nodes/accessors/NormalNode.js +14 -3
- package/examples/jsm/renderers/nodes/accessors/PointUVNode.js +3 -3
- package/examples/jsm/renderers/nodes/accessors/PositionNode.js +15 -5
- package/examples/jsm/renderers/nodes/accessors/SkinningNode.js +107 -0
- package/examples/jsm/renderers/nodes/accessors/UVNode.js +7 -5
- package/examples/jsm/renderers/nodes/core/ArrayInputNode.js +3 -3
- package/examples/jsm/renderers/nodes/core/AttributeNode.js +6 -0
- package/examples/jsm/renderers/nodes/core/BypassNode.js +38 -0
- package/examples/jsm/renderers/nodes/core/CodeNode.js +3 -3
- package/examples/jsm/renderers/nodes/core/ContextNode.js +4 -19
- package/examples/jsm/renderers/nodes/core/ExpressionNode.js +13 -2
- package/examples/jsm/renderers/nodes/core/FunctionNode.js +19 -132
- package/examples/jsm/renderers/nodes/core/InputNode.js +13 -3
- package/examples/jsm/renderers/nodes/core/Node.js +32 -10
- package/examples/jsm/renderers/nodes/core/NodeBuilder.js +146 -128
- package/examples/jsm/renderers/nodes/core/NodeFunction.js +22 -0
- package/examples/jsm/renderers/nodes/core/NodeFunctionInput.js +4 -4
- package/examples/jsm/renderers/nodes/core/NodeKeywords.js +18 -179
- package/examples/jsm/renderers/nodes/core/NodeParser.js +11 -0
- package/examples/jsm/renderers/nodes/core/NodeVar.js +2 -2
- package/examples/jsm/renderers/nodes/core/PropertyNode.js +14 -2
- package/examples/jsm/renderers/nodes/core/TempNode.js +10 -13
- package/examples/jsm/renderers/nodes/core/VarNode.js +12 -7
- package/examples/jsm/renderers/nodes/core/VaryNode.js +23 -8
- package/examples/jsm/renderers/nodes/core/constants.js +2 -0
- package/examples/jsm/renderers/nodes/display/ColorSpaceNode.js +60 -43
- package/examples/jsm/renderers/nodes/display/NormalMapNode.js +21 -22
- package/examples/jsm/renderers/nodes/functions/BSDFs.js +64 -101
- package/examples/jsm/renderers/nodes/functions/PhysicalMaterialFunctions.js +27 -0
- package/examples/jsm/renderers/nodes/inputs/BufferNode.js +25 -0
- package/examples/jsm/renderers/nodes/inputs/IntNode.js +17 -0
- package/examples/jsm/renderers/nodes/inputs/TextureNode.js +10 -2
- package/examples/jsm/renderers/nodes/lights/LightContextNode.js +20 -14
- package/examples/jsm/renderers/nodes/lights/LightNode.js +32 -36
- package/examples/jsm/renderers/nodes/math/CondNode.js +60 -0
- package/examples/jsm/renderers/nodes/math/MathNode.js +90 -37
- package/examples/jsm/renderers/nodes/math/OperatorNode.js +124 -31
- package/examples/jsm/renderers/nodes/parsers/GLSLNodeFunction.js +137 -0
- package/examples/jsm/renderers/nodes/parsers/GLSLNodeParser.js +14 -0
- package/examples/jsm/renderers/nodes/parsers/WGSLNodeFunction.js +89 -0
- package/examples/jsm/renderers/nodes/parsers/WGSLNodeParser.js +14 -0
- package/examples/jsm/renderers/nodes/procedural/CheckerNode.js +7 -9
- package/examples/jsm/renderers/nodes/utils/ArrayElementNode.js +31 -0
- package/examples/jsm/renderers/nodes/utils/ConvertNode.js +33 -0
- package/examples/jsm/renderers/nodes/utils/JoinNode.js +7 -7
- package/examples/jsm/renderers/nodes/utils/OscNode.js +58 -0
- package/examples/jsm/renderers/nodes/utils/SplitNode.js +18 -8
- package/examples/jsm/renderers/nodes/utils/SpriteSheetUVNode.js +7 -7
- package/examples/jsm/renderers/nodes/utils/TimerNode.js +1 -1
- package/examples/jsm/renderers/webgl/nodes/SlotNode.js +22 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +192 -95
- package/examples/jsm/renderers/webgl/nodes/WebGLNodes.js +2 -2
- package/examples/jsm/renderers/webgl/nodes/WebGLPhysicalContextNode.js +2 -2
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +1 -1
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +10 -9
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +2 -4
- package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +2 -4
- package/examples/jsm/renderers/webgpu/WebGPURenderPipeline.js +15 -23
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +44 -65
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +12 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextureUtils.js +61 -28
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +34 -27
- package/examples/jsm/renderers/webgpu/constants.js +2 -2
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodeBuilder.js +453 -95
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +1 -1
- package/examples/jsm/shaders/ConvolutionShader.js +0 -1
- package/examples/jsm/shaders/FXAAShader.js +1 -1
- package/examples/jsm/shaders/FilmShader.js +1 -1
- package/examples/jsm/shaders/GammaCorrectionShader.js +1 -1
- package/examples/jsm/shaders/HorizontalBlurShader.js +1 -2
- package/examples/jsm/shaders/SSRShader.js +1 -1
- package/examples/jsm/shaders/SSRrShader.js +1 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +1 -2
- package/examples/jsm/utils/GeometryUtils.js +1 -1
- package/examples/jsm/utils/RoughnessMipmapper.js +19 -31
- package/examples/jsm/utils/WorkerPool.js +11 -11
- package/examples/jsm/webxr/OculusHandPointerModel.js +6 -6
- package/package.json +24 -18
- package/src/Three.Legacy.js +18 -0
- package/src/Three.js +1 -3
- package/src/cameras/StereoCamera.js +8 -7
- package/src/constants.js +1 -8
- package/src/core/Layers.js +7 -1
- package/src/core/Object3D.js +3 -1
- package/src/extras/PMREMGenerator.js +23 -109
- package/src/extras/core/Interpolations.js +1 -1
- package/src/geometries/LatheGeometry.js +70 -47
- package/src/helpers/CameraHelper.js +1 -1
- package/src/loaders/FileLoader.js +98 -144
- package/src/loaders/ImageLoader.js +9 -4
- package/src/loaders/LoaderUtils.js +26 -0
- package/src/loaders/MaterialLoader.js +7 -4
- package/src/loaders/ObjectLoader.js +2 -0
- package/src/materials/Material.js +4 -4
- package/src/materials/MeshPhysicalMaterial.js +20 -14
- package/src/math/Color.js +0 -38
- package/src/math/MathUtils.js +5 -16
- package/src/math/Ray.js +2 -2
- package/src/math/Sphere.js +10 -1
- package/src/objects/Skeleton.js +1 -0
- package/src/renderers/WebGLMultisampleRenderTarget.js +7 -1
- package/src/renderers/WebGLRenderer.js +105 -132
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +2 -24
- package/src/renderers/shaders/ShaderChunk/encodings_pars_fragment.glsl.js +0 -74
- package/src/renderers/shaders/ShaderChunk/envmap_common_pars_fragment.glsl.js +0 -1
- package/src/renderers/shaders/ShaderChunk/gradientmap_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +19 -6
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +28 -2
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +23 -5
- package/src/renderers/shaders/ShaderLib/vsm.glsl.js +2 -1
- package/src/renderers/shaders/ShaderLib.js +6 -4
- package/src/renderers/shaders/UniformsLib.js +1 -2
- package/src/renderers/webgl/WebGLCapabilities.js +0 -2
- package/src/renderers/webgl/WebGLExtensions.js +1 -0
- package/src/renderers/webgl/WebGLMaterials.js +27 -15
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -0
- package/src/renderers/webgl/WebGLProgram.js +11 -24
- package/src/renderers/webgl/WebGLPrograms.js +194 -33
- package/src/renderers/webgl/WebGLRenderLists.js +4 -14
- package/src/renderers/webgl/WebGLShaderCache.js +120 -0
- package/src/renderers/webgl/WebGLShadowMap.js +14 -5
- package/src/renderers/webgl/WebGLState.js +76 -17
- package/src/renderers/webgl/WebGLTextures.js +367 -61
- package/src/renderers/webgl/WebGLUniforms.js +45 -1
- package/src/renderers/webxr/WebXRManager.js +77 -109
- package/src/scenes/Scene.js +1 -1
- package/src/textures/DataTexture.js +0 -2
- package/src/textures/DataTexture2DArray.js +0 -2
- package/src/textures/DataTexture3D.js +0 -2
- package/src/textures/FramebufferTexture.js +25 -0
- package/src/textures/Texture.js +6 -0
- package/examples/js/controls/DeviceOrientationControls.js +0 -147
- package/examples/js/libs/dat.gui.min.js +0 -14
- package/examples/jsm/controls/DeviceOrientationControls.js +0 -153
- package/examples/jsm/libs/dat.gui.module.js +0 -3575
- package/examples/jsm/libs/glslang.js +0 -78
- package/examples/jsm/libs/glslang.wasm +0 -0
- package/examples/jsm/renderers/nodes/consts/MathConsts.js +0 -7
- package/examples/jsm/renderers/nodes/core/ConstNode.js +0 -39
- package/examples/jsm/renderers/nodes/core/NodeSlot.js +0 -13
- package/examples/jsm/renderers/nodes/core/StructNode.js +0 -80
- package/examples/jsm/renderers/nodes/core/StructVarNode.js +0 -75
- package/examples/jsm/renderers/nodes/functions/EncodingFunctions.js +0 -99
- package/examples/jsm/renderers/nodes/functions/MathFunctions.js +0 -47
- package/examples/jsm/renderers/webgpu/nodes/ShaderLib.js +0 -152
- package/src/extras/objects/ImmediateRenderObject.js +0 -31
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* lil-gui
|
|
3
|
+
* https://lil-gui.georgealways.com
|
|
4
|
+
* @version 0.11.0
|
|
5
|
+
* @author George Michael Brower
|
|
6
|
+
* @license MIT
|
|
7
|
+
*/
|
|
8
|
+
class t{constructor(e,i,s,r,n="div"){this.parent=e,this.object=i,this.property=s,this._disabled=!1,this.initialValue=this.getValue(),this.domElement=document.createElement("div"),this.domElement.classList.add("controller"),this.domElement.classList.add(r),this.$name=document.createElement("div"),this.$name.classList.add("name"),t.nextNameID=t.nextNameID||0,this.$name.id="lil-gui-name-"+ ++t.nextNameID,this.$widget=document.createElement(n),this.$widget.classList.add("widget"),this.$disable=this.$widget,this.domElement.appendChild(this.$name),this.domElement.appendChild(this.$widget),this.parent.children.push(this),this.parent.controllers.push(this),this.parent.$children.appendChild(this.domElement),this._listenCallback=this._listenCallback.bind(this),this.name(s)}name(t){return this._name=t,this.$name.innerHTML=t,this}onChange(t){return this._onChange=t,this}_callOnChange(){this.parent._callOnChange(this),void 0!==this._onChange&&this._onChange.call(this,this.getValue())}onFinishChange(t){return this.onChange(t)}reset(){return this.setValue(this.initialValue),this}enable(t=!0){return this.disable(!t)}disable(t=!0){return t===this._disabled||(this._disabled=t,this.domElement.classList.toggle("disabled",t),t?this.$disable.setAttribute("disabled","disabled"):this.$disable.removeAttribute("disabled")),this}options(t){const e=this.parent.add(this.object,this.property,t);return e.name(this._name),this.destroy(),e}min(t){return this}max(t){return this}step(t){return this}listen(t=!0){return this._listening=t,void 0!==this._listenCallbackID&&(cancelAnimationFrame(this._listenCallbackID),this._listenCallbackID=void 0),this._listening&&this._listenCallback(),this}_listenCallback(){this._listenCallbackID=requestAnimationFrame(this._listenCallback);const t=this.getValue();t===this._listenValuePrev&&Object(t)!==t||this.updateDisplay(),this._listenValuePrev=t}getValue(){return this.object[this.property]}setValue(t){return this.object[this.property]=t,this._callOnChange(),this.updateDisplay(),this}updateDisplay(){return this}load(t){this.setValue(t)}save(){return this.getValue()}destroy(){this.parent.children.splice(this.parent.children.indexOf(this),1),this.parent.controllers.splice(this.parent.controllers.indexOf(this),1),this.parent.$children.removeChild(this.domElement)}}class e extends t{constructor(t,e,i){super(t,e,i,"boolean","label"),this.$input=document.createElement("input"),this.$input.setAttribute("type","checkbox"),this.$widget.appendChild(this.$input),this.$input.addEventListener("change",()=>{this.setValue(this.$input.checked)}),this.$disable=this.$input,this.updateDisplay()}updateDisplay(){return this.$input.checked=this.getValue(),this}}function i(t){let e,i;return(e=t.match(/(#|0x)?([a-f0-9]{6})/i))?i=e[2]:(e=t.match(/rgb\(\s*(\d*)\s*,\s*(\d*)\s*,\s*(\d*)\s*\)/))?i=parseInt(e[1]).toString(16).padStart(2,0)+parseInt(e[2]).toString(16).padStart(2,0)+parseInt(e[3]).toString(16).padStart(2,0):(e=t.match(/^#?([a-f0-9])([a-f0-9])([a-f0-9])$/i))&&(i=e[1]+e[1]+e[2]+e[2]+e[3]+e[3]),!!i&&"#"+i}const s={isPrimitive:!0,match:t=>"string"==typeof t,fromHexString:i,toHexString:i},r={isPrimitive:!0,match:t=>"number"==typeof t,fromHexString:t=>parseInt(t.substring(1),16),toHexString:t=>"#"+t.toString(16).padStart(6,0)},n={isPrimitive:!1,match:Array.isArray,fromHexString(t,e,i=1){const s=r.fromHexString(t);e[0]=(s>>16&255)/255*i,e[1]=(s>>8&255)/255*i,e[2]=(255&s)/255*i},toHexString:([t,e,i],s=1)=>r.toHexString(t*(s=255/s)<<16^e*s<<8^i*s<<0)},l={isPrimitive:!1,match:t=>Object(t)===t,fromHexString(t,e,i=1){const s=r.fromHexString(t);e.r=(s>>16&255)/255*i,e.g=(s>>8&255)/255*i,e.b=(255&s)/255*i},toHexString:({r:t,g:e,b:i},s=1)=>r.toHexString(t*(s=255/s)<<16^e*s<<8^i*s<<0)},o=[s,r,n,l];class a extends t{constructor(t,e,s,r){var n;super(t,e,s,"color"),this.$input=document.createElement("input"),this.$input.setAttribute("type","color"),this.$input.setAttribute("tabindex",-1),this.$input.setAttribute("aria-labelledby",this.$name.id),this.$text=document.createElement("input"),this.$text.setAttribute("type","text"),this.$text.setAttribute("spellcheck","false"),this.$text.setAttribute("aria-labelledby",this.$name.id),this.$display=document.createElement("div"),this.$display.classList.add("display"),this.$display.appendChild(this.$input),this.$widget.appendChild(this.$display),this.$widget.appendChild(this.$text),this._format=(n=this.initialValue,o.find(t=>t.match(n))),this._rgbScale=r,this._initialValueHexString=this.save(),this._textFocused=!1;const l=()=>{this._setValueFromHexString(this.$input.value)};this.$input.addEventListener("change",l),this.$input.addEventListener("input",l),this.$input.addEventListener("focus",()=>{this.$display.classList.add("focus")}),this.$input.addEventListener("blur",()=>{this.$display.classList.remove("focus")}),this.$text.addEventListener("input",()=>{const t=i(this.$text.value);t&&this._setValueFromHexString(t)}),this.$text.addEventListener("focus",()=>{this._textFocused=!0,this.$text.select()}),this.$text.addEventListener("blur",()=>{this._textFocused=!1,this.updateDisplay()}),this.$disable=this.$text,this.updateDisplay()}reset(){return this._setValueFromHexString(this._initialValueHexString),this}_setValueFromHexString(t){if(this._format.isPrimitive){const e=this._format.fromHexString(t);this.setValue(e)}else this._format.fromHexString(t,this.getValue(),this._rgbScale),this._callOnChange(),this.updateDisplay()}save(){return this._format.toHexString(this.getValue(),this._rgbScale)}load(t){this._setValueFromHexString(t)}updateDisplay(){return this.$input.value=this._format.toHexString(this.getValue(),this._rgbScale),this._textFocused||(this.$text.value=this.$input.value.substring(1)),this.$display.style.backgroundColor=this.$input.value,this}}class h extends t{constructor(t,e,i){super(t,e,i,"function"),this.$button=document.createElement("button"),this.$button.appendChild(this.$name),this.$widget.appendChild(this.$button),this.$button.addEventListener("click",t=>{t.preventDefault(),this.getValue().call(this.object)}),this.$button.addEventListener("touchstart",()=>{}),this.$disable=this.$button}}class d extends t{constructor(t,e,i,s,r,n){super(t,e,i,"number"),this._initInput(),this.min(s),this.max(r);const l=void 0!==n;this.step(l?n:this._getImplicitStep(),l),this.updateDisplay()}min(t){return this._min=t,this._onUpdateMinMax(),this}max(t){return this._max=t,this._onUpdateMinMax(),this}step(t,e=!0){return this._step=t,this._stepExplicit=e,this}updateDisplay(){const t=this.getValue();if(this._hasSlider){const e=(t-this._min)/(this._max-this._min);this.$fill.style.setProperty("width",100*e+"%")}return this._inputFocused||(this.$input.value=t),this}_initInput(){this.$input=document.createElement("input"),this.$input.setAttribute("type","text"),this.$input.setAttribute("inputmode","numeric"),this.$input.setAttribute("aria-labelledby",this.$name.id),this.$widget.appendChild(this.$input),this.$disable=this.$input;const t=t=>{const e=parseFloat(this.$input.value);isNaN(e)||(this._snapClampSetValue(e+t),this.$input.value=this.getValue())};this.$input.addEventListener("focus",()=>{this._inputFocused=!0}),this.$input.addEventListener("input",()=>{const t=parseFloat(this.$input.value);isNaN(t)||this.setValue(this._clamp(t))}),this.$input.addEventListener("blur",()=>{this._inputFocused=!1,this.updateDisplay()}),this.$input.addEventListener("keydown",e=>{"Enter"===e.code&&this.$input.blur(),"ArrowUp"===e.code&&(e.preventDefault(),t(this._step*this._arrowKeyMultiplier(e))),"ArrowDown"===e.code&&(e.preventDefault(),t(-1*this._step*this._arrowKeyMultiplier(e)))}),this.$input.addEventListener("wheel",e=>{this._inputFocused&&(e.preventDefault(),t(this._normalizeMouseWheel(e)*this._step))},{passive:!1})}_initSlider(){this._hasSlider=!0,this.$slider=document.createElement("div"),this.$slider.classList.add("slider"),this.$fill=document.createElement("div"),this.$fill.classList.add("fill"),this.$slider.appendChild(this.$fill),this.$widget.insertBefore(this.$slider,this.$input),this.domElement.classList.add("hasSlider");const t=t=>{const e=this.$slider.getBoundingClientRect();let i=(s=t,r=e.left,n=e.right,l=this._min,o=this._max,(s-r)/(n-r)*(o-l)+l);var s,r,n,l,o;this._snapClampSetValue(i)},e=e=>{t(e.clientX)},i=()=>{this._setActiveStyle(!1),window.removeEventListener("mousemove",e),window.removeEventListener("mouseup",i)};this.$slider.addEventListener("mousedown",s=>{t(s.clientX),this._setActiveStyle(!0),window.addEventListener("mousemove",e),window.addEventListener("mouseup",i)});let s,r,n=!1;const l=e=>{if(n){const i=e.touches[0].clientX-s,a=e.touches[0].clientY-r;Math.abs(i)>Math.abs(a)?(e.preventDefault(),t(e.touches[0].clientX),this._setActiveStyle(!0),n=!1):(window.removeEventListener("touchmove",l),window.removeEventListener("touchend",o))}else e.preventDefault(),t(e.touches[0].clientX)},o=()=>{this._setActiveStyle(!1),window.removeEventListener("touchmove",l),window.removeEventListener("touchend",o)};this.$slider.addEventListener("touchstart",e=>{e.touches.length>1||(this._hasScrollBar?(s=e.touches[0].clientX,r=e.touches[0].clientY,n=!0):(e.preventDefault(),t(e.touches[0].clientX),this._setActiveStyle(!0),n=!1),window.addEventListener("touchmove",l,{passive:!1}),window.addEventListener("touchend",o))});this.$slider.addEventListener("wheel",t=>{if(Math.abs(t.deltaX)<Math.abs(t.deltaY)&&this._hasScrollBar)return;t.preventDefault();const e=this._normalizeMouseWheel(t)*this._step;this._snapClampSetValue(this.getValue()+e)},{passive:!1})}_setActiveStyle(t){this.$slider.classList.toggle("active",t),document.body.classList.toggle("lil-gui-slider-active",t)}_getImplicitStep(){return this._hasMin&&this._hasMax?(this._max-this._min)/1e3:.1}_onUpdateMinMax(){!this._hasSlider&&this._hasMin&&this._hasMax&&(this._stepExplicit||this.step(this._getImplicitStep(),!1),this._initSlider(),this.updateDisplay())}_normalizeMouseWheel(t){let{deltaX:e,deltaY:i}=t;Math.floor(t.deltaY)!==t.deltaY&&t.wheelDelta&&(e=0,i=-t.wheelDelta/120);return e+-i}_arrowKeyMultiplier(t){return this._stepExplicit?t.shiftKey?10:1:t.shiftKey?100:t.altKey?1:10}_snap(t){const e=Math.round(t/this._step)*this._step;return parseFloat(e.toPrecision(15))}_clamp(t){const e=this._hasMin?this._min:-1/0,i=this._hasMax?this._max:1/0;return Math.max(e,Math.min(i,t))}_snapClampSetValue(t){this.setValue(this._clamp(this._snap(t)))}get _hasScrollBar(){const t=this.parent.root.$children;return t.scrollHeight>t.clientHeight}get _hasMin(){return void 0!==this._min}get _hasMax(){return void 0!==this._max}}class c extends t{constructor(t,e,i,s){super(t,e,i,"option"),this.$select=document.createElement("select"),this.$select.setAttribute("aria-labelledby",this.$name.id),this.$display=document.createElement("div"),this.$display.classList.add("display"),this._values=Array.isArray(s)?s:Object.values(s),this._names=Array.isArray(s)?s:Object.keys(s),this._names.forEach(t=>{const e=document.createElement("option");e.innerHTML=t,this.$select.appendChild(e)}),this.$select.addEventListener("change",()=>{this.setValue(this._values[this.$select.selectedIndex])}),this.$select.addEventListener("focus",()=>{this.$display.classList.add("focus")}),this.$select.addEventListener("blur",()=>{this.$display.classList.remove("focus")}),this.$widget.appendChild(this.$select),this.$widget.appendChild(this.$display),this.$disable=this.$select,this.updateDisplay()}updateDisplay(){const t=this.getValue(),e=this._values.indexOf(t);return this.$select.selectedIndex=e,this.$display.innerHTML=-1===e?t:this._names[e],this}}class u extends t{constructor(t,e,i){super(t,e,i,"string"),this.$input=document.createElement("input"),this.$input.setAttribute("type","text"),this.$input.setAttribute("aria-labelledby",this.$name.id),this.$input.addEventListener("input",()=>{this.setValue(this.$input.value)}),this.$input.addEventListener("keydown",t=>{"Enter"===t.code&&this.$input.blur()}),this.$widget.appendChild(this.$input),this.$disable=this.$input,this.updateDisplay()}updateDisplay(){return this.$input.value=this.getValue(),this}}let p=!1;class g{constructor({parent:t,autoPlace:e=void 0===t,touchStyles:i=!0,container:s,injectStyles:r=!0,title:n="Controls",width:l}={}){if(this.parent=t,this.root=t?t.root:this,this.children=[],this.controllers=[],this.folders=[],this._closed=!1,this.domElement=document.createElement("div"),this.domElement.classList.add("lil-gui"),this.$title=document.createElement("div"),this.$title.classList.add("title"),this.$title.setAttribute("role","button"),this.$title.setAttribute("aria-expanded",!0),this.$title.setAttribute("tabindex",0),this.$title.addEventListener("click",()=>this.openAnimated(this._closed)),this.$title.addEventListener("keydown",t=>{"Enter"!==t.code&&"Space"!==t.code||(t.preventDefault(),this.$title.click())}),this.$title.addEventListener("touchstart",()=>{}),this.$children=document.createElement("div"),this.$children.classList.add("children"),this.domElement.appendChild(this.$title),this.domElement.appendChild(this.$children),this.title(n),this.parent)return this.parent.children.push(this),this.parent.folders.push(this),void this.parent.$children.appendChild(this.domElement);this.domElement.classList.add("root"),!p&&r&&(!function(t){const e=document.createElement("style");e.innerHTML=t;const i=document.querySelector("head link[rel=stylesheet], head style");i?document.head.insertBefore(e,i):document.head.appendChild(e)}('.lil-gui{font-family:var(--font-family);font-size:var(--font-size);line-height:1;font-weight:normal;font-style:normal;text-align:left;background-color:var(--background-color);color:var(--text-color);user-select:none;-webkit-user-select:none;touch-action:manipulation;--background-color:#1f1f1f;--text-color:#ebebeb;--title-background-color:#111;--title-text-color:#ebebeb;--widget-color:#424242;--hover-color:#4f4f4f;--focus-color:#595959;--number-color:#2cc9ff;--string-color:#a2db3c;--font-size:11px;--input-font-size:11px;--font-family:-apple-system,BlinkMacSystemFont,"Lucida Grande","Segoe UI",Roboto,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";--font-family-mono:Menlo,Monaco,Consolas,"Droid Sans Mono",monospace,"Droid Sans Fallback";--padding:4px;--spacing:4px;--widget-height:20px;--name-width:45%;--slider-knob-width:2px;--slider-input-width:27%;--color-input-width:27%;--slider-input-min-width:45px;--color-input-min-width:45px;--folder-indent:7px;--widget-padding:0 0 0 3px;--widget-border-radius:2px;--checkbox-size:calc(.75*var(--widget-height));--scrollbar-width: 5px}.lil-gui,.lil-gui *{box-sizing:border-box;margin:0}.lil-gui.root{width:var(--width, 245px);display:flex;flex-direction:column}.lil-gui.root>.title{background:var(--title-background-color);color:var(--title-text-color)}.lil-gui.root>.children{overflow:auto}.lil-gui.root>.children::-webkit-scrollbar{width:var(--scrollbar-width);height:var(--scrollbar-width);background:var(--background-color)}.lil-gui.root>.children::-webkit-scrollbar-thumb{border-radius:var(--scrollbar-width);background:var(--focus-color)}.lil-gui .lil-gui{--background-color:inherit;--text-color:inherit;--title-background-color:inherit;--title-text-color:inherit;--widget-color:inherit;--hover-color:inherit;--focus-color:inherit;--number-color:inherit;--string-color:inherit;--font-size:inherit;--input-font-size:inherit;--font-family:inherit;--font-family-mono:inherit;--padding:inherit;--spacing:inherit;--widget-height:inherit;--name-width:inherit;--slider-knob-width:inherit;--slider-input-width:inherit;--color-input-width:inherit;--slider-input-min-width:inherit;--color-input-min-width:inherit;--folder-indent:inherit;--widget-padding:inherit;--widget-border-radius:inherit;--checkbox-size:inherit}@media(pointer: coarse){.lil-gui.allow-touch-styles{--widget-height: 28px;--padding: 6px;--spacing: 6px;--font-size: 13px;--input-font-size: 16px;--folder-indent: 10px;--widget-padding: 0 0 0 3px;--scrollbar-width: 7px;--slider-input-min-width: 50px;--color-input-min-width: 65px}}.lil-gui.force-touch-styles{--widget-height: 28px;--padding: 6px;--spacing: 6px;--font-size: 13px;--input-font-size: 16px;--folder-indent: 10px;--widget-padding: 0 0 0 3px;--scrollbar-width: 7px;--slider-input-min-width: 50px;--color-input-min-width: 65px}.lil-gui.autoPlace{max-height:100%;position:fixed;top:0;right:15px;z-index:1001}.lil-gui .controller{display:flex;align-items:center;padding:0 var(--padding);margin:var(--spacing) 0}.lil-gui .controller.disabled{opacity:.5}.lil-gui .controller.disabled,.lil-gui .controller.disabled *{pointer-events:none !important}.lil-gui .controller .name{min-width:var(--name-width);flex-shrink:0;white-space:pre;padding-right:var(--spacing);line-height:var(--widget-height)}.lil-gui .controller .widget{position:relative;display:flex;align-items:center;width:100%;min-height:var(--widget-height)}.lil-gui .controller.function .name{line-height:unset;padding:0}.lil-gui .controller.string input{color:var(--string-color)}.lil-gui .controller.boolean .widget{cursor:pointer}.lil-gui .controller.color .display{width:100%;height:var(--widget-height);border-radius:var(--widget-border-radius);position:relative}@media(hover: hover){.lil-gui .controller.color .display:hover:before{content:" ";display:block;position:absolute;border-radius:var(--widget-border-radius);border:1px solid #fff9;left:0;right:0;top:0;bottom:0}}.lil-gui .controller.color input[type=color]{opacity:0;width:100%;height:100%;cursor:pointer}.lil-gui .controller.color input[type=text]{margin-left:var(--spacing);font-family:var(--font-family-mono);min-width:var(--color-input-min-width);width:var(--color-input-width);flex-shrink:0}.lil-gui .controller.option select{opacity:0;position:absolute;width:100%;max-width:100%}.lil-gui .controller.option .display{position:relative;pointer-events:none;border-radius:var(--widget-border-radius);height:var(--widget-height);line-height:var(--widget-height);max-width:100%;overflow:hidden;word-break:break-all;padding-left:.55em;padding-right:1.75em;background:var(--widget-color)}@media(hover: hover){.lil-gui .controller.option .display.focus{background:var(--focus-color)}}.lil-gui .controller.option .display.active{background:var(--focus-color)}.lil-gui .controller.option .display:after{font-family:"lil-gui";content:"↕";position:absolute;top:0;right:0;bottom:0;padding-right:.375em}.lil-gui .controller.option .widget,.lil-gui .controller.option select{cursor:pointer}@media(hover: hover){.lil-gui .controller.option .widget:hover .display{background:var(--hover-color)}}.lil-gui .controller.number input{color:var(--number-color)}.lil-gui .controller.number.hasSlider input{margin-left:var(--spacing);width:var(--slider-input-width);min-width:var(--slider-input-min-width);flex-shrink:0}.lil-gui .controller.number .slider{width:100%;height:var(--widget-height);background-color:var(--widget-color);border-radius:var(--widget-border-radius);padding-right:var(--slider-knob-width);overflow:hidden;cursor:ew-resize;touch-action:pan-y}@media(hover: hover){.lil-gui .controller.number .slider:hover{background-color:var(--hover-color)}}.lil-gui .controller.number .slider.active{background-color:var(--focus-color)}.lil-gui .controller.number .slider.active .fill{opacity:.95}.lil-gui .controller.number .fill{height:100%;border-right:var(--slider-knob-width) solid var(--number-color);box-sizing:content-box}.lil-gui-slider-active .lil-gui{--hover-color: var(--widget-color)}.lil-gui-slider-active *{cursor:ew-resize !important}.lil-gui .title{--title-height: calc(var(--widget-height) + var(--spacing) * 1.25);height:var(--title-height);line-height:calc(var(--title-height) - 4px);font-weight:600;padding:0 var(--padding);-webkit-tap-highlight-color:transparent;cursor:pointer;outline:none;text-decoration-skip:objects}.lil-gui .title:before{font-family:"lil-gui";content:"▾";padding-right:2px;display:inline-block}.lil-gui .title:active{background:var(--title-background-color);opacity:.75}@media(hover: hover){.lil-gui .title:hover{background:var(--title-background-color);opacity:.85}.lil-gui .title:focus{text-decoration:underline var(--focus-color)}}.lil-gui.root>.title:focus{text-decoration:none !important}.lil-gui.closed>.title:before{content:"▸"}.lil-gui.closed>.children{transform:translateY(-7px);opacity:0}.lil-gui.closed:not(.transition)>.children{display:none}.lil-gui.transition>.children{transition-duration:300ms;transition-property:height,opacity,transform;transition-timing-function:cubic-bezier(0.215, 0.61, 0.355, 1);overflow:hidden;pointer-events:none}.lil-gui .children:empty:before{content:"Empty";padding:0 var(--padding);margin:var(--spacing) 0;display:block;height:var(--widget-height);font-style:italic;line-height:var(--widget-height);opacity:.5}.lil-gui.root>.children>.lil-gui>.title{border:0 solid var(--widget-color);border-width:1px 0;transition:border-color 300ms}.lil-gui.root>.children>.lil-gui.closed>.title{border-bottom-color:transparent}.lil-gui+.controller{border-top:1px solid var(--widget-color);margin-top:0;padding-top:var(--spacing)}.lil-gui .lil-gui .lil-gui>.title{border:none}.lil-gui .lil-gui .lil-gui>.children{border:none;margin-left:var(--folder-indent);border-left:2px solid var(--widget-color)}.lil-gui .lil-gui .controller{border:none}.lil-gui input{-webkit-tap-highlight-color:transparent;border:0;outline:none;font-family:var(--font-family);font-size:var(--input-font-size);border-radius:var(--widget-border-radius);height:var(--widget-height);background:var(--widget-color);color:var(--text-color);width:100%}@media(hover: hover){.lil-gui input:hover{background:var(--hover-color)}.lil-gui input:active{background:var(--focus-color)}}.lil-gui input[type=text]{padding:var(--widget-padding)}.lil-gui input[type=text]:focus{background:var(--focus-color)}.lil-gui input[type=checkbox]{appearance:none;-webkit-appearance:none;height:var(--checkbox-size);width:var(--checkbox-size);border-radius:var(--widget-border-radius);text-align:center}.lil-gui input[type=checkbox]:checked:before{font-family:"lil-gui";content:"✓";font-size:var(--checkbox-size);line-height:var(--checkbox-size)}@media(hover: hover){.lil-gui input[type=checkbox]:focus{box-shadow:inset 0 0 0 1px var(--focus-color)}}.lil-gui button{-webkit-tap-highlight-color:transparent;outline:none;cursor:pointer;font-family:var(--font-family);font-size:var(--font-size);color:var(--text-color);width:100%;height:var(--widget-height);text-transform:none;background:var(--widget-color);border-radius:var(--widget-border-radius);border:1px solid var(--widget-color);text-align:center;line-height:calc(var(--widget-height)*.725)}@media(hover: hover){.lil-gui button:hover{background:var(--hover-color);border-color:var(--hover-color)}.lil-gui button:focus{border-color:var(--focus-color)}}.lil-gui button:active{background:var(--focus-color)}@font-face{font-family:"lil-gui";src:url("data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAUsAAsAAAAACJwAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABHU1VCAAABCAAAAH4AAADAImwmYE9TLzIAAAGIAAAAPwAAAGBKqH5SY21hcAAAAcgAAAD0AAACrukyyJBnbHlmAAACvAAAAF8AAACEIZ5WI2hlYWQAAAMcAAAAJwAAADZfcj23aGhlYQAAA0QAAAAYAAAAJAC5AHhobXR4AAADXAAAABAAAABMAZAAAGxvY2EAAANsAAAAFAAAACgCEgIybWF4cAAAA4AAAAAeAAAAIAEfABJuYW1lAAADoAAAASIAAAIK9SUU/XBvc3QAAATEAAAAZgAAAJCTcMc2eJxVjbEOgjAURU+hFRBK1dGRL+ALnAiToyMLEzFpnPz/eAshwSa97517c/MwwJmeB9kwPl+0cf5+uGPZXsqPu4nvZabcSZldZ6kfyWnomFY/eScKqZNWupKJO6kXN3K9uCVoL7iInPr1X5baXs3tjuMqCtzEuagm/AAlzQgPAAB4nGNgYRBlnMDAysDAYM/gBiT5oLQBAwuDJAMDEwMrMwNWEJDmmsJwgCFeXZghBcjlZMgFCzOiKOIFAB71Bb8AeJy1kjFuwkAQRZ+DwRAwBtNQRUGKQ8OdKCAWUhAgKLhIuAsVSpWz5Bbkj3dEgYiUIszqWdpZe+Z7/wB1oCYmIoboiwiLT2WjKl/jscrHfGg/pKdMkyklC5Zs2LEfHYpjcRoPzme9MWWmk3dWbK9ObkWkikOetJ554fWyoEsmdSlt+uR0pCJR34b6t/TVg1SY3sYvdf8vuiKrpyaDXDISiegp17p7579Gp3p++y7HPAiY9pmTibljrr85qSidtlg4+l25GLCaS8e6rRxNBmsnERunKbaOObRz7N72ju5vdAjYpBXHgJylOAVsMseDAPEP8LYoUHicY2BiAAEfhjAGJgZWBgZ7RnFRdnVJELCRlBSRlATJMoLV2DK4glSYs6ubq5vbKrJLSbGrgEmovDuDJVhe3VzcXFwNLCOILB/C4IuQ1xTn5FPilBTj5FPmBAB76woyAHicY2BkYGAA4sklsQ/j+W2+MnAzpDBgAyEMYUCSg4EJxAEAvVwFCgB4nGNgZGBgSGFggJMhDIwMqEAYAByHATJ4nGNgAIIUNEwmAABl3AGReJxjYAACIQYlBiMGJ3wQAEcQBEV4nGNgZGBgEGZgY2BiAAEQyQWEDAz/wXwGAAsPATIAAHicXdBNSsNAHAXwl35iA0UQXYnMShfS9GPZA7T7LgIu03SSpkwzYTIt1BN4Ak/gKTyAeCxfw39jZkjymzcvAwmAW/wgwHUEGDb36+jQQ3GXGot79L24jxCP4gHzF/EIr4jEIe7wxhOC3g2TMYy4Q7+Lu/SHuEd/ivt4wJd4wPxbPEKMX3GI5+DJFGaSn4qNzk8mcbKSR6xdXdhSzaOZJGtdapd4vVPbi6rP+cL7TGXOHtXKll4bY1Xl7EGnPtp7Xy2n00zyKLVHfkHBa4IcJ2oD3cgggWvt/V/FbDrUlEUJhTn/0azVWbNTNr0Ens8de1tceK9xZmfB1CPjOmPH4kitmvOubcNpmVTN3oFJyjzCvnmrwhJTzqzVj9jiSX911FjeAAB4nG3HMRKCMBBA0f0giiKi4DU8k0V2GWbIZDOh4PoWWvq6J5V8If9NVNQcaDhyouXMhY4rPTcG7jwYmXhKq8Wz+p762aNaeYXom2n3m2dLTVgsrCgFJ7OTmIkYbwIbC6vIB7WmFfAAAA==") format("woff")}'),p=!0),s?s.appendChild(this.domElement):e&&(this.domElement.classList.add("autoPlace"),document.body.appendChild(this.domElement)),i&&this.domElement.classList.add("allow-touch-styles"),l&&this.domElement.style.setProperty("--width",l+"px")}add(t,i,s,r,n){if(Object(s)===s)return new c(this,t,i,s);const l=t[i];switch(typeof l){case"number":return new d(this,t,i,s,r,n);case"boolean":return new e(this,t,i);case"string":return new u(this,t,i);case"function":return new h(this,t,i)}console.error(`Failed to add controller for "${i}"`,l,t)}addColor(t,e,i=1){return new a(this,t,e,i)}addFolder(t){return new g({parent:this,title:t})}load(t,e=!0){if(!("controllers"in t))throw new Error('Invalid load object. Should contain a "controllers" key.');return this.controllers.forEach(e=>{e instanceof h||e._name in t.controllers&&e.load(t.controllers[e._name])}),e&&t.folders&&this.folders.forEach(e=>{e._title in t.folders&&e.load(t.folders[e._title])}),this}save(t=!0){const e={controllers:{},folders:{}};return this.controllers.forEach(t=>{if(!(t instanceof h)){if(t._name in e.controllers)throw new Error(`Cannot save GUI with duplicate property "${t._name}"`);e.controllers[t._name]=t.save()}}),t&&this.folders.forEach(t=>{if(t._title in e.folders)throw new Error(`Cannot save GUI with duplicate folder "${t._title}"`);e.folders[t._title]=t.save()}),e}open(t=!0){return this._closed=!t,this.$title.setAttribute("aria-expanded",!this._closed),this.domElement.classList.toggle("closed",this._closed),this}close(){return this.open(!1)}openAnimated(t=!0){return this._closed=!t,this.$title.setAttribute("aria-expanded",!this._closed),requestAnimationFrame(()=>{const e=this.$children.clientHeight;this.$children.style.height=e+"px",this.domElement.classList.add("transition");const i=t=>{t.target===this.$children&&(this.$children.style.height="",this.domElement.classList.remove("transition"),this.$children.removeEventListener("transitionend",i))};this.$children.addEventListener("transitionend",i);const s=t?this.$children.scrollHeight:0;this.domElement.classList.toggle("closed",!t),requestAnimationFrame(()=>{this.$children.style.height=s+"px"})}),this}title(t){return this._title=t,this.$title.innerHTML=t,this}reset(t=!0){return(t?this.controllersRecursive():this.controllers).forEach(t=>t.reset()),this}onChange(t){return this._onChange=t,this}_callOnChange(t){this.parent&&this.parent._callOnChange(t),void 0!==this._onChange&&this._onChange.call(this,{object:t.object,property:t.property,value:t.getValue(),controller:t})}destroy(){this.parent&&(this.parent.children.splice(this.parent.children.indexOf(this),1),this.parent.folders.splice(this.parent.folders.indexOf(this),1)),this.domElement.parentElement&&this.domElement.parentElement.removeChild(this.domElement),Array.from(this.children).forEach(t=>t.destroy()),this._onResize&&window.removeEventListener("resize",this._onResize)}controllersRecursive(){let t=Array.from(this.controllers);return this.folders.forEach(e=>{t=t.concat(e.controllersRecursive())}),t}foldersRecursive(){let t=Array.from(this.folders);return this.folders.forEach(e=>{t=t.concat(e.foldersRecursive())}),t}}export default g;export{e as BooleanController,a as ColorController,t as Controller,h as FunctionController,g as GUI,d as NumberController,c as OptionController,u as StringController};
|
|
Binary file
|
|
@@ -46,6 +46,9 @@ class RectAreaLightUniformsLib {
|
|
|
46
46
|
UniformsLib.LTC_FLOAT_1 = new DataTexture( ltc_float_1, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );
|
|
47
47
|
UniformsLib.LTC_FLOAT_2 = new DataTexture( ltc_float_2, 64, 64, RGBAFormat, FloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );
|
|
48
48
|
|
|
49
|
+
UniformsLib.LTC_FLOAT_1.needsUpdate = true;
|
|
50
|
+
UniformsLib.LTC_FLOAT_2.needsUpdate = true;
|
|
51
|
+
|
|
49
52
|
const ltc_half_1 = new Uint16Array( LTC_MAT_1.length );
|
|
50
53
|
|
|
51
54
|
LTC_MAT_1.forEach( function ( x, index ) {
|
|
@@ -65,6 +68,10 @@ class RectAreaLightUniformsLib {
|
|
|
65
68
|
UniformsLib.LTC_HALF_1 = new DataTexture( ltc_half_1, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );
|
|
66
69
|
UniformsLib.LTC_HALF_2 = new DataTexture( ltc_half_2, 64, 64, RGBAFormat, HalfFloatType, UVMapping, ClampToEdgeWrapping, ClampToEdgeWrapping, LinearFilter, NearestFilter, 1 );
|
|
67
70
|
|
|
71
|
+
UniformsLib.LTC_HALF_1.needsUpdate = true;
|
|
72
|
+
UniformsLib.LTC_HALF_2.needsUpdate = true;
|
|
73
|
+
|
|
74
|
+
|
|
68
75
|
}
|
|
69
76
|
|
|
70
77
|
}
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
* dashed: <boolean>,
|
|
6
6
|
* dashScale: <float>,
|
|
7
7
|
* dashSize: <float>,
|
|
8
|
+
* dashOffset: <float>,
|
|
8
9
|
* gapSize: <float>,
|
|
9
10
|
* resolution: <Vector2>, // to be set by renderer
|
|
10
11
|
* }
|
|
@@ -16,7 +17,7 @@ import {
|
|
|
16
17
|
UniformsLib,
|
|
17
18
|
UniformsUtils,
|
|
18
19
|
Vector2
|
|
19
|
-
} from
|
|
20
|
+
} from 'three';
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
UniformsLib.line = {
|
|
@@ -24,6 +25,7 @@ UniformsLib.line = {
|
|
|
24
25
|
worldUnits: { value: 1 },
|
|
25
26
|
linewidth: { value: 1 },
|
|
26
27
|
resolution: { value: new Vector2( 1, 1 ) },
|
|
28
|
+
dashOffset: { value: 0 },
|
|
27
29
|
dashScale: { value: 1 },
|
|
28
30
|
dashSize: { value: 1 },
|
|
29
31
|
gapSize: { value: 1 } // todo FIX - maybe change to totalSize
|
|
@@ -39,7 +41,7 @@ ShaderLib[ 'line' ] = {
|
|
|
39
41
|
] ),
|
|
40
42
|
|
|
41
43
|
vertexShader:
|
|
42
|
-
|
|
44
|
+
/* glsl */`
|
|
43
45
|
#include <common>
|
|
44
46
|
#include <color_pars_vertex>
|
|
45
47
|
#include <fog_pars_vertex>
|
|
@@ -55,10 +57,23 @@ ShaderLib[ 'line' ] = {
|
|
|
55
57
|
attribute vec3 instanceColorStart;
|
|
56
58
|
attribute vec3 instanceColorEnd;
|
|
57
59
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
60
|
+
#ifdef WORLD_UNITS
|
|
61
|
+
|
|
62
|
+
varying vec4 worldPos;
|
|
63
|
+
varying vec3 worldStart;
|
|
64
|
+
varying vec3 worldEnd;
|
|
65
|
+
|
|
66
|
+
#ifdef USE_DASH
|
|
67
|
+
|
|
68
|
+
varying vec2 vUv;
|
|
69
|
+
|
|
70
|
+
#endif
|
|
71
|
+
|
|
72
|
+
#else
|
|
73
|
+
|
|
74
|
+
varying vec2 vUv;
|
|
75
|
+
|
|
76
|
+
#endif
|
|
62
77
|
|
|
63
78
|
#ifdef USE_DASH
|
|
64
79
|
|
|
@@ -95,19 +110,26 @@ ShaderLib[ 'line' ] = {
|
|
|
95
110
|
#ifdef USE_DASH
|
|
96
111
|
|
|
97
112
|
vLineDistance = ( position.y < 0.5 ) ? dashScale * instanceDistanceStart : dashScale * instanceDistanceEnd;
|
|
113
|
+
vUv = uv;
|
|
98
114
|
|
|
99
115
|
#endif
|
|
100
116
|
|
|
101
117
|
float aspect = resolution.x / resolution.y;
|
|
102
118
|
|
|
103
|
-
vUv = uv;
|
|
104
|
-
|
|
105
119
|
// camera space
|
|
106
120
|
vec4 start = modelViewMatrix * vec4( instanceStart, 1.0 );
|
|
107
121
|
vec4 end = modelViewMatrix * vec4( instanceEnd, 1.0 );
|
|
108
122
|
|
|
109
|
-
|
|
110
|
-
|
|
123
|
+
#ifdef WORLD_UNITS
|
|
124
|
+
|
|
125
|
+
worldStart = start.xyz;
|
|
126
|
+
worldEnd = end.xyz;
|
|
127
|
+
|
|
128
|
+
#else
|
|
129
|
+
|
|
130
|
+
vUv = uv;
|
|
131
|
+
|
|
132
|
+
#endif
|
|
111
133
|
|
|
112
134
|
// special case for perspective projection, and segments that terminate either in, or behind, the camera plane
|
|
113
135
|
// clearly the gpu firmware has a way of addressing this issue when projecting into ndc space
|
|
@@ -250,22 +272,38 @@ ShaderLib[ 'line' ] = {
|
|
|
250
272
|
`,
|
|
251
273
|
|
|
252
274
|
fragmentShader:
|
|
253
|
-
|
|
275
|
+
/* glsl */`
|
|
254
276
|
uniform vec3 diffuse;
|
|
255
277
|
uniform float opacity;
|
|
256
278
|
uniform float linewidth;
|
|
257
279
|
|
|
258
280
|
#ifdef USE_DASH
|
|
259
281
|
|
|
282
|
+
uniform float dashOffset;
|
|
260
283
|
uniform float dashSize;
|
|
261
284
|
uniform float gapSize;
|
|
262
285
|
|
|
263
286
|
#endif
|
|
264
287
|
|
|
265
288
|
varying float vLineDistance;
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
289
|
+
|
|
290
|
+
#ifdef WORLD_UNITS
|
|
291
|
+
|
|
292
|
+
varying vec4 worldPos;
|
|
293
|
+
varying vec3 worldStart;
|
|
294
|
+
varying vec3 worldEnd;
|
|
295
|
+
|
|
296
|
+
#ifdef USE_DASH
|
|
297
|
+
|
|
298
|
+
varying vec2 vUv;
|
|
299
|
+
|
|
300
|
+
#endif
|
|
301
|
+
|
|
302
|
+
#else
|
|
303
|
+
|
|
304
|
+
varying vec2 vUv;
|
|
305
|
+
|
|
306
|
+
#endif
|
|
269
307
|
|
|
270
308
|
#include <common>
|
|
271
309
|
#include <color_pars_fragment>
|
|
@@ -273,8 +311,6 @@ ShaderLib[ 'line' ] = {
|
|
|
273
311
|
#include <logdepthbuf_pars_fragment>
|
|
274
312
|
#include <clipping_planes_pars_fragment>
|
|
275
313
|
|
|
276
|
-
varying vec2 vUv;
|
|
277
|
-
|
|
278
314
|
vec2 closestLineToLine(vec3 p1, vec3 p2, vec3 p3, vec3 p4) {
|
|
279
315
|
|
|
280
316
|
float mua;
|
|
@@ -312,7 +348,7 @@ ShaderLib[ 'line' ] = {
|
|
|
312
348
|
|
|
313
349
|
if ( vUv.y < - 1.0 || vUv.y > 1.0 ) discard; // discard endcaps
|
|
314
350
|
|
|
315
|
-
if ( mod( vLineDistance, dashSize + gapSize ) > dashSize ) discard; // todo - FIX
|
|
351
|
+
if ( mod( vLineDistance + dashOffset, dashSize + gapSize ) > dashSize ) discard; // todo - FIX
|
|
316
352
|
|
|
317
353
|
#endif
|
|
318
354
|
|
|
@@ -333,7 +369,7 @@ ShaderLib[ 'line' ] = {
|
|
|
333
369
|
|
|
334
370
|
#ifndef USE_DASH
|
|
335
371
|
|
|
336
|
-
#ifdef
|
|
372
|
+
#ifdef USE_ALPHA_TO_COVERAGE
|
|
337
373
|
|
|
338
374
|
float dnorm = fwidth( norm );
|
|
339
375
|
alpha = 1.0 - smoothstep( 0.5 - dnorm, 0.5 + dnorm, norm );
|
|
@@ -352,7 +388,7 @@ ShaderLib[ 'line' ] = {
|
|
|
352
388
|
|
|
353
389
|
#else
|
|
354
390
|
|
|
355
|
-
#ifdef
|
|
391
|
+
#ifdef USE_ALPHA_TO_COVERAGE
|
|
356
392
|
|
|
357
393
|
// artifacts appear on some hardware if a derivative is taken within a conditional
|
|
358
394
|
float a = vUv.x;
|
|
@@ -625,13 +661,13 @@ class LineMaterial extends ShaderMaterial {
|
|
|
625
661
|
|
|
626
662
|
get: function () {
|
|
627
663
|
|
|
628
|
-
return Boolean( '
|
|
664
|
+
return Boolean( 'USE_ALPHA_TO_COVERAGE' in this.defines );
|
|
629
665
|
|
|
630
666
|
},
|
|
631
667
|
|
|
632
668
|
set: function ( value ) {
|
|
633
669
|
|
|
634
|
-
if ( Boolean( value ) !== Boolean( '
|
|
670
|
+
if ( Boolean( value ) !== Boolean( 'USE_ALPHA_TO_COVERAGE' in this.defines ) ) {
|
|
635
671
|
|
|
636
672
|
this.needsUpdate = true;
|
|
637
673
|
|
|
@@ -639,12 +675,12 @@ class LineMaterial extends ShaderMaterial {
|
|
|
639
675
|
|
|
640
676
|
if ( value === true ) {
|
|
641
677
|
|
|
642
|
-
this.defines.
|
|
678
|
+
this.defines.USE_ALPHA_TO_COVERAGE = '';
|
|
643
679
|
this.extensions.derivatives = true;
|
|
644
680
|
|
|
645
681
|
} else {
|
|
646
682
|
|
|
647
|
-
delete this.defines.
|
|
683
|
+
delete this.defines.USE_ALPHA_TO_COVERAGE;
|
|
648
684
|
this.extensions.derivatives = false;
|
|
649
685
|
|
|
650
686
|
}
|
|
@@ -29,6 +29,24 @@ const _box = new Box3();
|
|
|
29
29
|
const _sphere = new Sphere();
|
|
30
30
|
const _clipToWorldVector = new Vector4();
|
|
31
31
|
|
|
32
|
+
// Returns the margin required to expand by in world space given the distance from the camera,
|
|
33
|
+
// line width, resolution, and camera projection
|
|
34
|
+
function getWorldSpaceHalfWidth( camera, distance, lineWidth, resolution ) {
|
|
35
|
+
|
|
36
|
+
// transform into clip space, adjust the x and y values by the pixel width offset, then
|
|
37
|
+
// transform back into world space to get world offset. Note clip space is [-1, 1] so full
|
|
38
|
+
// width does not need to be halved.
|
|
39
|
+
_clipToWorldVector.set( 0, 0, - distance, 1.0 ).applyMatrix4( camera.projectionMatrix );
|
|
40
|
+
_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
|
|
41
|
+
_clipToWorldVector.x = lineWidth / resolution.width;
|
|
42
|
+
_clipToWorldVector.y = lineWidth / resolution.height;
|
|
43
|
+
_clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );
|
|
44
|
+
_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
|
|
45
|
+
|
|
46
|
+
return Math.abs( Math.max( _clipToWorldVector.x, _clipToWorldVector.y ) );
|
|
47
|
+
|
|
48
|
+
}
|
|
49
|
+
|
|
32
50
|
class LineSegments2 extends Mesh {
|
|
33
51
|
|
|
34
52
|
constructor( geometry = new LineSegmentsGeometry(), material = new LineMaterial( { color: Math.random() * 0xffffff } ) ) {
|
|
@@ -94,10 +112,6 @@ class LineSegments2 extends Mesh {
|
|
|
94
112
|
// camera forward is negative
|
|
95
113
|
const near = - camera.near;
|
|
96
114
|
|
|
97
|
-
// clip space is [ - 1, 1 ] so multiply by two to get the full
|
|
98
|
-
// width in clip space
|
|
99
|
-
const ssMaxWidth = 2.0 * Math.max( lineWidth / resolution.width, lineWidth / resolution.height );
|
|
100
|
-
|
|
101
115
|
//
|
|
102
116
|
|
|
103
117
|
// check if we intersect the sphere bounds
|
|
@@ -110,13 +124,8 @@ class LineSegments2 extends Mesh {
|
|
|
110
124
|
_sphere.copy( geometry.boundingSphere ).applyMatrix4( matrixWorld );
|
|
111
125
|
const distanceToSphere = Math.max( camera.near, _sphere.distanceToPoint( ray.origin ) );
|
|
112
126
|
|
|
113
|
-
// get the w component to scale the world space line width
|
|
114
|
-
_clipToWorldVector.set( 0, 0, - distanceToSphere, 1.0 ).applyMatrix4( camera.projectionMatrix );
|
|
115
|
-
_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
|
|
116
|
-
_clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );
|
|
117
|
-
|
|
118
127
|
// increase the sphere bounds by the worst case line screen space width
|
|
119
|
-
const sphereMargin =
|
|
128
|
+
const sphereMargin = getWorldSpaceHalfWidth( camera, distanceToSphere, lineWidth, resolution );
|
|
120
129
|
_sphere.radius += sphereMargin;
|
|
121
130
|
|
|
122
131
|
if ( raycaster.ray.intersectsSphere( _sphere ) === false ) {
|
|
@@ -137,13 +146,8 @@ class LineSegments2 extends Mesh {
|
|
|
137
146
|
_box.copy( geometry.boundingBox ).applyMatrix4( matrixWorld );
|
|
138
147
|
const distanceToBox = Math.max( camera.near, _box.distanceToPoint( ray.origin ) );
|
|
139
148
|
|
|
140
|
-
//
|
|
141
|
-
|
|
142
|
-
_clipToWorldVector.multiplyScalar( 1.0 / _clipToWorldVector.w );
|
|
143
|
-
_clipToWorldVector.applyMatrix4( camera.projectionMatrixInverse );
|
|
144
|
-
|
|
145
|
-
// increase the sphere bounds by the worst case line screen space width
|
|
146
|
-
const boxMargin = Math.abs( ssMaxWidth / _clipToWorldVector.w ) * 0.5;
|
|
149
|
+
// increase the box bounds by the worst case line screen space width
|
|
150
|
+
const boxMargin = getWorldSpaceHalfWidth( camera, distanceToBox, lineWidth, resolution );
|
|
147
151
|
_box.max.x += boxMargin;
|
|
148
152
|
_box.max.y += boxMargin;
|
|
149
153
|
_box.max.z += boxMargin;
|
|
@@ -281,6 +285,6 @@ class LineSegments2 extends Mesh {
|
|
|
281
285
|
|
|
282
286
|
}
|
|
283
287
|
|
|
284
|
-
LineSegments2.prototype.
|
|
288
|
+
LineSegments2.prototype.isLineSegments2 = true;
|
|
285
289
|
|
|
286
290
|
export { LineSegments2 };
|
|
@@ -288,6 +288,10 @@ class Rhino3dmLoader extends Loader {
|
|
|
288
288
|
|
|
289
289
|
}
|
|
290
290
|
|
|
291
|
+
map.wrapS = texture.wrapU === 0 ? THREE.RepeatWrapping : THREE.ClampToEdgeWrapping;
|
|
292
|
+
map.wrapT = texture.wrapV === 0 ? THREE.RepeatWrapping : THREE.ClampToEdgeWrapping;
|
|
293
|
+
map.repeat.set( texture.repeat[ 0 ], texture.repeat[ 1 ] );
|
|
294
|
+
|
|
291
295
|
}
|
|
292
296
|
|
|
293
297
|
}
|
|
@@ -869,6 +873,7 @@ function Rhino3dmWorker() {
|
|
|
869
873
|
const views = [];
|
|
870
874
|
const namedViews = [];
|
|
871
875
|
const groups = [];
|
|
876
|
+
const strings = [];
|
|
872
877
|
|
|
873
878
|
//Handle objects
|
|
874
879
|
|
|
@@ -958,6 +963,12 @@ function Rhino3dmWorker() {
|
|
|
958
963
|
|
|
959
964
|
const image = doc.getEmbeddedFileAsBase64( _texture.fileName );
|
|
960
965
|
|
|
966
|
+
texture.wrapU = _texture.wrapU;
|
|
967
|
+
texture.wrapV = _texture.wrapV;
|
|
968
|
+
texture.wrapW = _texture.wrapW;
|
|
969
|
+
const uvw = _texture.uvwTransform.toFloatArray( true );
|
|
970
|
+
texture.repeat = [ uvw[ 0 ], uvw[ 5 ] ];
|
|
971
|
+
|
|
961
972
|
if ( image ) {
|
|
962
973
|
|
|
963
974
|
texture.image = 'data:image/png;base64,' + image;
|
|
@@ -1081,27 +1092,22 @@ function Rhino3dmWorker() {
|
|
|
1081
1092
|
// Handle bitmaps
|
|
1082
1093
|
// console.log( `Bitmap Count: ${doc.bitmaps().count()}` );
|
|
1083
1094
|
|
|
1084
|
-
// Handle strings
|
|
1095
|
+
// Handle strings
|
|
1085
1096
|
// console.log( `Document Strings Count: ${doc.strings().count()}` );
|
|
1097
|
+
// Note: doc.strings().documentUserTextCount() counts any doc.strings defined in a section
|
|
1098
|
+
//console.log( `Document User Text Count: ${doc.strings().documentUserTextCount()}` );
|
|
1086
1099
|
|
|
1087
|
-
|
|
1088
|
-
for( var i = 0; i < doc.strings().count(); i++ ){
|
|
1089
|
-
|
|
1090
|
-
var _string= doc.strings().get( i );
|
|
1091
|
-
|
|
1092
|
-
console.log(_string);
|
|
1093
|
-
var string = extractProperties( _group );
|
|
1100
|
+
const strings_count = doc.strings().count();
|
|
1094
1101
|
|
|
1095
|
-
|
|
1102
|
+
for ( let i = 0; i < strings_count; i ++ ) {
|
|
1096
1103
|
|
|
1097
|
-
|
|
1104
|
+
strings.push( doc.strings().get( i ) );
|
|
1098
1105
|
|
|
1099
1106
|
}
|
|
1100
|
-
*/
|
|
1101
1107
|
|
|
1102
1108
|
doc.delete();
|
|
1103
1109
|
|
|
1104
|
-
return { objects, materials, layers, views, namedViews, groups, settings };
|
|
1110
|
+
return { objects, materials, layers, views, namedViews, groups, strings, settings };
|
|
1105
1111
|
|
|
1106
1112
|
}
|
|
1107
1113
|
|
|
@@ -1077,7 +1077,7 @@ class ThreeMFLoader extends Loader {
|
|
|
1077
1077
|
geometry.setIndex( new BufferAttribute( meshData[ 'triangles' ], 1 ) );
|
|
1078
1078
|
geometry.setAttribute( 'position', new BufferAttribute( meshData[ 'vertices' ], 3 ) );
|
|
1079
1079
|
|
|
1080
|
-
const material = new MeshPhongMaterial( { color:
|
|
1080
|
+
const material = new MeshPhongMaterial( { color: 0xffffff, flatShading: true } );
|
|
1081
1081
|
|
|
1082
1082
|
const mesh = new Mesh( geometry, material );
|
|
1083
1083
|
|
|
@@ -1431,7 +1431,7 @@ class ThreeMFLoader extends Loader {
|
|
|
1431
1431
|
for ( let i = 0; i < buildData.length; i ++ ) {
|
|
1432
1432
|
|
|
1433
1433
|
const buildItem = buildData[ i ];
|
|
1434
|
-
const object3D = objects[ buildItem[ 'objectId' ] ];
|
|
1434
|
+
const object3D = objects[ buildItem[ 'objectId' ] ].clone();
|
|
1435
1435
|
|
|
1436
1436
|
// apply transform
|
|
1437
1437
|
|
|
@@ -15,8 +15,6 @@ import * as fflate from '../libs/fflate.module.js';
|
|
|
15
15
|
* Description: Early release of an AMF Loader following the pattern of the
|
|
16
16
|
* example loaders in the three.js project.
|
|
17
17
|
*
|
|
18
|
-
* More information about the AMF format: http://amf.wikispaces.com
|
|
19
|
-
*
|
|
20
18
|
* Usage:
|
|
21
19
|
* const loader = new AMFLoader();
|
|
22
20
|
* loader.load('/path/to/project.amf', function(objecttree) {
|
|
@@ -10,6 +10,7 @@ import {
|
|
|
10
10
|
Euler,
|
|
11
11
|
FileLoader,
|
|
12
12
|
Float32BufferAttribute,
|
|
13
|
+
FrontSide,
|
|
13
14
|
Group,
|
|
14
15
|
Line,
|
|
15
16
|
LineBasicMaterial,
|
|
@@ -33,6 +34,7 @@ import {
|
|
|
33
34
|
SkinnedMesh,
|
|
34
35
|
SpotLight,
|
|
35
36
|
TextureLoader,
|
|
37
|
+
Vector2,
|
|
36
38
|
Vector3,
|
|
37
39
|
VectorKeyframeTrack
|
|
38
40
|
} from 'three';
|
|
@@ -1239,6 +1241,10 @@ class ColladaLoader extends Loader {
|
|
|
1239
1241
|
data.parameters = parseEffectParameters( child );
|
|
1240
1242
|
break;
|
|
1241
1243
|
|
|
1244
|
+
case 'extra':
|
|
1245
|
+
data.extra = parseEffectExtra( child );
|
|
1246
|
+
break;
|
|
1247
|
+
|
|
1242
1248
|
}
|
|
1243
1249
|
|
|
1244
1250
|
}
|
|
@@ -1270,7 +1276,7 @@ class ColladaLoader extends Loader {
|
|
|
1270
1276
|
break;
|
|
1271
1277
|
case 'transparent':
|
|
1272
1278
|
data[ child.nodeName ] = {
|
|
1273
|
-
opaque: child.getAttribute( 'opaque' ),
|
|
1279
|
+
opaque: child.hasAttribute( 'opaque' ) ? child.getAttribute( 'opaque' ) : 'A_ONE',
|
|
1274
1280
|
data: parseEffectParameter( child )
|
|
1275
1281
|
};
|
|
1276
1282
|
break;
|
|
@@ -1399,6 +1405,10 @@ class ColladaLoader extends Loader {
|
|
|
1399
1405
|
|
|
1400
1406
|
break;
|
|
1401
1407
|
|
|
1408
|
+
case 'bump':
|
|
1409
|
+
data[ child.nodeName ] = parseEffectExtraTechniqueBump( child );
|
|
1410
|
+
break;
|
|
1411
|
+
|
|
1402
1412
|
}
|
|
1403
1413
|
|
|
1404
1414
|
}
|
|
@@ -1445,6 +1455,34 @@ class ColladaLoader extends Loader {
|
|
|
1445
1455
|
data[ child.nodeName ] = parseInt( child.textContent );
|
|
1446
1456
|
break;
|
|
1447
1457
|
|
|
1458
|
+
case 'bump':
|
|
1459
|
+
data[ child.nodeName ] = parseEffectExtraTechniqueBump( child );
|
|
1460
|
+
break;
|
|
1461
|
+
|
|
1462
|
+
}
|
|
1463
|
+
|
|
1464
|
+
}
|
|
1465
|
+
|
|
1466
|
+
return data;
|
|
1467
|
+
|
|
1468
|
+
}
|
|
1469
|
+
|
|
1470
|
+
function parseEffectExtraTechniqueBump( xml ) {
|
|
1471
|
+
|
|
1472
|
+
var data = {};
|
|
1473
|
+
|
|
1474
|
+
for ( var i = 0, l = xml.childNodes.length; i < l; i ++ ) {
|
|
1475
|
+
|
|
1476
|
+
var child = xml.childNodes[ i ];
|
|
1477
|
+
|
|
1478
|
+
if ( child.nodeType !== 1 ) continue;
|
|
1479
|
+
|
|
1480
|
+
switch ( child.nodeName ) {
|
|
1481
|
+
|
|
1482
|
+
case 'texture':
|
|
1483
|
+
data[ child.nodeName ] = { id: child.getAttribute( 'texture' ), texcoord: child.getAttribute( 'texcoord' ), extra: parseEffectParameterTexture( child ) };
|
|
1484
|
+
break;
|
|
1485
|
+
|
|
1448
1486
|
}
|
|
1449
1487
|
|
|
1450
1488
|
}
|
|
@@ -1519,7 +1557,6 @@ class ColladaLoader extends Loader {
|
|
|
1519
1557
|
|
|
1520
1558
|
const effect = getEffect( data.url );
|
|
1521
1559
|
const technique = effect.profile.technique;
|
|
1522
|
-
const extra = effect.profile.extra;
|
|
1523
1560
|
|
|
1524
1561
|
let material;
|
|
1525
1562
|
|
|
@@ -1712,9 +1749,29 @@ class ColladaLoader extends Loader {
|
|
|
1712
1749
|
|
|
1713
1750
|
//
|
|
1714
1751
|
|
|
1715
|
-
if ( extra !== undefined && extra.technique !== undefined && extra.technique.double_sided === 1 ) {
|
|
1716
1752
|
|
|
1717
|
-
|
|
1753
|
+
if ( technique.extra !== undefined && technique.extra.technique !== undefined ) {
|
|
1754
|
+
|
|
1755
|
+
const techniques = technique.extra.technique;
|
|
1756
|
+
|
|
1757
|
+
for ( const k in techniques ) {
|
|
1758
|
+
|
|
1759
|
+
const v = techniques[ k ];
|
|
1760
|
+
|
|
1761
|
+
switch ( k ) {
|
|
1762
|
+
|
|
1763
|
+
case 'double_sided':
|
|
1764
|
+
material.side = ( v === 1 ? DoubleSide : FrontSide );
|
|
1765
|
+
break;
|
|
1766
|
+
|
|
1767
|
+
case 'bump':
|
|
1768
|
+
material.normalMap = getTexture( v.texture );
|
|
1769
|
+
material.normalScale = new Vector2( 1, 1 );
|
|
1770
|
+
break;
|
|
1771
|
+
|
|
1772
|
+
}
|
|
1773
|
+
|
|
1774
|
+
}
|
|
1718
1775
|
|
|
1719
1776
|
}
|
|
1720
1777
|
|