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
|
@@ -32,7 +32,6 @@ class TDSLoader extends Loader {
|
|
|
32
32
|
this.debug = false;
|
|
33
33
|
|
|
34
34
|
this.group = null;
|
|
35
|
-
this.position = 0;
|
|
36
35
|
|
|
37
36
|
this.materials = [];
|
|
38
37
|
this.meshes = [];
|
|
@@ -97,7 +96,6 @@ class TDSLoader extends Loader {
|
|
|
97
96
|
parse( arraybuffer, path ) {
|
|
98
97
|
|
|
99
98
|
this.group = new Group();
|
|
100
|
-
this.position = 0;
|
|
101
99
|
this.materials = [];
|
|
102
100
|
this.meshes = [];
|
|
103
101
|
|
|
@@ -123,31 +121,30 @@ class TDSLoader extends Loader {
|
|
|
123
121
|
readFile( arraybuffer, path ) {
|
|
124
122
|
|
|
125
123
|
const data = new DataView( arraybuffer );
|
|
126
|
-
const chunk =
|
|
124
|
+
const chunk = new Chunk( data, 0, this.debugMessage );
|
|
127
125
|
|
|
128
126
|
if ( chunk.id === MLIBMAGIC || chunk.id === CMAGIC || chunk.id === M3DMAGIC ) {
|
|
129
127
|
|
|
130
|
-
let next =
|
|
128
|
+
let next = chunk.readChunk();
|
|
131
129
|
|
|
132
|
-
while ( next
|
|
130
|
+
while ( next ) {
|
|
133
131
|
|
|
134
|
-
if ( next === M3D_VERSION ) {
|
|
132
|
+
if ( next.id === M3D_VERSION ) {
|
|
135
133
|
|
|
136
|
-
const version =
|
|
134
|
+
const version = next.readDWord();
|
|
137
135
|
this.debugMessage( '3DS file version: ' + version );
|
|
138
136
|
|
|
139
|
-
} else if ( next === MDATA ) {
|
|
137
|
+
} else if ( next.id === MDATA ) {
|
|
140
138
|
|
|
141
|
-
this.
|
|
142
|
-
this.readMeshData( data, path );
|
|
139
|
+
this.readMeshData( next, path );
|
|
143
140
|
|
|
144
141
|
} else {
|
|
145
142
|
|
|
146
|
-
this.debugMessage( 'Unknown main chunk: ' + next.
|
|
143
|
+
this.debugMessage( 'Unknown main chunk: ' + next.hexId );
|
|
147
144
|
|
|
148
145
|
}
|
|
149
146
|
|
|
150
|
-
next =
|
|
147
|
+
next = chunk.readChunk();
|
|
151
148
|
|
|
152
149
|
}
|
|
153
150
|
|
|
@@ -161,46 +158,43 @@ class TDSLoader extends Loader {
|
|
|
161
158
|
* Read mesh data chunk.
|
|
162
159
|
*
|
|
163
160
|
* @method readMeshData
|
|
164
|
-
* @param {
|
|
161
|
+
* @param {Chunk} chunk to read mesh from
|
|
165
162
|
* @param {String} path Path for external resources.
|
|
166
163
|
*/
|
|
167
|
-
readMeshData(
|
|
164
|
+
readMeshData( chunk, path ) {
|
|
168
165
|
|
|
169
|
-
|
|
170
|
-
let next = this.nextChunk( data, chunk );
|
|
166
|
+
let next = chunk.readChunk();
|
|
171
167
|
|
|
172
|
-
while ( next
|
|
168
|
+
while ( next ) {
|
|
173
169
|
|
|
174
|
-
if ( next === MESH_VERSION ) {
|
|
170
|
+
if ( next.id === MESH_VERSION ) {
|
|
175
171
|
|
|
176
|
-
const version = +
|
|
172
|
+
const version = + next.readDWord();
|
|
177
173
|
this.debugMessage( 'Mesh Version: ' + version );
|
|
178
174
|
|
|
179
|
-
} else if ( next === MASTER_SCALE ) {
|
|
175
|
+
} else if ( next.id === MASTER_SCALE ) {
|
|
180
176
|
|
|
181
|
-
const scale =
|
|
177
|
+
const scale = next.readFloat();
|
|
182
178
|
this.debugMessage( 'Master scale: ' + scale );
|
|
183
179
|
this.group.scale.set( scale, scale, scale );
|
|
184
180
|
|
|
185
|
-
} else if ( next === NAMED_OBJECT ) {
|
|
181
|
+
} else if ( next.id === NAMED_OBJECT ) {
|
|
186
182
|
|
|
187
183
|
this.debugMessage( 'Named Object' );
|
|
188
|
-
this.
|
|
189
|
-
this.readNamedObject( data );
|
|
184
|
+
this.readNamedObject( next );
|
|
190
185
|
|
|
191
|
-
} else if ( next === MAT_ENTRY ) {
|
|
186
|
+
} else if ( next.id === MAT_ENTRY ) {
|
|
192
187
|
|
|
193
188
|
this.debugMessage( 'Material' );
|
|
194
|
-
this.
|
|
195
|
-
this.readMaterialEntry( data, path );
|
|
189
|
+
this.readMaterialEntry( next, path );
|
|
196
190
|
|
|
197
191
|
} else {
|
|
198
192
|
|
|
199
|
-
this.debugMessage( 'Unknown MDATA chunk: ' + next.
|
|
193
|
+
this.debugMessage( 'Unknown MDATA chunk: ' + next.hexId );
|
|
200
194
|
|
|
201
195
|
}
|
|
202
196
|
|
|
203
|
-
next =
|
|
197
|
+
next = chunk.readChunk();
|
|
204
198
|
|
|
205
199
|
}
|
|
206
200
|
|
|
@@ -210,143 +204,131 @@ class TDSLoader extends Loader {
|
|
|
210
204
|
* Read named object chunk.
|
|
211
205
|
*
|
|
212
206
|
* @method readNamedObject
|
|
213
|
-
* @param {
|
|
207
|
+
* @param {Chunk} chunk Chunk in use.
|
|
214
208
|
*/
|
|
215
|
-
readNamedObject(
|
|
209
|
+
readNamedObject( chunk ) {
|
|
216
210
|
|
|
217
|
-
const
|
|
218
|
-
const name = this.readString( data, 64 );
|
|
219
|
-
chunk.cur = this.position;
|
|
211
|
+
const name = chunk.readString();
|
|
220
212
|
|
|
221
|
-
let next =
|
|
222
|
-
while ( next
|
|
213
|
+
let next = chunk.readChunk();
|
|
214
|
+
while ( next ) {
|
|
223
215
|
|
|
224
|
-
if ( next === N_TRI_OBJECT ) {
|
|
216
|
+
if ( next.id === N_TRI_OBJECT ) {
|
|
225
217
|
|
|
226
|
-
this.
|
|
227
|
-
const mesh = this.readMesh( data );
|
|
218
|
+
const mesh = this.readMesh( next );
|
|
228
219
|
mesh.name = name;
|
|
229
220
|
this.meshes.push( mesh );
|
|
230
221
|
|
|
231
222
|
} else {
|
|
232
223
|
|
|
233
|
-
this.debugMessage( 'Unknown named object chunk: ' + next.
|
|
224
|
+
this.debugMessage( 'Unknown named object chunk: ' + next.hexId );
|
|
234
225
|
|
|
235
226
|
}
|
|
236
227
|
|
|
237
|
-
next =
|
|
228
|
+
next = chunk.readChunk( );
|
|
238
229
|
|
|
239
230
|
}
|
|
240
231
|
|
|
241
|
-
this.endChunk( chunk );
|
|
242
|
-
|
|
243
232
|
}
|
|
244
233
|
|
|
245
234
|
/**
|
|
246
235
|
* Read material data chunk and add it to the material list.
|
|
247
236
|
*
|
|
248
237
|
* @method readMaterialEntry
|
|
249
|
-
* @param {
|
|
238
|
+
* @param {Chunk} chunk Chunk in use.
|
|
250
239
|
* @param {String} path Path for external resources.
|
|
251
240
|
*/
|
|
252
|
-
readMaterialEntry(
|
|
241
|
+
readMaterialEntry( chunk, path ) {
|
|
253
242
|
|
|
254
|
-
|
|
255
|
-
let next = this.nextChunk( data, chunk );
|
|
243
|
+
let next = chunk.readChunk();
|
|
256
244
|
const material = new MeshPhongMaterial();
|
|
257
245
|
|
|
258
|
-
while ( next
|
|
246
|
+
while ( next ) {
|
|
259
247
|
|
|
260
|
-
if ( next === MAT_NAME ) {
|
|
248
|
+
if ( next.id === MAT_NAME ) {
|
|
261
249
|
|
|
262
|
-
material.name =
|
|
250
|
+
material.name = next.readString();
|
|
263
251
|
this.debugMessage( ' Name: ' + material.name );
|
|
264
252
|
|
|
265
|
-
} else if ( next === MAT_WIRE ) {
|
|
253
|
+
} else if ( next.id === MAT_WIRE ) {
|
|
266
254
|
|
|
267
255
|
this.debugMessage( ' Wireframe' );
|
|
268
256
|
material.wireframe = true;
|
|
269
257
|
|
|
270
|
-
} else if ( next === MAT_WIRE_SIZE ) {
|
|
258
|
+
} else if ( next.id === MAT_WIRE_SIZE ) {
|
|
271
259
|
|
|
272
|
-
const value =
|
|
260
|
+
const value = next.readByte();
|
|
273
261
|
material.wireframeLinewidth = value;
|
|
274
262
|
this.debugMessage( ' Wireframe Thickness: ' + value );
|
|
275
263
|
|
|
276
|
-
} else if ( next === MAT_TWO_SIDE ) {
|
|
264
|
+
} else if ( next.id === MAT_TWO_SIDE ) {
|
|
277
265
|
|
|
278
266
|
material.side = DoubleSide;
|
|
279
267
|
this.debugMessage( ' DoubleSided' );
|
|
280
268
|
|
|
281
|
-
} else if ( next === MAT_ADDITIVE ) {
|
|
269
|
+
} else if ( next.id === MAT_ADDITIVE ) {
|
|
282
270
|
|
|
283
271
|
this.debugMessage( ' Additive Blending' );
|
|
284
272
|
material.blending = AdditiveBlending;
|
|
285
273
|
|
|
286
|
-
} else if ( next === MAT_DIFFUSE ) {
|
|
274
|
+
} else if ( next.id === MAT_DIFFUSE ) {
|
|
287
275
|
|
|
288
276
|
this.debugMessage( ' Diffuse Color' );
|
|
289
|
-
material.color = this.readColor(
|
|
277
|
+
material.color = this.readColor( next );
|
|
290
278
|
|
|
291
|
-
} else if ( next === MAT_SPECULAR ) {
|
|
279
|
+
} else if ( next.id === MAT_SPECULAR ) {
|
|
292
280
|
|
|
293
281
|
this.debugMessage( ' Specular Color' );
|
|
294
|
-
material.specular = this.readColor(
|
|
282
|
+
material.specular = this.readColor( next );
|
|
295
283
|
|
|
296
|
-
} else if ( next === MAT_AMBIENT ) {
|
|
284
|
+
} else if ( next.id === MAT_AMBIENT ) {
|
|
297
285
|
|
|
298
286
|
this.debugMessage( ' Ambient color' );
|
|
299
|
-
material.color = this.readColor(
|
|
287
|
+
material.color = this.readColor( next );
|
|
300
288
|
|
|
301
|
-
} else if ( next === MAT_SHININESS ) {
|
|
289
|
+
} else if ( next.id === MAT_SHININESS ) {
|
|
302
290
|
|
|
303
|
-
const shininess = this.readPercentage(
|
|
291
|
+
const shininess = this.readPercentage( next );
|
|
304
292
|
material.shininess = shininess * 100;
|
|
305
293
|
this.debugMessage( ' Shininess : ' + shininess );
|
|
306
294
|
|
|
307
|
-
} else if ( next === MAT_TRANSPARENCY ) {
|
|
295
|
+
} else if ( next.id === MAT_TRANSPARENCY ) {
|
|
308
296
|
|
|
309
|
-
const transparency = this.readPercentage(
|
|
297
|
+
const transparency = this.readPercentage( next );
|
|
310
298
|
material.opacity = 1 - transparency;
|
|
311
299
|
this.debugMessage( ' Transparency : ' + transparency );
|
|
312
300
|
material.transparent = material.opacity < 1 ? true : false;
|
|
313
301
|
|
|
314
|
-
} else if ( next === MAT_TEXMAP ) {
|
|
302
|
+
} else if ( next.id === MAT_TEXMAP ) {
|
|
315
303
|
|
|
316
304
|
this.debugMessage( ' ColorMap' );
|
|
317
|
-
this.
|
|
318
|
-
material.map = this.readMap( data, path );
|
|
305
|
+
material.map = this.readMap( next, path );
|
|
319
306
|
|
|
320
|
-
} else if ( next === MAT_BUMPMAP ) {
|
|
307
|
+
} else if ( next.id === MAT_BUMPMAP ) {
|
|
321
308
|
|
|
322
309
|
this.debugMessage( ' BumpMap' );
|
|
323
|
-
this.
|
|
324
|
-
material.bumpMap = this.readMap( data, path );
|
|
310
|
+
material.bumpMap = this.readMap( next, path );
|
|
325
311
|
|
|
326
|
-
} else if ( next === MAT_OPACMAP ) {
|
|
312
|
+
} else if ( next.id === MAT_OPACMAP ) {
|
|
327
313
|
|
|
328
314
|
this.debugMessage( ' OpacityMap' );
|
|
329
|
-
this.
|
|
330
|
-
material.alphaMap = this.readMap( data, path );
|
|
315
|
+
material.alphaMap = this.readMap( next, path );
|
|
331
316
|
|
|
332
|
-
} else if ( next === MAT_SPECMAP ) {
|
|
317
|
+
} else if ( next.id === MAT_SPECMAP ) {
|
|
333
318
|
|
|
334
319
|
this.debugMessage( ' SpecularMap' );
|
|
335
|
-
this.
|
|
336
|
-
material.specularMap = this.readMap( data, path );
|
|
320
|
+
material.specularMap = this.readMap( next, path );
|
|
337
321
|
|
|
338
322
|
} else {
|
|
339
323
|
|
|
340
|
-
this.debugMessage( ' Unknown material chunk: ' + next.
|
|
324
|
+
this.debugMessage( ' Unknown material chunk: ' + next.hexId );
|
|
341
325
|
|
|
342
326
|
}
|
|
343
327
|
|
|
344
|
-
next =
|
|
328
|
+
next = chunk.readChunk();
|
|
345
329
|
|
|
346
330
|
}
|
|
347
331
|
|
|
348
|
-
this.endChunk( chunk );
|
|
349
|
-
|
|
350
332
|
this.materials[ material.name ] = material;
|
|
351
333
|
|
|
352
334
|
}
|
|
@@ -355,13 +337,12 @@ class TDSLoader extends Loader {
|
|
|
355
337
|
* Read mesh data chunk.
|
|
356
338
|
*
|
|
357
339
|
* @method readMesh
|
|
358
|
-
* @param {
|
|
340
|
+
* @param {Chunk} chunk Chunk in use.
|
|
359
341
|
* @return {Mesh} The parsed mesh.
|
|
360
342
|
*/
|
|
361
|
-
readMesh(
|
|
343
|
+
readMesh( chunk ) {
|
|
362
344
|
|
|
363
|
-
|
|
364
|
-
let next = this.nextChunk( data, chunk );
|
|
345
|
+
let next = chunk.readChunk( );
|
|
365
346
|
|
|
366
347
|
const geometry = new BufferGeometry();
|
|
367
348
|
|
|
@@ -369,11 +350,11 @@ class TDSLoader extends Loader {
|
|
|
369
350
|
const mesh = new Mesh( geometry, material );
|
|
370
351
|
mesh.name = 'mesh';
|
|
371
352
|
|
|
372
|
-
while ( next
|
|
353
|
+
while ( next ) {
|
|
373
354
|
|
|
374
|
-
if ( next === POINT_ARRAY ) {
|
|
355
|
+
if ( next.id === POINT_ARRAY ) {
|
|
375
356
|
|
|
376
|
-
const points =
|
|
357
|
+
const points = next.readWord( );
|
|
377
358
|
|
|
378
359
|
this.debugMessage( ' Vertex: ' + points );
|
|
379
360
|
|
|
@@ -383,22 +364,21 @@ class TDSLoader extends Loader {
|
|
|
383
364
|
|
|
384
365
|
for ( let i = 0; i < points; i ++ ) {
|
|
385
366
|
|
|
386
|
-
vertices.push(
|
|
387
|
-
vertices.push(
|
|
388
|
-
vertices.push(
|
|
367
|
+
vertices.push( next.readFloat( ) );
|
|
368
|
+
vertices.push( next.readFloat( ) );
|
|
369
|
+
vertices.push( next.readFloat( ) );
|
|
389
370
|
|
|
390
371
|
}
|
|
391
372
|
|
|
392
373
|
geometry.setAttribute( 'position', new Float32BufferAttribute( vertices, 3 ) );
|
|
393
374
|
|
|
394
|
-
} else if ( next === FACE_ARRAY ) {
|
|
375
|
+
} else if ( next.id === FACE_ARRAY ) {
|
|
395
376
|
|
|
396
|
-
this.
|
|
397
|
-
this.readFaceArray( data, mesh );
|
|
377
|
+
this.readFaceArray( next, mesh );
|
|
398
378
|
|
|
399
|
-
} else if ( next === TEX_VERTS ) {
|
|
379
|
+
} else if ( next.id === TEX_VERTS ) {
|
|
400
380
|
|
|
401
|
-
const texels =
|
|
381
|
+
const texels = next.readWord( );
|
|
402
382
|
|
|
403
383
|
this.debugMessage( ' UV: ' + texels );
|
|
404
384
|
|
|
@@ -406,24 +386,24 @@ class TDSLoader extends Loader {
|
|
|
406
386
|
|
|
407
387
|
const uvs = [];
|
|
408
388
|
|
|
409
|
-
for ( let i = 0; i < texels; i ++ )
|
|
389
|
+
for ( let i = 0; i < texels; i ++ ) {
|
|
410
390
|
|
|
411
|
-
uvs.push(
|
|
412
|
-
uvs.push(
|
|
391
|
+
uvs.push( next.readFloat( ) );
|
|
392
|
+
uvs.push( next.readFloat( ) );
|
|
413
393
|
|
|
414
394
|
}
|
|
415
395
|
|
|
416
396
|
geometry.setAttribute( 'uv', new Float32BufferAttribute( uvs, 2 ) );
|
|
417
397
|
|
|
418
398
|
|
|
419
|
-
} else if ( next === MESH_MATRIX ) {
|
|
399
|
+
} else if ( next.id === MESH_MATRIX ) {
|
|
420
400
|
|
|
421
401
|
this.debugMessage( ' Tranformation Matrix (TODO)' );
|
|
422
402
|
|
|
423
403
|
const values = [];
|
|
424
404
|
for ( let i = 0; i < 12; i ++ ) {
|
|
425
405
|
|
|
426
|
-
values[ i ] =
|
|
406
|
+
values[ i ] = next.readFloat( );
|
|
427
407
|
|
|
428
408
|
}
|
|
429
409
|
|
|
@@ -463,16 +443,14 @@ class TDSLoader extends Loader {
|
|
|
463
443
|
|
|
464
444
|
} else {
|
|
465
445
|
|
|
466
|
-
this.debugMessage( ' Unknown mesh chunk: ' + next.
|
|
446
|
+
this.debugMessage( ' Unknown mesh chunk: ' + next.hexId );
|
|
467
447
|
|
|
468
448
|
}
|
|
469
449
|
|
|
470
|
-
next =
|
|
450
|
+
next = chunk.readChunk( );
|
|
471
451
|
|
|
472
452
|
}
|
|
473
453
|
|
|
474
|
-
this.endChunk( chunk );
|
|
475
|
-
|
|
476
454
|
geometry.computeVertexNormals();
|
|
477
455
|
|
|
478
456
|
return mesh;
|
|
@@ -483,13 +461,12 @@ class TDSLoader extends Loader {
|
|
|
483
461
|
* Read face array data chunk.
|
|
484
462
|
*
|
|
485
463
|
* @method readFaceArray
|
|
486
|
-
* @param {
|
|
464
|
+
* @param {Chunk} chunk Chunk in use.
|
|
487
465
|
* @param {Mesh} mesh Mesh to be filled with the data read.
|
|
488
466
|
*/
|
|
489
|
-
readFaceArray(
|
|
467
|
+
readFaceArray( chunk, mesh ) {
|
|
490
468
|
|
|
491
|
-
const
|
|
492
|
-
const faces = this.readWord( data );
|
|
469
|
+
const faces = chunk.readWord( );
|
|
493
470
|
|
|
494
471
|
this.debugMessage( ' Faces: ' + faces );
|
|
495
472
|
|
|
@@ -497,9 +474,9 @@ class TDSLoader extends Loader {
|
|
|
497
474
|
|
|
498
475
|
for ( let i = 0; i < faces; ++ i ) {
|
|
499
476
|
|
|
500
|
-
index.push(
|
|
477
|
+
index.push( chunk.readWord( ), chunk.readWord( ), chunk.readWord( ) );
|
|
501
478
|
|
|
502
|
-
|
|
479
|
+
chunk.readWord( ); // visibility
|
|
503
480
|
|
|
504
481
|
}
|
|
505
482
|
|
|
@@ -510,17 +487,15 @@ class TDSLoader extends Loader {
|
|
|
510
487
|
let materialIndex = 0;
|
|
511
488
|
let start = 0;
|
|
512
489
|
|
|
513
|
-
while (
|
|
490
|
+
while ( ! chunk.endOfChunk ) {
|
|
514
491
|
|
|
515
|
-
const subchunk =
|
|
492
|
+
const subchunk = chunk.readChunk( );
|
|
516
493
|
|
|
517
494
|
if ( subchunk.id === MSH_MAT_GROUP ) {
|
|
518
495
|
|
|
519
496
|
this.debugMessage( ' Material Group' );
|
|
520
497
|
|
|
521
|
-
this.
|
|
522
|
-
|
|
523
|
-
const group = this.readMaterialGroup( data );
|
|
498
|
+
const group = this.readMaterialGroup( subchunk );
|
|
524
499
|
const count = group.index.length * 3; // assuming successive indices
|
|
525
500
|
|
|
526
501
|
mesh.geometry.addGroup( start, count, materialIndex );
|
|
@@ -540,78 +515,71 @@ class TDSLoader extends Loader {
|
|
|
540
515
|
|
|
541
516
|
} else {
|
|
542
517
|
|
|
543
|
-
this.debugMessage( ' Unknown face array chunk: ' + subchunk.
|
|
518
|
+
this.debugMessage( ' Unknown face array chunk: ' + subchunk.hexId );
|
|
544
519
|
|
|
545
520
|
}
|
|
546
521
|
|
|
547
|
-
this.endChunk( subchunk );
|
|
548
|
-
|
|
549
522
|
}
|
|
550
523
|
|
|
551
524
|
if ( mesh.material.length === 1 ) mesh.material = mesh.material[ 0 ]; // for backwards compatibility
|
|
552
525
|
|
|
553
|
-
this.endChunk( chunk );
|
|
554
|
-
|
|
555
526
|
}
|
|
556
527
|
|
|
557
528
|
/**
|
|
558
529
|
* Read texture map data chunk.
|
|
559
530
|
*
|
|
560
531
|
* @method readMap
|
|
561
|
-
* @param {
|
|
532
|
+
* @param {Chunk} chunk Chunk in use.
|
|
562
533
|
* @param {String} path Path for external resources.
|
|
563
534
|
* @return {Texture} Texture read from this data chunk.
|
|
564
535
|
*/
|
|
565
|
-
readMap(
|
|
536
|
+
readMap( chunk, path ) {
|
|
566
537
|
|
|
567
|
-
|
|
568
|
-
let next = this.nextChunk( data, chunk );
|
|
538
|
+
let next = chunk.readChunk( );
|
|
569
539
|
let texture = {};
|
|
570
540
|
|
|
571
541
|
const loader = new TextureLoader( this.manager );
|
|
572
542
|
loader.setPath( this.resourcePath || path ).setCrossOrigin( this.crossOrigin );
|
|
573
543
|
|
|
574
|
-
while ( next
|
|
544
|
+
while ( next ) {
|
|
575
545
|
|
|
576
|
-
if ( next === MAT_MAPNAME ) {
|
|
546
|
+
if ( next.id === MAT_MAPNAME ) {
|
|
577
547
|
|
|
578
|
-
const name =
|
|
548
|
+
const name = next.readString();
|
|
579
549
|
texture = loader.load( name );
|
|
580
550
|
|
|
581
551
|
this.debugMessage( ' File: ' + path + name );
|
|
582
552
|
|
|
583
|
-
} else if ( next === MAT_MAP_UOFFSET ) {
|
|
553
|
+
} else if ( next.id === MAT_MAP_UOFFSET ) {
|
|
584
554
|
|
|
585
|
-
texture.offset.x =
|
|
555
|
+
texture.offset.x = next.readFloat( );
|
|
586
556
|
this.debugMessage( ' OffsetX: ' + texture.offset.x );
|
|
587
557
|
|
|
588
|
-
} else if ( next === MAT_MAP_VOFFSET ) {
|
|
558
|
+
} else if ( next.id === MAT_MAP_VOFFSET ) {
|
|
589
559
|
|
|
590
|
-
texture.offset.y =
|
|
560
|
+
texture.offset.y = next.readFloat( );
|
|
591
561
|
this.debugMessage( ' OffsetY: ' + texture.offset.y );
|
|
592
562
|
|
|
593
|
-
} else if ( next === MAT_MAP_USCALE ) {
|
|
563
|
+
} else if ( next.id === MAT_MAP_USCALE ) {
|
|
594
564
|
|
|
595
|
-
texture.repeat.x =
|
|
565
|
+
texture.repeat.x = next.readFloat( );
|
|
596
566
|
this.debugMessage( ' RepeatX: ' + texture.repeat.x );
|
|
597
567
|
|
|
598
|
-
} else if ( next === MAT_MAP_VSCALE ) {
|
|
568
|
+
} else if ( next.id === MAT_MAP_VSCALE ) {
|
|
599
569
|
|
|
600
|
-
texture.repeat.y =
|
|
570
|
+
texture.repeat.y = next.readFloat( );
|
|
601
571
|
this.debugMessage( ' RepeatY: ' + texture.repeat.y );
|
|
602
572
|
|
|
603
573
|
} else {
|
|
604
574
|
|
|
605
|
-
this.debugMessage( ' Unknown map chunk: ' + next.
|
|
575
|
+
this.debugMessage( ' Unknown map chunk: ' + next.hexId );
|
|
606
576
|
|
|
607
577
|
}
|
|
608
578
|
|
|
609
|
-
next =
|
|
579
|
+
next = chunk.readChunk( );
|
|
610
580
|
|
|
611
581
|
}
|
|
612
582
|
|
|
613
|
-
this.endChunk( chunk );
|
|
614
|
-
|
|
615
583
|
return texture;
|
|
616
584
|
|
|
617
585
|
}
|
|
@@ -620,14 +588,13 @@ class TDSLoader extends Loader {
|
|
|
620
588
|
* Read material group data chunk.
|
|
621
589
|
*
|
|
622
590
|
* @method readMaterialGroup
|
|
623
|
-
* @param {
|
|
591
|
+
* @param {Chunk} chunk Chunk in use.
|
|
624
592
|
* @return {Object} Object with name and index of the object.
|
|
625
593
|
*/
|
|
626
|
-
readMaterialGroup(
|
|
594
|
+
readMaterialGroup( chunk ) {
|
|
627
595
|
|
|
628
|
-
|
|
629
|
-
const
|
|
630
|
-
const numFaces = this.readWord( data );
|
|
596
|
+
const name = chunk.readString();
|
|
597
|
+
const numFaces = chunk.readWord();
|
|
631
598
|
|
|
632
599
|
this.debugMessage( ' Name: ' + name );
|
|
633
600
|
this.debugMessage( ' Faces: ' + numFaces );
|
|
@@ -635,7 +602,7 @@ class TDSLoader extends Loader {
|
|
|
635
602
|
const index = [];
|
|
636
603
|
for ( let i = 0; i < numFaces; ++ i ) {
|
|
637
604
|
|
|
638
|
-
index.push(
|
|
605
|
+
index.push( chunk.readWord( ) );
|
|
639
606
|
|
|
640
607
|
}
|
|
641
608
|
|
|
@@ -647,29 +614,29 @@ class TDSLoader extends Loader {
|
|
|
647
614
|
* Read a color value.
|
|
648
615
|
*
|
|
649
616
|
* @method readColor
|
|
650
|
-
* @param {
|
|
617
|
+
* @param {Chunk} chunk Chunk.
|
|
651
618
|
* @return {Color} Color value read..
|
|
652
619
|
*/
|
|
653
|
-
readColor(
|
|
620
|
+
readColor( chunk ) {
|
|
654
621
|
|
|
655
|
-
const
|
|
622
|
+
const subChunk = chunk.readChunk( );
|
|
656
623
|
const color = new Color();
|
|
657
624
|
|
|
658
|
-
if (
|
|
625
|
+
if ( subChunk.id === COLOR_24 || subChunk.id === LIN_COLOR_24 ) {
|
|
659
626
|
|
|
660
|
-
const r =
|
|
661
|
-
const g =
|
|
662
|
-
const b =
|
|
627
|
+
const r = subChunk.readByte( );
|
|
628
|
+
const g = subChunk.readByte( );
|
|
629
|
+
const b = subChunk.readByte( );
|
|
663
630
|
|
|
664
631
|
color.setRGB( r / 255, g / 255, b / 255 );
|
|
665
632
|
|
|
666
633
|
this.debugMessage( ' Color: ' + color.r + ', ' + color.g + ', ' + color.b );
|
|
667
634
|
|
|
668
|
-
} else if (
|
|
635
|
+
} else if ( subChunk.id === COLOR_F || subChunk.id === LIN_COLOR_F ) {
|
|
669
636
|
|
|
670
|
-
const r =
|
|
671
|
-
const g =
|
|
672
|
-
const b =
|
|
637
|
+
const r = subChunk.readFloat( );
|
|
638
|
+
const g = subChunk.readFloat( );
|
|
639
|
+
const b = subChunk.readFloat( );
|
|
673
640
|
|
|
674
641
|
color.setRGB( r, g, b );
|
|
675
642
|
|
|
@@ -677,88 +644,146 @@ class TDSLoader extends Loader {
|
|
|
677
644
|
|
|
678
645
|
} else {
|
|
679
646
|
|
|
680
|
-
this.debugMessage( ' Unknown color chunk: ' +
|
|
647
|
+
this.debugMessage( ' Unknown color chunk: ' + subChunk.hexId );
|
|
681
648
|
|
|
682
649
|
}
|
|
683
650
|
|
|
684
|
-
this.endChunk( chunk );
|
|
685
651
|
return color;
|
|
686
652
|
|
|
687
653
|
}
|
|
688
654
|
|
|
689
655
|
/**
|
|
690
|
-
* Read
|
|
656
|
+
* Read percentage value.
|
|
691
657
|
*
|
|
692
|
-
* @method
|
|
693
|
-
* @param {
|
|
694
|
-
* @return {
|
|
658
|
+
* @method readPercentage
|
|
659
|
+
* @param {Chunk} chunk Chunk to read data from.
|
|
660
|
+
* @return {Number} Data read from the dataview.
|
|
695
661
|
*/
|
|
696
|
-
|
|
662
|
+
readPercentage( chunk ) {
|
|
697
663
|
|
|
698
|
-
const
|
|
664
|
+
const subChunk = chunk.readChunk( );
|
|
699
665
|
|
|
700
|
-
|
|
701
|
-
chunk.id = this.readWord( data );
|
|
702
|
-
chunk.size = this.readDWord( data );
|
|
703
|
-
chunk.end = chunk.cur + chunk.size;
|
|
704
|
-
chunk.cur += 6;
|
|
666
|
+
switch ( subChunk.id ) {
|
|
705
667
|
|
|
706
|
-
|
|
668
|
+
case INT_PERCENTAGE:
|
|
669
|
+
return ( subChunk.readShort( ) / 100 );
|
|
670
|
+
break;
|
|
671
|
+
|
|
672
|
+
case FLOAT_PERCENTAGE:
|
|
673
|
+
return subChunk.readFloat( );
|
|
674
|
+
break;
|
|
675
|
+
|
|
676
|
+
default:
|
|
677
|
+
this.debugMessage( ' Unknown percentage chunk: ' + subChunk.hexId );
|
|
678
|
+
return 0;
|
|
679
|
+
|
|
680
|
+
}
|
|
707
681
|
|
|
708
682
|
}
|
|
709
683
|
|
|
710
684
|
/**
|
|
711
|
-
*
|
|
685
|
+
* Print debug message to the console.
|
|
712
686
|
*
|
|
713
|
-
*
|
|
714
|
-
*
|
|
687
|
+
* Is controlled by a flag to show or hide debug messages.
|
|
688
|
+
*
|
|
689
|
+
* @method debugMessage
|
|
690
|
+
* @param {Object} message Debug message to print to the console.
|
|
715
691
|
*/
|
|
716
|
-
|
|
692
|
+
debugMessage( message ) {
|
|
717
693
|
|
|
718
|
-
this.
|
|
694
|
+
if ( this.debug ) {
|
|
695
|
+
|
|
696
|
+
console.log( message );
|
|
697
|
+
|
|
698
|
+
}
|
|
719
699
|
|
|
720
700
|
}
|
|
721
701
|
|
|
702
|
+
}
|
|
703
|
+
|
|
704
|
+
|
|
705
|
+
/** Read data/sub-chunks from chunk */
|
|
706
|
+
class Chunk {
|
|
707
|
+
|
|
722
708
|
/**
|
|
723
|
-
*
|
|
709
|
+
* Create a new chunk
|
|
724
710
|
*
|
|
725
|
-
* @
|
|
726
|
-
* @param {DataView} data
|
|
727
|
-
* @param {
|
|
711
|
+
* @class Chunk
|
|
712
|
+
* @param {DataView} data DataView to read from.
|
|
713
|
+
* @param {Number} position in data.
|
|
714
|
+
* @param {Function} debugMessage logging callback.
|
|
728
715
|
*/
|
|
729
|
-
|
|
716
|
+
constructor( data, position, debugMessage ) {
|
|
730
717
|
|
|
731
|
-
|
|
718
|
+
this.data = data;
|
|
719
|
+
// the offset to the begin of this chunk
|
|
720
|
+
this.offset = position;
|
|
721
|
+
// the current reading position
|
|
722
|
+
this.position = position;
|
|
723
|
+
this.debugMessage = debugMessage;
|
|
732
724
|
|
|
733
|
-
|
|
725
|
+
if ( this.debugMessage instanceof Function ) {
|
|
726
|
+
|
|
727
|
+
this.debugMessage = function () {};
|
|
728
|
+
|
|
729
|
+
}
|
|
730
|
+
|
|
731
|
+
this.id = this.readWord();
|
|
732
|
+
this.size = this.readDWord();
|
|
733
|
+
this.end = this.offset + this.size;
|
|
734
|
+
|
|
735
|
+
if ( this.end > data.byteLength ) {
|
|
736
|
+
|
|
737
|
+
this.debugMessage( 'Bad chunk size for chunk at ' + position );
|
|
734
738
|
|
|
735
739
|
}
|
|
736
740
|
|
|
737
|
-
|
|
741
|
+
}
|
|
742
|
+
|
|
743
|
+
/**
|
|
744
|
+
* read a sub cchunk.
|
|
745
|
+
*
|
|
746
|
+
* @method readChunk
|
|
747
|
+
* @return {Chunk | null} next sub chunk
|
|
748
|
+
*/
|
|
749
|
+
readChunk() {
|
|
750
|
+
|
|
751
|
+
if ( this.endOfChunk ) {
|
|
752
|
+
|
|
753
|
+
return null;
|
|
754
|
+
|
|
755
|
+
}
|
|
738
756
|
|
|
739
757
|
try {
|
|
740
758
|
|
|
741
|
-
const next = this.
|
|
742
|
-
|
|
743
|
-
return next
|
|
759
|
+
const next = new Chunk( this.data, this.position, this.debugMessage );
|
|
760
|
+
this.position += next.size;
|
|
761
|
+
return next;
|
|
744
762
|
|
|
745
763
|
} catch ( e ) {
|
|
746
764
|
|
|
747
765
|
this.debugMessage( 'Unable to read chunk at ' + this.position );
|
|
748
|
-
return
|
|
766
|
+
return null;
|
|
749
767
|
|
|
750
768
|
}
|
|
751
769
|
|
|
752
770
|
}
|
|
753
771
|
|
|
754
772
|
/**
|
|
755
|
-
*
|
|
773
|
+
* return the ID of this chunk as Hex
|
|
756
774
|
*
|
|
757
|
-
* @method
|
|
775
|
+
* @method idToString
|
|
776
|
+
* @return {String} hex-string of id
|
|
758
777
|
*/
|
|
759
|
-
|
|
778
|
+
get hexId() {
|
|
760
779
|
|
|
761
|
-
this.
|
|
780
|
+
return this.id.toString( 16 );
|
|
781
|
+
|
|
782
|
+
}
|
|
783
|
+
|
|
784
|
+
get endOfChunk() {
|
|
785
|
+
|
|
786
|
+
return this.position >= this.end;
|
|
762
787
|
|
|
763
788
|
}
|
|
764
789
|
|
|
@@ -766,12 +791,11 @@ class TDSLoader extends Loader {
|
|
|
766
791
|
* Read byte value.
|
|
767
792
|
*
|
|
768
793
|
* @method readByte
|
|
769
|
-
* @param {DataView} data Dataview to read data from.
|
|
770
794
|
* @return {Number} Data read from the dataview.
|
|
771
795
|
*/
|
|
772
|
-
readByte(
|
|
796
|
+
readByte() {
|
|
773
797
|
|
|
774
|
-
const v = data.getUint8( this.position, true );
|
|
798
|
+
const v = this.data.getUint8( this.position, true );
|
|
775
799
|
this.position += 1;
|
|
776
800
|
return v;
|
|
777
801
|
|
|
@@ -781,20 +805,20 @@ class TDSLoader extends Loader {
|
|
|
781
805
|
* Read 32 bit float value.
|
|
782
806
|
*
|
|
783
807
|
* @method readFloat
|
|
784
|
-
* @param {DataView} data Dataview to read data from.
|
|
785
808
|
* @return {Number} Data read from the dataview.
|
|
786
809
|
*/
|
|
787
|
-
readFloat(
|
|
810
|
+
readFloat() {
|
|
788
811
|
|
|
789
812
|
try {
|
|
790
813
|
|
|
791
|
-
const v = data.getFloat32( this.position, true );
|
|
814
|
+
const v = this.data.getFloat32( this.position, true );
|
|
792
815
|
this.position += 4;
|
|
793
816
|
return v;
|
|
794
817
|
|
|
795
818
|
} catch ( e ) {
|
|
796
819
|
|
|
797
|
-
this.debugMessage( e + ' ' + this.position + ' ' + data.byteLength );
|
|
820
|
+
this.debugMessage( e + ' ' + this.position + ' ' + this.data.byteLength );
|
|
821
|
+
return 0;
|
|
798
822
|
|
|
799
823
|
}
|
|
800
824
|
|
|
@@ -804,12 +828,11 @@ class TDSLoader extends Loader {
|
|
|
804
828
|
* Read 32 bit signed integer value.
|
|
805
829
|
*
|
|
806
830
|
* @method readInt
|
|
807
|
-
* @param {DataView} data Dataview to read data from.
|
|
808
831
|
* @return {Number} Data read from the dataview.
|
|
809
832
|
*/
|
|
810
|
-
readInt(
|
|
833
|
+
readInt() {
|
|
811
834
|
|
|
812
|
-
const v = data.getInt32( this.position, true );
|
|
835
|
+
const v = this.data.getInt32( this.position, true );
|
|
813
836
|
this.position += 4;
|
|
814
837
|
return v;
|
|
815
838
|
|
|
@@ -819,12 +842,11 @@ class TDSLoader extends Loader {
|
|
|
819
842
|
* Read 16 bit signed integer value.
|
|
820
843
|
*
|
|
821
844
|
* @method readShort
|
|
822
|
-
* @param {DataView} data Dataview to read data from.
|
|
823
845
|
* @return {Number} Data read from the dataview.
|
|
824
846
|
*/
|
|
825
|
-
readShort(
|
|
847
|
+
readShort() {
|
|
826
848
|
|
|
827
|
-
const v = data.getInt16( this.position, true );
|
|
849
|
+
const v = this.data.getInt16( this.position, true );
|
|
828
850
|
this.position += 2;
|
|
829
851
|
return v;
|
|
830
852
|
|
|
@@ -834,12 +856,11 @@ class TDSLoader extends Loader {
|
|
|
834
856
|
* Read 64 bit unsigned integer value.
|
|
835
857
|
*
|
|
836
858
|
* @method readDWord
|
|
837
|
-
* @param {DataView} data Dataview to read data from.
|
|
838
859
|
* @return {Number} Data read from the dataview.
|
|
839
860
|
*/
|
|
840
|
-
readDWord(
|
|
861
|
+
readDWord() {
|
|
841
862
|
|
|
842
|
-
const v = data.getUint32( this.position, true );
|
|
863
|
+
const v = this.data.getUint32( this.position, true );
|
|
843
864
|
this.position += 4;
|
|
844
865
|
return v;
|
|
845
866
|
|
|
@@ -849,39 +870,30 @@ class TDSLoader extends Loader {
|
|
|
849
870
|
* Read 32 bit unsigned integer value.
|
|
850
871
|
*
|
|
851
872
|
* @method readWord
|
|
852
|
-
* @param {DataView} data Dataview to read data from.
|
|
853
873
|
* @return {Number} Data read from the dataview.
|
|
854
874
|
*/
|
|
855
|
-
readWord(
|
|
875
|
+
readWord() {
|
|
856
876
|
|
|
857
|
-
const v = data.getUint16( this.position, true );
|
|
877
|
+
const v = this.data.getUint16( this.position, true );
|
|
858
878
|
this.position += 2;
|
|
859
879
|
return v;
|
|
860
880
|
|
|
861
881
|
}
|
|
862
882
|
|
|
863
883
|
/**
|
|
864
|
-
* Read string value.
|
|
884
|
+
* Read NULL terminated ASCII string value from chunk-pos.
|
|
865
885
|
*
|
|
866
886
|
* @method readString
|
|
867
|
-
* @param {DataView} data Dataview to read data from.
|
|
868
|
-
* @param {Number} maxLength Max size of the string to be read.
|
|
869
887
|
* @return {String} Data read from the dataview.
|
|
870
888
|
*/
|
|
871
|
-
readString(
|
|
889
|
+
readString() {
|
|
872
890
|
|
|
873
891
|
let s = '';
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
const c = this.readByte( data );
|
|
878
|
-
if ( ! c ) {
|
|
879
|
-
|
|
880
|
-
break;
|
|
881
|
-
|
|
882
|
-
}
|
|
892
|
+
let c = this.readByte();
|
|
893
|
+
while ( c ) {
|
|
883
894
|
|
|
884
895
|
s += String.fromCharCode( c );
|
|
896
|
+
c = this.readByte();
|
|
885
897
|
|
|
886
898
|
}
|
|
887
899
|
|
|
@@ -889,57 +901,6 @@ class TDSLoader extends Loader {
|
|
|
889
901
|
|
|
890
902
|
}
|
|
891
903
|
|
|
892
|
-
/**
|
|
893
|
-
* Read percentage value.
|
|
894
|
-
*
|
|
895
|
-
* @method readPercentage
|
|
896
|
-
* @param {DataView} data Dataview to read data from.
|
|
897
|
-
* @return {Number} Data read from the dataview.
|
|
898
|
-
*/
|
|
899
|
-
readPercentage( data ) {
|
|
900
|
-
|
|
901
|
-
const chunk = this.readChunk( data );
|
|
902
|
-
let value;
|
|
903
|
-
|
|
904
|
-
switch ( chunk.id ) {
|
|
905
|
-
|
|
906
|
-
case INT_PERCENTAGE:
|
|
907
|
-
value = ( this.readShort( data ) / 100 );
|
|
908
|
-
break;
|
|
909
|
-
|
|
910
|
-
case FLOAT_PERCENTAGE:
|
|
911
|
-
value = this.readFloat( data );
|
|
912
|
-
break;
|
|
913
|
-
|
|
914
|
-
default:
|
|
915
|
-
this.debugMessage( ' Unknown percentage chunk: ' + chunk.toString( 16 ) );
|
|
916
|
-
|
|
917
|
-
}
|
|
918
|
-
|
|
919
|
-
this.endChunk( chunk );
|
|
920
|
-
|
|
921
|
-
return value;
|
|
922
|
-
|
|
923
|
-
}
|
|
924
|
-
|
|
925
|
-
/**
|
|
926
|
-
* Print debug message to the console.
|
|
927
|
-
*
|
|
928
|
-
* Is controlled by a flag to show or hide debug messages.
|
|
929
|
-
*
|
|
930
|
-
* @method debugMessage
|
|
931
|
-
* @param {Object} message Debug message to print to the console.
|
|
932
|
-
*/
|
|
933
|
-
debugMessage( message ) {
|
|
934
|
-
|
|
935
|
-
if ( this.debug ) {
|
|
936
|
-
|
|
937
|
-
console.log( message );
|
|
938
|
-
|
|
939
|
-
}
|
|
940
|
-
|
|
941
|
-
}
|
|
942
|
-
|
|
943
904
|
}
|
|
944
905
|
|
|
945
906
|
// const NULL_CHUNK = 0x0000;
|