super-three 0.147.1 → 0.154.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/LICENSE +1 -1
- package/build/three.cjs +37190 -21678
- package/build/three.js +37182 -21669
- package/build/three.min.js +4 -2
- package/build/three.module.js +7656 -6548
- package/build/three.module.min.js +7 -0
- package/examples/jsm/animation/AnimationClipCreator.js +5 -3
- package/examples/jsm/cameras/CinematicCamera.js +1 -2
- package/examples/jsm/capabilities/WebGPU.js +17 -5
- package/examples/jsm/controls/ArcballControls.js +1835 -1827
- package/examples/jsm/controls/FlyControls.js +25 -9
- package/examples/jsm/controls/MapControls.js +28 -0
- package/examples/jsm/controls/OrbitControls.js +25 -46
- package/examples/jsm/controls/PointerLockControls.js +70 -65
- package/examples/jsm/controls/TrackballControls.js +18 -4
- package/examples/jsm/controls/TransformControls.js +0 -1
- package/examples/jsm/csm/CSM.js +12 -6
- package/examples/jsm/csm/CSMShader.js +7 -6
- package/examples/jsm/effects/AnaglyphEffect.js +6 -20
- package/examples/jsm/effects/AsciiEffect.js +3 -6
- package/examples/jsm/effects/OutlineEffect.js +2 -16
- package/examples/jsm/effects/ParallaxBarrierEffect.js +3 -0
- package/examples/jsm/environments/RoomEnvironment.js +6 -2
- package/examples/jsm/exporters/DRACOExporter.js +53 -11
- package/examples/jsm/exporters/EXRExporter.js +3 -9
- package/examples/jsm/exporters/GLTFExporter.js +597 -112
- package/examples/jsm/exporters/KTX2Exporter.js +34 -23
- package/examples/jsm/exporters/MMDExporter.js +1 -1
- package/examples/jsm/exporters/PLYExporter.js +8 -1
- package/examples/jsm/exporters/STLExporter.js +8 -4
- package/examples/jsm/exporters/USDZExporter.js +184 -124
- package/examples/jsm/geometries/ConvexGeometry.js +0 -6
- package/examples/jsm/geometries/ParametricGeometry.js +10 -0
- package/examples/jsm/helpers/OctreeHelper.js +1 -0
- package/examples/jsm/helpers/ViewHelper.js +71 -57
- package/examples/jsm/interactive/HTMLMesh.js +16 -3
- package/examples/jsm/interactive/InteractiveGroup.js +1 -1
- package/examples/{js → jsm}/libs/basis/README.md +4 -4
- package/examples/jsm/libs/draco/draco_decoder.js +34 -0
- package/examples/jsm/libs/draco/draco_decoder.wasm +0 -0
- package/examples/jsm/libs/draco/draco_wasm_wrapper.js +117 -0
- package/examples/jsm/libs/draco/gltf/draco_decoder.js +33 -0
- package/examples/jsm/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/examples/jsm/libs/draco/gltf/draco_wasm_wrapper.js +116 -0
- package/examples/jsm/libs/lil-gui.module.min.js +2 -2
- package/examples/jsm/libs/tween.module.js +803 -0
- package/examples/jsm/lights/IESSpotLight.js +25 -0
- package/examples/jsm/lights/LightProbeGenerator.js +11 -9
- package/examples/jsm/lines/LineMaterial.js +1 -1
- package/examples/jsm/lines/LineSegments2.js +12 -10
- package/examples/jsm/loaders/3DMLoader.js +9 -6
- package/examples/jsm/loaders/3MFLoader.js +17 -12
- package/examples/jsm/loaders/AMFLoader.js +7 -4
- package/examples/jsm/loaders/BVHLoader.js +2 -2
- package/examples/jsm/loaders/ColladaLoader.js +19 -17
- package/examples/jsm/loaders/DRACOLoader.js +69 -18
- package/examples/jsm/loaders/EXRLoader.js +23 -24
- package/examples/jsm/loaders/FBXLoader.js +41 -52
- package/examples/jsm/loaders/GCodeLoader.js +1 -2
- package/examples/jsm/loaders/GLTFLoader.js +452 -282
- package/examples/jsm/loaders/HDRCubeTextureLoader.js +4 -4
- package/examples/jsm/loaders/IESLoader.js +337 -0
- package/examples/jsm/loaders/KMZLoader.js +4 -4
- package/examples/jsm/loaders/KTX2Loader.js +145 -69
- package/examples/jsm/loaders/LDrawLoader.js +24 -25
- package/examples/jsm/loaders/LWOLoader.js +12 -29
- package/examples/jsm/loaders/LottieLoader.js +3 -1
- package/examples/jsm/loaders/MMDLoader.js +49 -18
- package/examples/jsm/loaders/MTLLoader.js +2 -2
- package/examples/jsm/loaders/MaterialXLoader.js +9 -3
- package/examples/jsm/loaders/NRRDLoader.js +33 -5
- package/examples/jsm/loaders/OBJLoader.js +1 -1
- package/examples/jsm/loaders/PCDLoader.js +26 -12
- package/examples/jsm/loaders/PDBLoader.js +7 -2
- package/examples/jsm/loaders/PLYLoader.js +261 -106
- package/examples/jsm/loaders/RGBELoader.js +3 -3
- package/examples/jsm/loaders/STLLoader.js +9 -5
- package/examples/jsm/loaders/SVGLoader.js +36 -27
- package/examples/jsm/loaders/TTFLoader.js +1 -8
- package/examples/jsm/loaders/TiltLoader.js +13 -7
- package/examples/jsm/loaders/USDZLoader.js +5 -5
- package/examples/jsm/loaders/VOXLoader.js +8 -2
- package/examples/jsm/loaders/VRMLLoader.js +60 -20
- package/examples/jsm/loaders/VTKLoader.js +19 -10
- package/examples/jsm/loaders/XYZLoader.js +9 -3
- package/examples/jsm/loaders/lwo/IFFParser.js +19 -19
- package/examples/jsm/materials/MeshGouraudMaterial.js +2 -5
- package/examples/jsm/math/Lut.js +5 -4
- package/examples/jsm/math/MeshSurfaceSampler.js +82 -43
- package/examples/jsm/misc/ConvexObjectBreaker.js +2 -8
- package/examples/jsm/misc/GPUComputationRenderer.js +6 -5
- package/examples/jsm/misc/MD2Character.js +2 -2
- package/examples/jsm/misc/MD2CharacterComplex.js +2 -2
- package/examples/jsm/misc/ProgressiveLightMap.js +12 -10
- package/examples/jsm/misc/RollerCoaster.js +7 -1
- package/examples/jsm/misc/Volume.js +20 -5
- package/examples/jsm/misc/VolumeSlice.js +3 -1
- package/examples/jsm/modifiers/CurveModifier.js +1 -0
- package/examples/jsm/modifiers/TessellateModifier.js +19 -19
- package/examples/jsm/nodes/Nodes.js +149 -335
- package/examples/jsm/nodes/accessors/BitangentNode.js +43 -16
- package/examples/jsm/nodes/accessors/BufferAttributeNode.js +99 -0
- package/examples/jsm/nodes/accessors/BufferNode.js +6 -0
- package/examples/jsm/nodes/accessors/CameraNode.js +36 -5
- package/examples/jsm/nodes/accessors/CubeTextureNode.js +27 -33
- package/examples/jsm/nodes/accessors/ExtendedMaterialNode.js +64 -0
- package/examples/jsm/nodes/accessors/InstanceNode.js +39 -26
- package/examples/jsm/nodes/accessors/MaterialNode.js +164 -39
- package/examples/jsm/nodes/accessors/MaterialReferenceNode.js +16 -0
- package/examples/jsm/nodes/accessors/ModelNode.js +13 -0
- package/examples/jsm/nodes/accessors/ModelViewProjectionNode.js +13 -14
- package/examples/jsm/nodes/accessors/MorphNode.js +70 -0
- package/examples/jsm/nodes/accessors/NormalNode.js +36 -19
- package/examples/jsm/nodes/accessors/Object3DNode.js +40 -12
- package/examples/jsm/nodes/accessors/PointUVNode.js +6 -1
- package/examples/jsm/nodes/accessors/PositionNode.js +38 -23
- package/examples/jsm/nodes/accessors/ReferenceNode.js +21 -14
- package/examples/jsm/nodes/accessors/ReflectVectorNode.js +11 -7
- package/examples/jsm/nodes/accessors/SceneNode.js +46 -0
- package/examples/jsm/nodes/accessors/SkinningNode.js +55 -71
- package/examples/jsm/nodes/accessors/StorageBufferNode.js +6 -0
- package/examples/jsm/nodes/accessors/TangentNode.js +28 -20
- package/examples/jsm/nodes/accessors/TextureBicubicNode.js +94 -0
- package/examples/jsm/nodes/accessors/TextureNode.js +143 -13
- package/examples/jsm/nodes/accessors/TextureSizeNode.js +35 -0
- package/examples/jsm/nodes/accessors/UVNode.js +7 -1
- package/examples/jsm/nodes/accessors/UserDataNode.js +6 -0
- package/examples/jsm/nodes/code/CodeNode.js +78 -0
- package/examples/jsm/nodes/code/ExpressionNode.js +37 -0
- package/examples/jsm/nodes/{core → code}/FunctionCallNode.js +15 -1
- package/examples/jsm/nodes/{core → code}/FunctionNode.js +31 -9
- package/examples/jsm/nodes/code/ScriptableNode.js +488 -0
- package/examples/jsm/nodes/code/ScriptableValueNode.js +167 -0
- package/examples/jsm/nodes/core/ArrayUniformNode.js +3 -0
- package/examples/jsm/nodes/core/AttributeNode.js +17 -9
- package/examples/jsm/nodes/core/BypassNode.js +11 -4
- package/examples/jsm/nodes/core/CacheNode.js +46 -0
- package/examples/jsm/nodes/core/ConstNode.js +3 -0
- package/examples/jsm/nodes/core/ContextNode.js +10 -1
- package/examples/jsm/nodes/core/IndexNode.js +66 -0
- package/examples/jsm/nodes/core/InputNode.js +26 -5
- package/examples/jsm/nodes/core/LightingModel.js +17 -0
- package/examples/jsm/nodes/core/Node.js +128 -37
- package/examples/jsm/nodes/core/NodeAttribute.js +2 -1
- package/examples/jsm/nodes/core/NodeBuilder.js +287 -118
- package/examples/jsm/nodes/core/NodeCache.js +26 -0
- package/examples/jsm/nodes/core/NodeFrame.js +56 -5
- package/examples/jsm/nodes/core/NodeUtils.js +115 -28
- package/examples/jsm/nodes/core/PropertyNode.js +23 -2
- package/examples/jsm/nodes/core/StackNode.js +99 -0
- package/examples/jsm/nodes/core/TempNode.js +11 -3
- package/examples/jsm/nodes/core/UniformNode.js +16 -1
- package/examples/jsm/nodes/core/VarNode.js +19 -29
- package/examples/jsm/nodes/core/VaryingNode.js +15 -2
- package/examples/jsm/nodes/core/constants.js +6 -0
- package/examples/jsm/nodes/display/BlendModeNode.js +33 -19
- package/examples/jsm/nodes/display/ColorAdjustmentNode.js +36 -20
- package/examples/jsm/nodes/display/ColorSpaceNode.js +60 -47
- package/examples/jsm/nodes/display/FrontFacingNode.js +7 -1
- package/examples/jsm/nodes/display/NormalMapNode.js +33 -20
- package/examples/jsm/nodes/display/PosterizeNode.js +10 -3
- package/examples/jsm/nodes/display/ToneMappingNode.js +101 -11
- package/examples/jsm/nodes/display/ViewportDepthNode.js +69 -0
- package/examples/jsm/nodes/display/ViewportDepthTextureNode.js +34 -0
- package/examples/jsm/nodes/display/ViewportNode.js +27 -18
- package/examples/jsm/nodes/display/ViewportSharedTextureNode.js +31 -0
- package/examples/jsm/nodes/display/ViewportTextureNode.js +75 -0
- package/examples/jsm/nodes/fog/FogExp2Node.js +35 -0
- package/examples/jsm/nodes/fog/FogNode.js +12 -6
- package/examples/jsm/nodes/fog/FogRangeNode.js +12 -5
- package/examples/jsm/nodes/functions/BSDF/BRDF_BlinnPhong.js +30 -0
- package/examples/jsm/nodes/functions/BSDF/BRDF_GGX.js +15 -16
- package/examples/jsm/nodes/functions/BSDF/BRDF_Lambert.js +3 -3
- package/examples/jsm/nodes/functions/BSDF/BRDF_Sheen.js +43 -0
- package/examples/jsm/nodes/functions/BSDF/DFGApprox.js +9 -7
- package/examples/jsm/nodes/functions/BSDF/D_GGX.js +5 -5
- package/examples/jsm/nodes/functions/BSDF/EnvironmentBRDF.js +13 -0
- package/examples/jsm/nodes/functions/BSDF/F_Schlick.js +4 -6
- package/examples/jsm/nodes/functions/BSDF/V_GGX_SmithCorrelated.js +8 -6
- package/examples/jsm/nodes/functions/PhongLightingModel.js +28 -0
- package/examples/jsm/nodes/functions/PhysicalLightingModel.js +155 -45
- package/examples/jsm/nodes/functions/material/getGeometryRoughness.js +5 -4
- package/examples/jsm/nodes/functions/material/getRoughness.js +6 -6
- package/examples/jsm/nodes/geometry/RangeNode.js +50 -55
- package/examples/jsm/nodes/gpgpu/ComputeNode.js +9 -2
- package/examples/jsm/nodes/lighting/AONode.js +5 -3
- package/examples/jsm/nodes/lighting/AmbientLightNode.js +27 -0
- package/examples/jsm/nodes/lighting/AnalyticLightNode.js +114 -5
- package/examples/jsm/nodes/lighting/DirectionalLightNode.js +43 -0
- package/examples/jsm/nodes/lighting/EnvironmentNode.js +153 -38
- package/examples/jsm/nodes/lighting/HemisphereLightNode.js +15 -10
- package/examples/jsm/nodes/lighting/IESSpotLightNode.js +39 -0
- package/examples/jsm/nodes/lighting/LightNode.js +57 -0
- package/examples/jsm/nodes/lighting/LightUtils.js +17 -0
- package/examples/jsm/nodes/lighting/LightingContextNode.js +41 -17
- package/examples/jsm/nodes/lighting/LightingNode.js +3 -1
- package/examples/jsm/nodes/lighting/LightsNode.js +18 -10
- package/examples/jsm/nodes/lighting/PointLightNode.js +71 -0
- package/examples/jsm/nodes/lighting/SpotLightNode.js +92 -0
- package/examples/jsm/nodes/loaders/NodeLoader.js +5 -4
- package/examples/jsm/nodes/loaders/NodeMaterialLoader.js +4 -20
- package/examples/jsm/nodes/materials/LineBasicNodeMaterial.js +6 -24
- package/examples/jsm/nodes/materials/Materials.js +11 -55
- package/examples/jsm/nodes/materials/MeshBasicNodeMaterial.js +5 -26
- package/examples/jsm/nodes/materials/MeshNormalNodeMaterial.js +38 -0
- package/examples/jsm/nodes/materials/MeshPhongNodeMaterial.js +65 -0
- package/examples/jsm/nodes/materials/MeshPhysicalNodeMaterial.js +47 -6
- package/examples/jsm/nodes/materials/MeshStandardNodeMaterial.js +22 -110
- package/examples/jsm/nodes/materials/NodeMaterial.js +340 -67
- package/examples/jsm/nodes/materials/PointsNodeMaterial.js +7 -10
- package/examples/jsm/nodes/materials/SpriteNodeMaterial.js +29 -32
- package/examples/jsm/nodes/materialx/MaterialXNodes.js +31 -22
- package/examples/jsm/nodes/materialx/lib/mx_hsv.js +3 -3
- package/examples/jsm/nodes/materialx/lib/mx_noise.js +14 -13
- package/examples/jsm/nodes/materialx/lib/mx_transform_color.js +4 -3
- package/examples/jsm/nodes/math/CondNode.js +43 -17
- package/examples/jsm/nodes/math/MathNode.js +184 -73
- package/examples/jsm/nodes/math/OperatorNode.js +53 -3
- package/examples/jsm/nodes/procedural/CheckerNode.js +16 -8
- package/examples/jsm/nodes/shadernode/ShaderNode.js +206 -63
- package/examples/jsm/nodes/utils/ArrayElementNode.js +4 -2
- package/examples/jsm/nodes/utils/ConvertNode.js +19 -1
- package/examples/jsm/nodes/utils/DiscardNode.js +26 -0
- package/examples/jsm/nodes/utils/EquirectUVNode.js +10 -4
- package/examples/jsm/nodes/utils/JoinNode.js +4 -1
- package/examples/jsm/nodes/utils/LoopNode.js +186 -0
- package/examples/jsm/nodes/utils/MatcapUVNode.js +11 -4
- package/examples/jsm/nodes/utils/MaxMipLevelNode.js +18 -5
- package/examples/jsm/nodes/utils/OscNode.js +21 -14
- package/examples/jsm/nodes/utils/PackingNode.js +55 -0
- package/examples/jsm/nodes/utils/RemapNode.js +13 -5
- package/examples/jsm/nodes/utils/RotateUVNode.js +18 -7
- package/examples/jsm/nodes/utils/SpecularMIPLevelNode.js +37 -0
- package/examples/jsm/nodes/utils/SplitNode.js +7 -5
- package/examples/jsm/nodes/utils/SpriteSheetUVNode.js +15 -30
- package/examples/jsm/nodes/utils/TimerNode.js +16 -6
- package/examples/jsm/nodes/utils/TriplanarTexturesNode.js +21 -10
- package/examples/jsm/objects/GroundProjectedSkybox.js +172 -0
- package/examples/jsm/objects/Lensflare.js +3 -4
- package/examples/jsm/objects/MarchingCubes.js +5 -1
- package/examples/jsm/objects/Reflector.js +8 -5
- package/examples/jsm/objects/Refractor.js +5 -5
- package/examples/jsm/objects/ShadowMesh.js +3 -3
- package/examples/jsm/objects/Sky.js +1 -1
- package/examples/jsm/objects/Water.js +2 -1
- package/examples/jsm/objects/Water2.js +1 -1
- package/examples/jsm/offscreen/scene.js +1 -0
- package/examples/jsm/physics/AmmoPhysics.js +27 -28
- package/examples/jsm/physics/RapierPhysics.js +199 -0
- package/examples/jsm/postprocessing/AfterimagePass.js +3 -2
- package/examples/jsm/postprocessing/BloomPass.js +7 -4
- package/examples/jsm/postprocessing/BokehPass.js +3 -8
- package/examples/jsm/postprocessing/DotScreenPass.js +1 -2
- package/examples/jsm/postprocessing/EffectComposer.js +7 -95
- package/examples/jsm/postprocessing/FilmPass.js +1 -2
- package/examples/jsm/postprocessing/GlitchPass.js +0 -2
- package/examples/jsm/postprocessing/HalftonePass.js +0 -6
- package/examples/jsm/postprocessing/OutlinePass.js +8 -10
- package/examples/jsm/postprocessing/OutputPass.js +72 -0
- package/examples/jsm/postprocessing/Pass.js +2 -0
- package/examples/jsm/postprocessing/RenderPixelatedPass.js +4 -3
- package/examples/jsm/postprocessing/SAOPass.js +4 -26
- package/examples/jsm/postprocessing/SMAAPass.js +5 -8
- package/examples/jsm/postprocessing/SSAARenderPass.js +5 -5
- package/examples/jsm/postprocessing/SSAOPass.js +4 -14
- package/examples/jsm/postprocessing/SSRPass.js +3 -7
- package/examples/jsm/postprocessing/SavePass.js +5 -4
- package/examples/jsm/postprocessing/ShaderPass.js +1 -0
- package/examples/jsm/postprocessing/TAARenderPass.js +17 -4
- package/examples/jsm/postprocessing/TexturePass.js +2 -3
- package/examples/jsm/postprocessing/UnrealBloomPass.js +13 -21
- package/examples/jsm/renderers/CSS2DRenderer.js +6 -1
- package/examples/jsm/renderers/CSS3DRenderer.js +27 -5
- package/examples/jsm/renderers/{webgpu/WebGPUAnimation.js → common/Animation.js} +4 -4
- package/examples/jsm/renderers/common/Attributes.js +75 -0
- package/examples/jsm/renderers/common/Backend.js +162 -0
- package/examples/jsm/renderers/common/Background.js +134 -0
- package/examples/jsm/renderers/common/Binding.js +11 -0
- package/examples/jsm/renderers/common/Bindings.js +169 -0
- package/examples/jsm/renderers/common/Buffer.js +38 -0
- package/examples/jsm/renderers/{webgpu/WebGPUBufferUtils.js → common/BufferUtils.js} +2 -2
- package/examples/jsm/renderers/common/ChainMap.js +89 -0
- package/examples/jsm/renderers/common/ComputePipeline.js +17 -0
- package/examples/jsm/renderers/common/Constants.js +14 -0
- package/examples/jsm/renderers/common/CubeRenderTarget.js +65 -0
- package/examples/jsm/renderers/common/DataMap.js +54 -0
- package/examples/jsm/renderers/common/Geometries.js +215 -0
- package/examples/jsm/renderers/{webgpu/WebGPUInfo.js → common/Info.js} +2 -3
- package/examples/jsm/renderers/common/Pipeline.js +13 -0
- package/examples/jsm/renderers/common/Pipelines.js +321 -0
- package/examples/jsm/renderers/common/ProgrammableStage.js +18 -0
- package/examples/jsm/renderers/common/RenderContext.js +37 -0
- package/examples/jsm/renderers/common/RenderContexts.js +38 -0
- package/examples/jsm/renderers/{webgpu/WebGPURenderLists.js → common/RenderList.js} +26 -47
- package/examples/jsm/renderers/common/RenderLists.js +38 -0
- package/examples/jsm/renderers/common/RenderObject.js +113 -0
- package/examples/jsm/renderers/common/RenderObjects.js +92 -0
- package/examples/jsm/renderers/common/RenderPipeline.js +16 -0
- package/examples/jsm/renderers/common/RenderTarget.js +15 -0
- package/examples/jsm/renderers/common/Renderer.js +864 -0
- package/examples/jsm/renderers/common/SampledTexture.js +80 -0
- package/examples/jsm/renderers/common/Sampler.js +18 -0
- package/examples/jsm/renderers/common/StorageBuffer.js +17 -0
- package/examples/jsm/renderers/common/Textures.js +206 -0
- package/examples/jsm/renderers/{webgpu/WebGPUUniform.js → common/Uniform.js} +13 -9
- package/examples/jsm/renderers/common/UniformBuffer.js +15 -0
- package/examples/jsm/renderers/{webgpu/WebGPUUniformsGroup.js → common/UniformsGroup.js} +13 -13
- package/examples/jsm/renderers/common/nodes/NodeRender.js +302 -0
- package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampledTexture.js → common/nodes/NodeSampledTexture.js} +4 -4
- package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeSampler.js → common/nodes/NodeSampler.js} +3 -3
- package/examples/jsm/renderers/{webgpu/nodes/WebGPUNodeUniform.js → common/nodes/NodeUniform.js} +1 -1
- package/examples/jsm/renderers/common/nodes/Nodes.js +319 -0
- package/examples/jsm/renderers/webgl/nodes/GLSLNodeBuilder.js +340 -0
- package/examples/jsm/renderers/webgl/nodes/WebGLNodeBuilder.js +58 -50
- package/examples/jsm/renderers/webgpu/WebGPUBackend.js +847 -0
- package/examples/jsm/renderers/webgpu/WebGPURenderer.js +15 -987
- package/examples/jsm/renderers/webgpu/nodes/{WebGPUNodeBuilder.js → WGSLNodeBuilder.js} +139 -92
- package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeFunction.js +2 -2
- package/examples/jsm/{nodes/parsers → renderers/webgpu/nodes}/WGSLNodeParser.js +1 -1
- package/examples/jsm/renderers/webgpu/utils/WebGPUAttributeUtils.js +255 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUBindingUtils.js +145 -0
- package/examples/jsm/renderers/webgpu/{constants.js → utils/WebGPUConstants.js} +73 -12
- package/examples/jsm/renderers/webgpu/{WebGPURenderPipeline.js → utils/WebGPUPipelineUtils.js} +141 -296
- package/examples/jsm/renderers/webgpu/{WebGPUTextureUtils.js → utils/WebGPUTextureMipmapUtils.js} +5 -25
- package/examples/jsm/renderers/webgpu/utils/WebGPUTextureUtils.js +937 -0
- package/examples/jsm/renderers/webgpu/utils/WebGPUUtils.js +92 -0
- package/examples/jsm/shaders/BleachBypassShader.js +2 -0
- package/examples/jsm/shaders/BlendShader.js +1 -2
- package/examples/jsm/shaders/BokehShader2.js +3 -0
- package/examples/jsm/shaders/ColorifyShader.js +2 -0
- package/examples/jsm/shaders/ConvolutionShader.js +2 -0
- package/examples/jsm/shaders/CopyShader.js +4 -2
- package/examples/jsm/shaders/DotScreenShader.js +2 -0
- package/examples/jsm/shaders/ExposureShader.js +44 -0
- package/examples/jsm/shaders/FilmShader.js +2 -0
- package/examples/jsm/shaders/GammaCorrectionShader.js +2 -0
- package/examples/jsm/shaders/HorizontalBlurShader.js +2 -0
- package/examples/jsm/shaders/MMDToonShader.js +15 -4
- package/examples/jsm/shaders/OutputShader.js +61 -0
- package/examples/jsm/shaders/RGBShiftShader.js +4 -2
- package/examples/jsm/shaders/SepiaShader.js +2 -0
- package/examples/jsm/shaders/ToonShader.js +13 -5
- package/examples/jsm/shaders/VelocityShader.js +1 -1
- package/examples/jsm/shaders/VerticalBlurShader.js +2 -0
- package/examples/jsm/shaders/VignetteShader.js +2 -0
- package/examples/jsm/shaders/WaterRefractionShader.js +5 -2
- package/examples/jsm/utils/BufferGeometryUtils.js +54 -36
- package/examples/jsm/utils/LDrawUtils.js +4 -4
- package/examples/jsm/utils/PackedPhongMaterial.js +5 -78
- package/examples/jsm/utils/SceneUtils.js +8 -4
- package/examples/jsm/utils/SkeletonUtils.js +27 -210
- package/examples/jsm/utils/TextureUtils.js +86 -0
- package/examples/jsm/webxr/OculusHandPointerModel.js +34 -13
- package/examples/jsm/webxr/VRButton.js +1 -2
- package/examples/jsm/webxr/XRButton.js +198 -0
- package/examples/jsm/webxr/XRHandPrimitiveModel.js +1 -0
- package/examples/jsm/webxr/XRPlanes.js +100 -0
- package/package.json +35 -87
- package/src/Three.Legacy.js +0 -319
- package/src/Three.js +4 -3
- package/src/animation/AnimationUtils.js +13 -1
- package/src/animation/PropertyBinding.js +2 -2
- package/src/audio/Audio.js +7 -2
- package/src/audio/PositionalAudio.js +8 -0
- package/src/cameras/Camera.js +5 -0
- package/src/cameras/CubeCamera.js +76 -13
- package/src/cameras/OrthographicCamera.js +1 -1
- package/src/cameras/PerspectiveCamera.js +1 -1
- package/src/constants.js +22 -2
- package/src/core/BufferAttribute.js +146 -29
- package/src/core/BufferGeometry.js +2 -15
- package/src/core/GLBufferAttribute.js +2 -0
- package/src/core/InterleavedBufferAttribute.js +1 -1
- package/src/core/Object3D.js +37 -8
- package/src/extras/DataUtils.js +7 -1
- package/src/extras/ImageUtils.js +2 -2
- package/src/extras/PMREMGenerator.js +5 -5
- package/src/extras/core/Curve.js +1 -1
- package/src/extras/curves/LineCurve.js +6 -4
- package/src/extras/curves/LineCurve3.js +13 -0
- package/src/geometries/BoxGeometry.js +10 -0
- package/src/geometries/CircleGeometry.js +11 -1
- package/src/geometries/ConeGeometry.js +1 -1
- package/src/geometries/CylinderGeometry.js +11 -1
- package/src/geometries/EdgesGeometry.js +10 -0
- package/src/geometries/ExtrudeGeometry.js +11 -1
- package/src/geometries/LatheGeometry.js +10 -0
- package/src/geometries/PlaneGeometry.js +10 -0
- package/src/geometries/PolyhedronGeometry.js +10 -0
- package/src/geometries/RingGeometry.js +11 -1
- package/src/geometries/ShapeGeometry.js +10 -0
- package/src/geometries/SphereGeometry.js +12 -2
- package/src/geometries/TorusGeometry.js +11 -1
- package/src/geometries/TorusKnotGeometry.js +10 -0
- package/src/geometries/TubeGeometry.js +10 -0
- package/src/geometries/WireframeGeometry.js +10 -0
- package/src/helpers/Box3Helper.js +1 -2
- package/src/lights/DirectionalLight.js +1 -1
- package/src/lights/HemisphereLight.js +1 -1
- package/src/lights/SpotLight.js +1 -1
- package/src/loaders/AudioLoader.js +14 -8
- package/src/loaders/CubeTextureLoader.js +2 -0
- package/src/loaders/DataTextureLoader.js +5 -1
- package/src/loaders/Loader.js +2 -0
- package/src/loaders/MaterialLoader.js +9 -0
- package/src/loaders/ObjectLoader.js +10 -2
- package/src/materials/LineBasicMaterial.js +4 -0
- package/src/materials/Material.js +19 -4
- package/src/materials/MeshDistanceMaterial.js +0 -9
- package/src/materials/MeshPhysicalMaterial.js +32 -6
- package/src/materials/ShaderMaterial.js +6 -1
- package/src/math/Box2.js +3 -2
- package/src/math/Box3.js +49 -64
- package/src/math/Color.js +88 -66
- package/src/math/ColorManagement.js +75 -16
- package/src/math/Euler.js +2 -11
- package/src/math/Frustum.js +29 -5
- package/src/math/MathUtils.js +43 -1
- package/src/math/Matrix3.js +26 -6
- package/src/math/Matrix4.js +74 -19
- package/src/math/Plane.js +2 -2
- package/src/math/Quaternion.js +6 -0
- package/src/math/Ray.js +7 -7
- package/src/math/Triangle.js +37 -7
- package/src/math/Vector2.js +16 -0
- package/src/math/Vector3.js +10 -0
- package/src/math/interpolants/CubicInterpolant.js +1 -2
- package/src/objects/InstancedMesh.js +82 -1
- package/src/objects/Mesh.js +108 -76
- package/src/objects/Skeleton.js +1 -3
- package/src/objects/SkinnedMesh.js +123 -8
- package/src/objects/Sprite.js +1 -1
- package/src/renderers/WebGLCubeRenderTarget.js +12 -3
- package/src/renderers/WebGLMultipleRenderTargets.js +4 -2
- package/src/renderers/WebGLRenderTarget.js +14 -2
- package/src/renderers/WebGLRenderer.js +1439 -1252
- package/src/renderers/shaders/ShaderChunk/alphahash_fragment.glsl.js +7 -0
- package/src/renderers/shaders/ShaderChunk/alphahash_pars_fragment.glsl.js +68 -0
- package/src/renderers/shaders/ShaderChunk/alphamap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/aomap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/begin_vertex.glsl.js +6 -0
- package/src/renderers/shaders/ShaderChunk/bsdfs.glsl.js +0 -271
- package/src/renderers/shaders/ShaderChunk/bumpmap_pars_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/clearcoat_normal_fragment_maps.glsl.js +2 -10
- package/src/renderers/shaders/ShaderChunk/clearcoat_pars_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/common.glsl.js +38 -0
- package/src/renderers/shaders/ShaderChunk/cube_uv_reflection_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/displacementmap_vertex.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/emissivemap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/envmap_physical_pars_fragment.glsl.js +26 -3
- package/src/renderers/shaders/ShaderChunk/lightmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/lights_fragment_begin.glsl.js +3 -3
- package/src/renderers/shaders/ShaderChunk/lights_fragment_maps.glsl.js +10 -2
- package/src/renderers/shaders/ShaderChunk/lights_pars_begin.glsl.js +11 -11
- package/src/renderers/shaders/ShaderChunk/lights_physical_fragment.glsl.js +39 -13
- package/src/renderers/shaders/ShaderChunk/lights_physical_pars_fragment.glsl.js +306 -10
- package/src/renderers/shaders/ShaderChunk/map_fragment.glsl.js +1 -11
- package/src/renderers/shaders/ShaderChunk/map_particle_fragment.glsl.js +9 -1
- package/src/renderers/shaders/ShaderChunk/map_particle_pars_fragment.glsl.js +10 -2
- package/src/renderers/shaders/ShaderChunk/metalnessmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/normal_fragment_begin.glsl.js +40 -10
- package/src/renderers/shaders/ShaderChunk/normal_fragment_maps.glsl.js +5 -13
- package/src/renderers/shaders/ShaderChunk/normalmap_pars_fragment.glsl.js +7 -7
- package/src/renderers/shaders/ShaderChunk/{output_fragment.glsl.js → opaque_fragment.glsl.js} +1 -2
- package/src/renderers/shaders/ShaderChunk/packing.glsl.js +11 -5
- package/src/renderers/shaders/ShaderChunk/roughnessmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_fragment.glsl.js +4 -11
- package/src/renderers/shaders/ShaderChunk/shadowmap_pars_vertex.glsl.js +2 -2
- package/src/renderers/shaders/ShaderChunk/shadowmap_vertex.glsl.js +39 -34
- package/src/renderers/shaders/ShaderChunk/specularmap_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/tonemapping_pars_fragment.glsl.js +1 -1
- package/src/renderers/shaders/ShaderChunk/transmission_fragment.glsl.js +5 -5
- package/src/renderers/shaders/ShaderChunk/transmission_pars_fragment.glsl.js +101 -16
- package/src/renderers/shaders/ShaderChunk/uv_pars_fragment.glsl.js +113 -1
- package/src/renderers/shaders/ShaderChunk/uv_pars_vertex.glsl.js +135 -7
- package/src/renderers/shaders/ShaderChunk/uv_vertex.glsl.js +117 -2
- package/src/renderers/shaders/ShaderChunk.js +10 -12
- package/src/renderers/shaders/ShaderLib/background.glsl.js +1 -9
- package/src/renderers/shaders/ShaderLib/backgroundCube.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/cube.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/depth.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/distanceRGBA.glsl.js +2 -0
- package/src/renderers/shaders/ShaderLib/equirect.glsl.js +1 -1
- package/src/renderers/shaders/ShaderLib/linedashed.glsl.js +7 -2
- package/src/renderers/shaders/ShaderLib/meshbasic.glsl.js +5 -6
- package/src/renderers/shaders/ShaderLib/meshlambert.glsl.js +4 -5
- package/src/renderers/shaders/ShaderLib/meshmatcap.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib/meshnormal.glsl.js +3 -3
- package/src/renderers/shaders/ShaderLib/meshphong.glsl.js +4 -5
- package/src/renderers/shaders/ShaderLib/meshphysical.glsl.js +20 -14
- package/src/renderers/shaders/ShaderLib/meshtoon.glsl.js +4 -5
- package/src/renderers/shaders/ShaderLib/points.glsl.js +17 -2
- package/src/renderers/shaders/ShaderLib/shadow.glsl.js +6 -1
- package/src/renderers/shaders/ShaderLib/sprite.glsl.js +4 -2
- package/src/renderers/shaders/ShaderLib.js +18 -4
- package/src/renderers/shaders/UniformsLib.js +27 -15
- package/src/renderers/shaders/UniformsUtils.js +12 -3
- package/src/renderers/webgl/WebGLBackground.js +23 -12
- package/src/renderers/webgl/WebGLBindingStates.js +13 -5
- package/src/renderers/webgl/WebGLCapabilities.js +1 -2
- package/src/renderers/webgl/WebGLClipping.js +7 -3
- package/src/renderers/webgl/WebGLGeometries.js +12 -0
- package/src/renderers/webgl/WebGLInfo.js +0 -1
- package/src/renderers/webgl/WebGLLights.js +2 -2
- package/src/renderers/webgl/WebGLMaterials.js +123 -234
- package/src/renderers/webgl/WebGLMorphtargets.js +1 -1
- package/src/renderers/webgl/WebGLObjects.js +23 -3
- package/src/renderers/webgl/WebGLProgram.js +154 -53
- package/src/renderers/webgl/WebGLPrograms.js +213 -130
- package/src/renderers/webgl/WebGLRenderStates.js +2 -2
- package/src/renderers/webgl/WebGLShadowMap.js +40 -27
- package/src/renderers/webgl/WebGLState.js +23 -9
- package/src/renderers/webgl/WebGLTextures.js +39 -19
- package/src/renderers/webgl/WebGLUniformsGroups.js +74 -33
- package/src/renderers/webgl/WebGLUtils.js +41 -29
- package/src/renderers/webvr/WebVRManager.js +12 -0
- package/src/renderers/webxr/WebXRController.js +3 -0
- package/src/renderers/webxr/WebXRManager.js +96 -134
- package/src/scenes/Scene.js +2 -18
- package/src/textures/CompressedTexture.js +2 -2
- package/src/textures/CubeTexture.js +2 -2
- package/src/textures/DataTexture.js +2 -2
- package/src/textures/DepthTexture.js +22 -0
- package/src/textures/FramebufferTexture.js +1 -3
- package/src/textures/Source.js +4 -0
- package/src/textures/Texture.js +42 -13
- package/src/utils.js +13 -1
- 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 +0 -9
- package/examples/fonts/tabler-icons/fonts/tabler-icons.eot +0 -0
- package/examples/fonts/tabler-icons/fonts/tabler-icons.svg +0 -3966
- 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 +0 -4
- package/examples/js/animation/AnimationClipCreator.js +0 -89
- package/examples/js/animation/CCDIKSolver.js +0 -416
- package/examples/js/animation/MMDAnimationHelper.js +0 -1046
- package/examples/js/animation/MMDPhysics.js +0 -1174
- package/examples/js/cameras/CinematicCamera.js +0 -168
- package/examples/js/controls/ArcballControls.js +0 -2770
- package/examples/js/controls/DragControls.js +0 -205
- package/examples/js/controls/FirstPersonControls.js +0 -312
- package/examples/js/controls/FlyControls.js +0 -321
- package/examples/js/controls/OrbitControls.js +0 -1101
- package/examples/js/controls/PointerLockControls.js +0 -144
- package/examples/js/controls/TrackballControls.js +0 -729
- package/examples/js/controls/TransformControls.js +0 -1301
- package/examples/js/csm/CSM.js +0 -347
- package/examples/js/csm/CSMFrustum.js +0 -127
- package/examples/js/csm/CSMHelper.js +0 -165
- package/examples/js/csm/CSMShader.js +0 -253
- package/examples/js/curves/CurveExtras.js +0 -348
- package/examples/js/curves/NURBSCurve.js +0 -63
- package/examples/js/curves/NURBSSurface.js +0 -48
- package/examples/js/curves/NURBSUtils.js +0 -439
- package/examples/js/effects/AnaglyphEffect.js +0 -86
- package/examples/js/effects/AsciiEffect.js +0 -260
- package/examples/js/effects/OutlineEffect.js +0 -450
- package/examples/js/effects/ParallaxBarrierEffect.js +0 -62
- package/examples/js/effects/PeppersGhostEffect.js +0 -139
- package/examples/js/effects/StereoEffect.js +0 -46
- package/examples/js/environments/DebugEnvironment.js +0 -53
- package/examples/js/environments/RoomEnvironment.js +0 -124
- package/examples/js/exporters/ColladaExporter.js +0 -487
- package/examples/js/exporters/DRACOExporter.js +0 -212
- package/examples/js/exporters/EXRExporter.js +0 -455
- package/examples/js/exporters/GLTFExporter.js +0 -2367
- package/examples/js/exporters/MMDExporter.js +0 -187
- package/examples/js/exporters/OBJExporter.js +0 -260
- package/examples/js/exporters/PLYExporter.js +0 -427
- package/examples/js/exporters/STLExporter.js +0 -188
- package/examples/js/exporters/USDZExporter.js +0 -608
- package/examples/js/geometries/BoxLineGeometry.js +0 -59
- package/examples/js/geometries/ConvexGeometry.js +0 -53
- package/examples/js/geometries/DecalGeometry.js +0 -324
- package/examples/js/geometries/LightningStrike.js +0 -861
- package/examples/js/geometries/ParametricGeometries.js +0 -216
- package/examples/js/geometries/ParametricGeometry.js +0 -121
- package/examples/js/geometries/RoundedBoxGeometry.js +0 -142
- package/examples/js/geometries/TeapotGeometry.js +0 -335
- package/examples/js/geometries/TextGeometry.js +0 -53
- package/examples/js/helpers/LightProbeHelper.js +0 -48
- package/examples/js/helpers/OctreeHelper.js +0 -76
- package/examples/js/helpers/PositionalAudioHelper.js +0 -91
- package/examples/js/helpers/RectAreaLightHelper.js +0 -73
- package/examples/js/helpers/VertexNormalsHelper.js +0 -74
- package/examples/js/helpers/VertexTangentsHelper.js +0 -68
- package/examples/js/helpers/ViewHelper.js +0 -281
- package/examples/js/interactive/HTMLMesh.js +0 -497
- package/examples/js/interactive/InteractiveGroup.js +0 -95
- package/examples/js/interactive/SelectionBox.js +0 -195
- package/examples/js/interactive/SelectionHelper.js +0 -83
- package/examples/js/libs/chevrotain.min.js +0 -3
- package/examples/js/libs/draco/draco_decoder.js +0 -52
- package/examples/js/libs/draco/draco_decoder.wasm +0 -0
- package/examples/js/libs/draco/draco_wasm_wrapper.js +0 -104
- package/examples/js/libs/draco/gltf/draco_decoder.js +0 -48
- package/examples/js/libs/draco/gltf/draco_decoder.wasm +0 -0
- package/examples/js/libs/draco/gltf/draco_wasm_wrapper.js +0 -104
- package/examples/js/libs/fflate.min.js +0 -7
- package/examples/js/libs/ktx-parse.umd.js +0 -1
- package/examples/js/libs/meshopt_decoder.js +0 -188
- package/examples/js/libs/opentype.min.js +0 -1
- package/examples/js/libs/stats.min.js +0 -5
- package/examples/js/lights/LightProbeGenerator.js +0 -221
- package/examples/js/lights/RectAreaLightUniformsLib.js +0 -60
- package/examples/js/lines/Line2.js +0 -19
- package/examples/js/lines/LineGeometry.js +0 -69
- package/examples/js/lines/LineMaterial.js +0 -635
- package/examples/js/lines/LineSegments2.js +0 -313
- package/examples/js/lines/LineSegmentsGeometry.js +0 -198
- package/examples/js/lines/Wireframe.js +0 -47
- package/examples/js/lines/WireframeGeometry2.js +0 -20
- package/examples/js/loaders/3DMLoader.js +0 -1273
- package/examples/js/loaders/3MFLoader.js +0 -1306
- package/examples/js/loaders/AMFLoader.js +0 -504
- package/examples/js/loaders/BVHLoader.js +0 -395
- package/examples/js/loaders/BasisTextureLoader.js +0 -706
- package/examples/js/loaders/ColladaLoader.js +0 -3690
- package/examples/js/loaders/DDSLoader.js +0 -244
- package/examples/js/loaders/DRACOLoader.js +0 -511
- package/examples/js/loaders/EXRLoader.js +0 -2039
- package/examples/js/loaders/FBXLoader.js +0 -3681
- package/examples/js/loaders/FontLoader.js +0 -160
- package/examples/js/loaders/GCodeLoader.js +0 -255
- package/examples/js/loaders/GLTFLoader.js +0 -3862
- package/examples/js/loaders/HDRCubeTextureLoader.js +0 -87
- package/examples/js/loaders/KMZLoader.js +0 -121
- package/examples/js/loaders/KTXLoader.js +0 -159
- package/examples/js/loaders/LDrawLoader.js +0 -2263
- package/examples/js/loaders/LUT3dlLoader.js +0 -135
- package/examples/js/loaders/LUTCubeLoader.js +0 -132
- package/examples/js/loaders/LWOLoader.js +0 -901
- package/examples/js/loaders/LogLuvLoader.js +0 -715
- package/examples/js/loaders/LottieLoader.js +0 -62
- package/examples/js/loaders/MD2Loader.js +0 -248
- package/examples/js/loaders/MDDLoader.js +0 -91
- package/examples/js/loaders/MMDLoader.js +0 -1915
- package/examples/js/loaders/MTLLoader.js +0 -472
- package/examples/js/loaders/NRRDLoader.js +0 -609
- package/examples/js/loaders/OBJLoader.js +0 -789
- package/examples/js/loaders/PCDLoader.js +0 -413
- package/examples/js/loaders/PDBLoader.js +0 -317
- package/examples/js/loaders/PLYLoader.js +0 -576
- package/examples/js/loaders/PRWMLoader.js +0 -249
- package/examples/js/loaders/PVRLoader.js +0 -218
- package/examples/js/loaders/RGBELoader.js +0 -442
- package/examples/js/loaders/RGBMLoader.js +0 -1354
- package/examples/js/loaders/STLLoader.js +0 -364
- package/examples/js/loaders/SVGLoader.js +0 -2783
- package/examples/js/loaders/TDSLoader.js +0 -992
- package/examples/js/loaders/TGALoader.js +0 -484
- package/examples/js/loaders/TIFFLoader.js +0 -30
- package/examples/js/loaders/TTFLoader.js +0 -203
- package/examples/js/loaders/TiltLoader.js +0 -459
- package/examples/js/loaders/VOXLoader.js +0 -240
- package/examples/js/loaders/VRMLLoader.js +0 -3140
- package/examples/js/loaders/VTKLoader.js +0 -1078
- package/examples/js/loaders/XYZLoader.js +0 -89
- package/examples/js/loaders/lwo/IFFParser.js +0 -1067
- package/examples/js/loaders/lwo/LWO2Parser.js +0 -397
- package/examples/js/loaders/lwo/LWO3Parser.js +0 -360
- package/examples/js/materials/MeshGouraudMaterial.js +0 -387
- package/examples/js/math/Capsule.js +0 -103
- package/examples/js/math/ColorConverter.js +0 -33
- package/examples/js/math/ConvexHull.js +0 -1154
- package/examples/js/math/ImprovedNoise.js +0 -66
- package/examples/js/math/Lut.js +0 -164
- package/examples/js/math/MeshSurfaceSampler.js +0 -171
- package/examples/js/math/OBB.js +0 -382
- package/examples/js/math/Octree.js +0 -410
- package/examples/js/math/SimplexNoise.js +0 -445
- package/examples/js/misc/ConvexObjectBreaker.js +0 -474
- package/examples/js/misc/GPUComputationRenderer.js +0 -393
- package/examples/js/misc/Gyroscope.js +0 -56
- package/examples/js/misc/MD2Character.js +0 -235
- package/examples/js/misc/MD2CharacterComplex.js +0 -513
- package/examples/js/misc/MorphAnimMesh.js +0 -63
- package/examples/js/misc/MorphBlendMesh.js +0 -265
- package/examples/js/misc/ProgressiveLightMap.js +0 -335
- package/examples/js/misc/RollerCoaster.js +0 -430
- package/examples/js/misc/TubePainter.js +0 -167
- package/examples/js/misc/Volume.js +0 -437
- package/examples/js/misc/VolumeSlice.js +0 -214
- package/examples/js/modifiers/CurveModifier.js +0 -309
- package/examples/js/modifiers/EdgeSplitModifier.js +0 -228
- package/examples/js/modifiers/SimplifyModifier.js +0 -465
- package/examples/js/modifiers/TessellateModifier.js +0 -276
- package/examples/js/objects/GroundProjectedEnv.js +0 -181
- package/examples/js/objects/Lensflare.js +0 -356
- package/examples/js/objects/LightningStorm.js +0 -206
- package/examples/js/objects/MarchingCubes.js +0 -759
- package/examples/js/objects/Reflector.js +0 -216
- package/examples/js/objects/ReflectorForSSRPass.js +0 -315
- package/examples/js/objects/Refractor.js +0 -283
- package/examples/js/objects/ShadowMesh.js +0 -59
- package/examples/js/objects/Sky.js +0 -218
- package/examples/js/objects/Water.js +0 -292
- package/examples/js/objects/Water2.js +0 -307
- package/examples/js/physics/AmmoPhysics.js +0 -259
- package/examples/js/physics/OimoPhysics.js +0 -217
- package/examples/js/postprocessing/AdaptiveToneMappingPass.js +0 -335
- package/examples/js/postprocessing/AfterimagePass.js +0 -77
- package/examples/js/postprocessing/BloomPass.js +0 -135
- package/examples/js/postprocessing/BokehPass.js +0 -120
- package/examples/js/postprocessing/ClearPass.js +0 -39
- package/examples/js/postprocessing/CubeTexturePass.js +0 -60
- package/examples/js/postprocessing/DotScreenPass.js +0 -51
- package/examples/js/postprocessing/EffectComposer.js +0 -272
- package/examples/js/postprocessing/FilmPass.js +0 -52
- package/examples/js/postprocessing/GlitchPass.js +0 -104
- package/examples/js/postprocessing/HalftonePass.js +0 -75
- package/examples/js/postprocessing/LUTPass.js +0 -171
- package/examples/js/postprocessing/MaskPass.js +0 -95
- package/examples/js/postprocessing/OutlinePass.js +0 -598
- package/examples/js/postprocessing/Pass.js +0 -72
- package/examples/js/postprocessing/RenderPass.js +0 -70
- package/examples/js/postprocessing/RenderPixelatedPass.js +0 -215
- package/examples/js/postprocessing/SAOPass.js +0 -374
- package/examples/js/postprocessing/SMAAPass.js +0 -170
- package/examples/js/postprocessing/SSAARenderPass.js +0 -156
- package/examples/js/postprocessing/SSAOPass.js +0 -365
- package/examples/js/postprocessing/SSRPass.js +0 -567
- package/examples/js/postprocessing/SavePass.js +0 -59
- package/examples/js/postprocessing/ShaderPass.js +0 -64
- package/examples/js/postprocessing/TAARenderPass.js +0 -130
- package/examples/js/postprocessing/TexturePass.js +0 -49
- package/examples/js/postprocessing/UnrealBloomPass.js +0 -375
- package/examples/js/renderers/CSS2DRenderer.js +0 -178
- package/examples/js/renderers/CSS3DRenderer.js +0 -237
- package/examples/js/renderers/Projector.js +0 -818
- package/examples/js/renderers/SVGRenderer.js +0 -491
- package/examples/js/shaders/ACESFilmicToneMappingShader.js +0 -89
- package/examples/js/shaders/AfterimageShader.js +0 -60
- package/examples/js/shaders/BasicShader.js +0 -27
- package/examples/js/shaders/BleachBypassShader.js +0 -62
- package/examples/js/shaders/BlendShader.js +0 -54
- package/examples/js/shaders/BokehShader.js +0 -156
- package/examples/js/shaders/BokehShader2.js +0 -419
- package/examples/js/shaders/BrightnessContrastShader.js +0 -58
- package/examples/js/shaders/ColorCorrectionShader.js +0 -52
- package/examples/js/shaders/ColorifyShader.js +0 -47
- package/examples/js/shaders/ConvolutionShader.js +0 -92
- package/examples/js/shaders/CopyShader.js +0 -45
- package/examples/js/shaders/DOFMipMapShader.js +0 -60
- package/examples/js/shaders/DepthLimitedBlurShader.js +0 -173
- package/examples/js/shaders/DigitalGlitch.js +0 -127
- package/examples/js/shaders/DotScreenShader.js +0 -72
- package/examples/js/shaders/FXAAShader.js +0 -284
- package/examples/js/shaders/FilmShader.js +0 -110
- package/examples/js/shaders/FocusShader.js +0 -95
- package/examples/js/shaders/FreiChenShader.js +0 -93
- package/examples/js/shaders/GammaCorrectionShader.js +0 -41
- package/examples/js/shaders/GodRaysShader.js +0 -284
- package/examples/js/shaders/HalftoneShader.js +0 -336
- package/examples/js/shaders/HorizontalBlurShader.js +0 -59
- package/examples/js/shaders/HorizontalTiltShiftShader.js +0 -65
- package/examples/js/shaders/HueSaturationShader.js +0 -69
- package/examples/js/shaders/KaleidoShader.js +0 -60
- package/examples/js/shaders/LuminosityHighPassShader.js +0 -67
- package/examples/js/shaders/LuminosityShader.js +0 -46
- package/examples/js/shaders/MMDToonShader.js +0 -94
- package/examples/js/shaders/MirrorShader.js +0 -56
- package/examples/js/shaders/NormalMapShader.js +0 -55
- package/examples/js/shaders/RGBShiftShader.js +0 -56
- package/examples/js/shaders/SAOShader.js +0 -209
- package/examples/js/shaders/SMAAShader.js +0 -454
- package/examples/js/shaders/SSAOShader.js +0 -295
- package/examples/js/shaders/SSRShader.js +0 -381
- package/examples/js/shaders/SepiaShader.js +0 -52
- package/examples/js/shaders/SobelOperatorShader.js +0 -88
- package/examples/js/shaders/SubsurfaceScatteringShader.js +0 -49
- package/examples/js/shaders/TechnicolorShader.js +0 -43
- package/examples/js/shaders/ToneMapShader.js +0 -84
- package/examples/js/shaders/ToonShader.js +0 -335
- package/examples/js/shaders/TriangleBlurShader.js +0 -70
- package/examples/js/shaders/UnpackDepthRGBAShader.js +0 -47
- package/examples/js/shaders/VelocityShader.js +0 -126
- package/examples/js/shaders/VerticalBlurShader.js +0 -59
- package/examples/js/shaders/VerticalTiltShiftShader.js +0 -65
- package/examples/js/shaders/VignetteShader.js +0 -53
- package/examples/js/shaders/VolumeShader.js +0 -296
- package/examples/js/shaders/WaterRefractionShader.js +0 -84
- package/examples/js/textures/FlakesTexture.js +0 -40
- package/examples/js/utils/BufferGeometryUtils.js +0 -1160
- package/examples/js/utils/CameraUtils.js +0 -71
- package/examples/js/utils/GPUStatsPanel.js +0 -125
- package/examples/js/utils/GeometryCompressionUtils.js +0 -549
- package/examples/js/utils/GeometryUtils.js +0 -168
- package/examples/js/utils/LDrawUtils.js +0 -179
- package/examples/js/utils/PackedPhongMaterial.js +0 -109
- package/examples/js/utils/SceneUtils.js +0 -214
- package/examples/js/utils/ShadowMapViewer.js +0 -183
- package/examples/js/utils/SkeletonUtils.js +0 -493
- package/examples/js/utils/UVsDebug.js +0 -143
- package/examples/js/utils/WorkerPool.js +0 -105
- package/examples/jsm/exporters/ColladaExporter.js +0 -713
- package/examples/jsm/geometries/LightningStrike.js +0 -1017
- package/examples/jsm/libs/OimoPhysics/OimoPhysics.js +0 -37071
- package/examples/jsm/libs/OimoPhysics/index.js +0 -43
- package/examples/jsm/libs/flow.module.js +0 -4552
- package/examples/jsm/libs/tween.module.min.js +0 -3
- package/examples/jsm/loaders/BasisTextureLoader.js +0 -790
- package/examples/jsm/loaders/IFCLoader.js +0 -2431
- package/examples/jsm/loaders/PRWMLoader.js +0 -299
- package/examples/jsm/loaders/ifc/web-ifc-api.js +0 -47504
- package/examples/jsm/loaders/ifc/web-ifc.wasm +0 -0
- package/examples/jsm/node-editor/NodeEditor.js +0 -857
- package/examples/jsm/node-editor/accessors/MatcapUVEditor.js +0 -14
- package/examples/jsm/node-editor/accessors/NormalEditor.js +0 -30
- package/examples/jsm/node-editor/accessors/PositionEditor.js +0 -30
- package/examples/jsm/node-editor/accessors/UVEditor.js +0 -25
- package/examples/jsm/node-editor/core/BaseNode.js +0 -96
- package/examples/jsm/node-editor/core/DataFile.js +0 -59
- package/examples/jsm/node-editor/core/FileEditor.js +0 -20
- package/examples/jsm/node-editor/core/FileURLEditor.js +0 -29
- package/examples/jsm/node-editor/display/BlendEditor.js +0 -44
- package/examples/jsm/node-editor/display/NormalMapEditor.js +0 -49
- package/examples/jsm/node-editor/examples/animate-uv.json +0 -1
- package/examples/jsm/node-editor/examples/fake-top-light.json +0 -1
- package/examples/jsm/node-editor/examples/matcap.json +0 -1
- package/examples/jsm/node-editor/examples/oscillator-color.json +0 -1
- package/examples/jsm/node-editor/examples/rim.json +0 -1
- package/examples/jsm/node-editor/inputs/ColorEditor.js +0 -96
- package/examples/jsm/node-editor/inputs/FloatEditor.js +0 -23
- package/examples/jsm/node-editor/inputs/SliderEditor.js +0 -67
- package/examples/jsm/node-editor/inputs/TextureEditor.js +0 -155
- package/examples/jsm/node-editor/inputs/Vector2Editor.js +0 -28
- package/examples/jsm/node-editor/inputs/Vector3Editor.js +0 -30
- package/examples/jsm/node-editor/inputs/Vector4Editor.js +0 -37
- package/examples/jsm/node-editor/materials/BasicMaterialEditor.js +0 -84
- package/examples/jsm/node-editor/materials/PointsMaterialEditor.js +0 -102
- package/examples/jsm/node-editor/materials/StandardMaterialEditor.js +0 -118
- package/examples/jsm/node-editor/math/AngleEditor.js +0 -40
- package/examples/jsm/node-editor/math/DotEditor.js +0 -35
- package/examples/jsm/node-editor/math/InvertEditor.js +0 -39
- package/examples/jsm/node-editor/math/LimiterEditor.js +0 -62
- package/examples/jsm/node-editor/math/NormalizeEditor.js +0 -28
- package/examples/jsm/node-editor/math/OperatorEditor.js +0 -63
- package/examples/jsm/node-editor/math/PowerEditor.js +0 -44
- package/examples/jsm/node-editor/math/TrigonometryEditor.js +0 -45
- package/examples/jsm/node-editor/procedural/CheckerEditor.js +0 -27
- package/examples/jsm/node-editor/scene/MeshEditor.js +0 -102
- package/examples/jsm/node-editor/scene/Object3DEditor.js +0 -160
- package/examples/jsm/node-editor/scene/PointsEditor.js +0 -99
- package/examples/jsm/node-editor/utils/JoinEditor.js +0 -58
- package/examples/jsm/node-editor/utils/OscillatorEditor.js +0 -43
- package/examples/jsm/node-editor/utils/PreviewEditor.js +0 -170
- package/examples/jsm/node-editor/utils/SplitEditor.js +0 -39
- package/examples/jsm/node-editor/utils/TimerEditor.js +0 -58
- package/examples/jsm/nodes/core/CodeNode.js +0 -50
- package/examples/jsm/nodes/core/ExpressionNode.js +0 -32
- package/examples/jsm/nodes/core/InstanceIndexNode.js +0 -21
- package/examples/jsm/nodes/functions/light/getDistanceAttenuation.js +0 -22
- package/examples/jsm/nodes/lighting/PunctualLightNode.js +0 -68
- package/examples/jsm/nodes/shadernode/ShaderNodeBaseElements.js +0 -301
- package/examples/jsm/nodes/shadernode/ShaderNodeElements.js +0 -149
- package/examples/jsm/objects/GroundProjectedEnv.js +0 -186
- package/examples/jsm/objects/LightningStorm.js +0 -245
- package/examples/jsm/physics/OimoPhysics.js +0 -231
- package/examples/jsm/postprocessing/AdaptiveToneMappingPass.js +0 -369
- package/examples/jsm/renderers/webgpu/WebGPUAttributes.js +0 -187
- package/examples/jsm/renderers/webgpu/WebGPUBackground.js +0 -173
- package/examples/jsm/renderers/webgpu/WebGPUBinding.js +0 -22
- package/examples/jsm/renderers/webgpu/WebGPUBindings.js +0 -255
- package/examples/jsm/renderers/webgpu/WebGPUBuffer.js +0 -43
- package/examples/jsm/renderers/webgpu/WebGPUComputePipelines.js +0 -78
- package/examples/jsm/renderers/webgpu/WebGPUGeometries.js +0 -82
- package/examples/jsm/renderers/webgpu/WebGPUObjects.js +0 -36
- package/examples/jsm/renderers/webgpu/WebGPUProgrammableStage.js +0 -22
- package/examples/jsm/renderers/webgpu/WebGPUProperties.js +0 -38
- package/examples/jsm/renderers/webgpu/WebGPURenderPipelines.js +0 -296
- package/examples/jsm/renderers/webgpu/WebGPURenderStates.js +0 -66
- package/examples/jsm/renderers/webgpu/WebGPUSampledTexture.js +0 -73
- package/examples/jsm/renderers/webgpu/WebGPUSampler.js +0 -29
- package/examples/jsm/renderers/webgpu/WebGPUStorageBuffer.js +0 -20
- package/examples/jsm/renderers/webgpu/WebGPUTextureRenderer.js +0 -40
- package/examples/jsm/renderers/webgpu/WebGPUTextures.js +0 -794
- package/examples/jsm/renderers/webgpu/WebGPUUniformBuffer.js +0 -18
- package/examples/jsm/renderers/webgpu/WebGPUUtils.js +0 -81
- package/examples/jsm/renderers/webgpu/nodes/WebGPUNodes.js +0 -83
- package/examples/jsm/shaders/ToneMapShader.js +0 -73
- package/src/renderers/shaders/ShaderChunk/uv2_pars_fragment.glsl.js +0 -7
- package/src/renderers/shaders/ShaderChunk/uv2_pars_vertex.glsl.js +0 -10
- package/src/renderers/shaders/ShaderChunk/uv2_vertex.glsl.js +0 -7
- /package/examples/{js → jsm}/libs/ammo.wasm.js +0 -0
- /package/examples/{js → jsm}/libs/ammo.wasm.wasm +0 -0
- /package/examples/{js → jsm}/libs/basis/basis_transcoder.js +0 -0
- /package/examples/{js → jsm}/libs/basis/basis_transcoder.wasm +0 -0
- /package/examples/{js → jsm}/libs/draco/README.md +0 -0
- /package/examples/{js → jsm}/libs/draco/draco_encoder.js +0 -0
- /package/examples/{js → jsm}/libs/draco/gltf/draco_encoder.js +0 -0
- /package/src/renderers/shaders/ShaderChunk/{encodings_fragment.glsl.js → colorspace_fragment.glsl.js} +0 -0
- /package/src/renderers/shaders/ShaderChunk/{encodings_pars_fragment.glsl.js → colorspace_pars_fragment.glsl.js} +0 -0
|
@@ -60,8 +60,9 @@ import {
|
|
|
60
60
|
Vector2,
|
|
61
61
|
Vector3,
|
|
62
62
|
VectorKeyframeTrack,
|
|
63
|
-
|
|
63
|
+
SRGBColorSpace
|
|
64
64
|
} from 'three';
|
|
65
|
+
import { toTrianglesDrawMode } from '../utils/BufferGeometryUtils.js';
|
|
65
66
|
|
|
66
67
|
class GLTFLoader extends Loader {
|
|
67
68
|
|
|
@@ -93,6 +94,12 @@ class GLTFLoader extends Loader {
|
|
|
93
94
|
|
|
94
95
|
} );
|
|
95
96
|
|
|
97
|
+
this.register( function ( parser ) {
|
|
98
|
+
|
|
99
|
+
return new GLTFTextureAVIFExtension( parser );
|
|
100
|
+
|
|
101
|
+
} );
|
|
102
|
+
|
|
96
103
|
this.register( function ( parser ) {
|
|
97
104
|
|
|
98
105
|
return new GLTFMaterialsSheenExtension( parser );
|
|
@@ -135,6 +142,12 @@ class GLTFLoader extends Loader {
|
|
|
135
142
|
|
|
136
143
|
} );
|
|
137
144
|
|
|
145
|
+
this.register( function ( parser ) {
|
|
146
|
+
|
|
147
|
+
return new GLTFMaterialsAnisotropyExtension( parser );
|
|
148
|
+
|
|
149
|
+
} );
|
|
150
|
+
|
|
138
151
|
this.register( function ( parser ) {
|
|
139
152
|
|
|
140
153
|
return new GLTFLightsExtension( parser );
|
|
@@ -286,6 +299,7 @@ class GLTFLoader extends Loader {
|
|
|
286
299
|
let json;
|
|
287
300
|
const extensions = {};
|
|
288
301
|
const plugins = {};
|
|
302
|
+
const textDecoder = new TextDecoder();
|
|
289
303
|
|
|
290
304
|
if ( typeof data === 'string' ) {
|
|
291
305
|
|
|
@@ -293,7 +307,7 @@ class GLTFLoader extends Loader {
|
|
|
293
307
|
|
|
294
308
|
} else if ( data instanceof ArrayBuffer ) {
|
|
295
309
|
|
|
296
|
-
const magic =
|
|
310
|
+
const magic = textDecoder.decode( new Uint8Array( data, 0, 4 ) );
|
|
297
311
|
|
|
298
312
|
if ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {
|
|
299
313
|
|
|
@@ -312,7 +326,7 @@ class GLTFLoader extends Loader {
|
|
|
312
326
|
|
|
313
327
|
} else {
|
|
314
328
|
|
|
315
|
-
json = JSON.parse(
|
|
329
|
+
json = JSON.parse( textDecoder.decode( data ) );
|
|
316
330
|
|
|
317
331
|
}
|
|
318
332
|
|
|
@@ -464,6 +478,7 @@ const EXTENSIONS = {
|
|
|
464
478
|
KHR_MATERIALS_SPECULAR: 'KHR_materials_specular',
|
|
465
479
|
KHR_MATERIALS_TRANSMISSION: 'KHR_materials_transmission',
|
|
466
480
|
KHR_MATERIALS_IRIDESCENCE: 'KHR_materials_iridescence',
|
|
481
|
+
KHR_MATERIALS_ANISOTROPY: 'KHR_materials_anisotropy',
|
|
467
482
|
KHR_MATERIALS_UNLIT: 'KHR_materials_unlit',
|
|
468
483
|
KHR_MATERIALS_VOLUME: 'KHR_materials_volume',
|
|
469
484
|
KHR_TEXTURE_BASISU: 'KHR_texture_basisu',
|
|
@@ -471,6 +486,7 @@ const EXTENSIONS = {
|
|
|
471
486
|
KHR_MESH_QUANTIZATION: 'KHR_mesh_quantization',
|
|
472
487
|
KHR_MATERIALS_EMISSIVE_STRENGTH: 'KHR_materials_emissive_strength',
|
|
473
488
|
EXT_TEXTURE_WEBP: 'EXT_texture_webp',
|
|
489
|
+
EXT_TEXTURE_AVIF: 'EXT_texture_avif',
|
|
474
490
|
EXT_MESHOPT_COMPRESSION: 'EXT_meshopt_compression',
|
|
475
491
|
EXT_MESH_GPU_INSTANCING: 'EXT_mesh_gpu_instancing'
|
|
476
492
|
};
|
|
@@ -584,7 +600,7 @@ class GLTFLightsExtension {
|
|
|
584
600
|
|
|
585
601
|
}
|
|
586
602
|
|
|
587
|
-
getDependency( type, index ) {
|
|
603
|
+
getDependency( type, index ) {
|
|
588
604
|
|
|
589
605
|
if ( type !== 'light' ) return;
|
|
590
606
|
|
|
@@ -654,7 +670,7 @@ class GLTFMaterialsUnlitExtension {
|
|
|
654
670
|
|
|
655
671
|
if ( metallicRoughness.baseColorTexture !== undefined ) {
|
|
656
672
|
|
|
657
|
-
pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture,
|
|
673
|
+
pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );
|
|
658
674
|
|
|
659
675
|
}
|
|
660
676
|
|
|
@@ -935,7 +951,7 @@ class GLTFMaterialsSheenExtension {
|
|
|
935
951
|
|
|
936
952
|
if ( extension.sheenColorTexture !== undefined ) {
|
|
937
953
|
|
|
938
|
-
pending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture,
|
|
954
|
+
pending.push( parser.assignTexture( materialParams, 'sheenColorMap', extension.sheenColorTexture, SRGBColorSpace ) );
|
|
939
955
|
|
|
940
956
|
}
|
|
941
957
|
|
|
@@ -1168,7 +1184,71 @@ class GLTFMaterialsSpecularExtension {
|
|
|
1168
1184
|
|
|
1169
1185
|
if ( extension.specularColorTexture !== undefined ) {
|
|
1170
1186
|
|
|
1171
|
-
pending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture,
|
|
1187
|
+
pending.push( parser.assignTexture( materialParams, 'specularColorMap', extension.specularColorTexture, SRGBColorSpace ) );
|
|
1188
|
+
|
|
1189
|
+
}
|
|
1190
|
+
|
|
1191
|
+
return Promise.all( pending );
|
|
1192
|
+
|
|
1193
|
+
}
|
|
1194
|
+
|
|
1195
|
+
}
|
|
1196
|
+
|
|
1197
|
+
/**
|
|
1198
|
+
* Materials anisotropy Extension
|
|
1199
|
+
*
|
|
1200
|
+
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_anisotropy
|
|
1201
|
+
*/
|
|
1202
|
+
class GLTFMaterialsAnisotropyExtension {
|
|
1203
|
+
|
|
1204
|
+
constructor( parser ) {
|
|
1205
|
+
|
|
1206
|
+
this.parser = parser;
|
|
1207
|
+
this.name = EXTENSIONS.KHR_MATERIALS_ANISOTROPY;
|
|
1208
|
+
|
|
1209
|
+
}
|
|
1210
|
+
|
|
1211
|
+
getMaterialType( materialIndex ) {
|
|
1212
|
+
|
|
1213
|
+
const parser = this.parser;
|
|
1214
|
+
const materialDef = parser.json.materials[ materialIndex ];
|
|
1215
|
+
|
|
1216
|
+
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) return null;
|
|
1217
|
+
|
|
1218
|
+
return MeshPhysicalMaterial;
|
|
1219
|
+
|
|
1220
|
+
}
|
|
1221
|
+
|
|
1222
|
+
extendMaterialParams( materialIndex, materialParams ) {
|
|
1223
|
+
|
|
1224
|
+
const parser = this.parser;
|
|
1225
|
+
const materialDef = parser.json.materials[ materialIndex ];
|
|
1226
|
+
|
|
1227
|
+
if ( ! materialDef.extensions || ! materialDef.extensions[ this.name ] ) {
|
|
1228
|
+
|
|
1229
|
+
return Promise.resolve();
|
|
1230
|
+
|
|
1231
|
+
}
|
|
1232
|
+
|
|
1233
|
+
const pending = [];
|
|
1234
|
+
|
|
1235
|
+
const extension = materialDef.extensions[ this.name ];
|
|
1236
|
+
|
|
1237
|
+
if ( extension.anisotropyStrength !== undefined ) {
|
|
1238
|
+
|
|
1239
|
+
materialParams.anisotropy = extension.anisotropyStrength;
|
|
1240
|
+
|
|
1241
|
+
}
|
|
1242
|
+
|
|
1243
|
+
if ( extension.anisotropyRotation !== undefined ) {
|
|
1244
|
+
|
|
1245
|
+
materialParams.anisotropyRotation = extension.anisotropyRotation;
|
|
1246
|
+
|
|
1247
|
+
}
|
|
1248
|
+
|
|
1249
|
+
if ( extension.anisotropyTexture !== undefined ) {
|
|
1250
|
+
|
|
1251
|
+
pending.push( parser.assignTexture( materialParams, 'anisotropyMap', extension.anisotropyTexture ) );
|
|
1172
1252
|
|
|
1173
1253
|
}
|
|
1174
1254
|
|
|
@@ -1314,6 +1394,89 @@ class GLTFTextureWebPExtension {
|
|
|
1314
1394
|
|
|
1315
1395
|
}
|
|
1316
1396
|
|
|
1397
|
+
/**
|
|
1398
|
+
* AVIF Texture Extension
|
|
1399
|
+
*
|
|
1400
|
+
* Specification: https://github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/EXT_texture_avif
|
|
1401
|
+
*/
|
|
1402
|
+
class GLTFTextureAVIFExtension {
|
|
1403
|
+
|
|
1404
|
+
constructor( parser ) {
|
|
1405
|
+
|
|
1406
|
+
this.parser = parser;
|
|
1407
|
+
this.name = EXTENSIONS.EXT_TEXTURE_AVIF;
|
|
1408
|
+
this.isSupported = null;
|
|
1409
|
+
|
|
1410
|
+
}
|
|
1411
|
+
|
|
1412
|
+
loadTexture( textureIndex ) {
|
|
1413
|
+
|
|
1414
|
+
const name = this.name;
|
|
1415
|
+
const parser = this.parser;
|
|
1416
|
+
const json = parser.json;
|
|
1417
|
+
|
|
1418
|
+
const textureDef = json.textures[ textureIndex ];
|
|
1419
|
+
|
|
1420
|
+
if ( ! textureDef.extensions || ! textureDef.extensions[ name ] ) {
|
|
1421
|
+
|
|
1422
|
+
return null;
|
|
1423
|
+
|
|
1424
|
+
}
|
|
1425
|
+
|
|
1426
|
+
const extension = textureDef.extensions[ name ];
|
|
1427
|
+
const source = json.images[ extension.source ];
|
|
1428
|
+
|
|
1429
|
+
let loader = parser.textureLoader;
|
|
1430
|
+
if ( source.uri ) {
|
|
1431
|
+
|
|
1432
|
+
const handler = parser.options.manager.getHandler( source.uri );
|
|
1433
|
+
if ( handler !== null ) loader = handler;
|
|
1434
|
+
|
|
1435
|
+
}
|
|
1436
|
+
|
|
1437
|
+
return this.detectSupport().then( function ( isSupported ) {
|
|
1438
|
+
|
|
1439
|
+
if ( isSupported ) return parser.loadTextureImage( textureIndex, extension.source, loader );
|
|
1440
|
+
|
|
1441
|
+
if ( json.extensionsRequired && json.extensionsRequired.indexOf( name ) >= 0 ) {
|
|
1442
|
+
|
|
1443
|
+
throw new Error( 'THREE.GLTFLoader: AVIF required by asset but unsupported.' );
|
|
1444
|
+
|
|
1445
|
+
}
|
|
1446
|
+
|
|
1447
|
+
// Fall back to PNG or JPEG.
|
|
1448
|
+
return parser.loadTexture( textureIndex );
|
|
1449
|
+
|
|
1450
|
+
} );
|
|
1451
|
+
|
|
1452
|
+
}
|
|
1453
|
+
|
|
1454
|
+
detectSupport() {
|
|
1455
|
+
|
|
1456
|
+
if ( ! this.isSupported ) {
|
|
1457
|
+
|
|
1458
|
+
this.isSupported = new Promise( function ( resolve ) {
|
|
1459
|
+
|
|
1460
|
+
const image = new Image();
|
|
1461
|
+
|
|
1462
|
+
// Lossy test image.
|
|
1463
|
+
image.src = 'data:image/avif;base64,AAAAIGZ0eXBhdmlmAAAAAGF2aWZtaWYxbWlhZk1BMUIAAADybWV0YQAAAAAAAAAoaGRscgAAAAAAAAAAcGljdAAAAAAAAAAAAAAAAGxpYmF2aWYAAAAADnBpdG0AAAAAAAEAAAAeaWxvYwAAAABEAAABAAEAAAABAAABGgAAABcAAAAoaWluZgAAAAAAAQAAABppbmZlAgAAAAABAABhdjAxQ29sb3IAAAAAamlwcnAAAABLaXBjbwAAABRpc3BlAAAAAAAAAAEAAAABAAAAEHBpeGkAAAAAAwgICAAAAAxhdjFDgQAMAAAAABNjb2xybmNseAACAAIABoAAAAAXaXBtYQAAAAAAAAABAAEEAQKDBAAAAB9tZGF0EgAKCBgABogQEDQgMgkQAAAAB8dSLfI=';
|
|
1464
|
+
image.onload = image.onerror = function () {
|
|
1465
|
+
|
|
1466
|
+
resolve( image.height === 1 );
|
|
1467
|
+
|
|
1468
|
+
};
|
|
1469
|
+
|
|
1470
|
+
} );
|
|
1471
|
+
|
|
1472
|
+
}
|
|
1473
|
+
|
|
1474
|
+
return this.isSupported;
|
|
1475
|
+
|
|
1476
|
+
}
|
|
1477
|
+
|
|
1478
|
+
}
|
|
1479
|
+
|
|
1317
1480
|
/**
|
|
1318
1481
|
* meshopt BufferView Compression Extension
|
|
1319
1482
|
*
|
|
@@ -1526,8 +1689,6 @@ class GLTFMeshGpuInstancing {
|
|
|
1526
1689
|
// Just in case
|
|
1527
1690
|
Object3D.prototype.copy.call( instancedMesh, mesh );
|
|
1528
1691
|
|
|
1529
|
-
// https://github.com/mrdoob/three.js/issues/18334
|
|
1530
|
-
instancedMesh.frustumCulled = false;
|
|
1531
1692
|
this.parser.assignFinalMaterial( instancedMesh );
|
|
1532
1693
|
|
|
1533
1694
|
instancedMeshes.push( instancedMesh );
|
|
@@ -1566,9 +1727,10 @@ class GLTFBinaryExtension {
|
|
|
1566
1727
|
this.body = null;
|
|
1567
1728
|
|
|
1568
1729
|
const headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );
|
|
1730
|
+
const textDecoder = new TextDecoder();
|
|
1569
1731
|
|
|
1570
1732
|
this.header = {
|
|
1571
|
-
magic:
|
|
1733
|
+
magic: textDecoder.decode( new Uint8Array( data.slice( 0, 4 ) ) ),
|
|
1572
1734
|
version: headerView.getUint32( 4, true ),
|
|
1573
1735
|
length: headerView.getUint32( 8, true )
|
|
1574
1736
|
};
|
|
@@ -1598,7 +1760,7 @@ class GLTFBinaryExtension {
|
|
|
1598
1760
|
if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {
|
|
1599
1761
|
|
|
1600
1762
|
const contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );
|
|
1601
|
-
this.content =
|
|
1763
|
+
this.content = textDecoder.decode( contentArray );
|
|
1602
1764
|
|
|
1603
1765
|
} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {
|
|
1604
1766
|
|
|
@@ -1721,13 +1883,10 @@ class GLTFTextureTransformExtension {
|
|
|
1721
1883
|
|
|
1722
1884
|
extendTexture( texture, transform ) {
|
|
1723
1885
|
|
|
1724
|
-
if ( transform.texCoord
|
|
1725
|
-
|
|
1726
|
-
|
|
1727
|
-
|
|
1728
|
-
}
|
|
1729
|
-
|
|
1730
|
-
if ( transform.offset === undefined && transform.rotation === undefined && transform.scale === undefined ) {
|
|
1886
|
+
if ( ( transform.texCoord === undefined || transform.texCoord === texture.channel )
|
|
1887
|
+
&& transform.offset === undefined
|
|
1888
|
+
&& transform.rotation === undefined
|
|
1889
|
+
&& transform.scale === undefined ) {
|
|
1731
1890
|
|
|
1732
1891
|
// See https://github.com/mrdoob/three.js/issues/21819.
|
|
1733
1892
|
return texture;
|
|
@@ -1736,6 +1895,12 @@ class GLTFTextureTransformExtension {
|
|
|
1736
1895
|
|
|
1737
1896
|
texture = texture.clone();
|
|
1738
1897
|
|
|
1898
|
+
if ( transform.texCoord !== undefined ) {
|
|
1899
|
+
|
|
1900
|
+
texture.channel = transform.texCoord;
|
|
1901
|
+
|
|
1902
|
+
}
|
|
1903
|
+
|
|
1739
1904
|
if ( transform.offset !== undefined ) {
|
|
1740
1905
|
|
|
1741
1906
|
texture.offset.fromArray( transform.offset );
|
|
@@ -1937,7 +2102,9 @@ const ATTRIBUTES = {
|
|
|
1937
2102
|
NORMAL: 'normal',
|
|
1938
2103
|
TANGENT: 'tangent',
|
|
1939
2104
|
TEXCOORD_0: 'uv',
|
|
1940
|
-
TEXCOORD_1: '
|
|
2105
|
+
TEXCOORD_1: 'uv1',
|
|
2106
|
+
TEXCOORD_2: 'uv2',
|
|
2107
|
+
TEXCOORD_3: 'uv3',
|
|
1941
2108
|
COLOR_0: 'color',
|
|
1942
2109
|
WEIGHTS_0: 'skinWeight',
|
|
1943
2110
|
JOINTS_0: 'skinIndex',
|
|
@@ -2159,9 +2326,10 @@ function updateMorphTargets( mesh, meshDef ) {
|
|
|
2159
2326
|
|
|
2160
2327
|
function createPrimitiveKey( primitiveDef ) {
|
|
2161
2328
|
|
|
2162
|
-
const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];
|
|
2163
2329
|
let geometryKey;
|
|
2164
2330
|
|
|
2331
|
+
const dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];
|
|
2332
|
+
|
|
2165
2333
|
if ( dracoExtension ) {
|
|
2166
2334
|
|
|
2167
2335
|
geometryKey = 'draco:' + dracoExtension.bufferView
|
|
@@ -2174,6 +2342,16 @@ function createPrimitiveKey( primitiveDef ) {
|
|
|
2174
2342
|
|
|
2175
2343
|
}
|
|
2176
2344
|
|
|
2345
|
+
if ( primitiveDef.targets !== undefined ) {
|
|
2346
|
+
|
|
2347
|
+
for ( let i = 0, il = primitiveDef.targets.length; i < il; i ++ ) {
|
|
2348
|
+
|
|
2349
|
+
geometryKey += ':' + createAttributesKey( primitiveDef.targets[ i ] );
|
|
2350
|
+
|
|
2351
|
+
}
|
|
2352
|
+
|
|
2353
|
+
}
|
|
2354
|
+
|
|
2177
2355
|
return geometryKey;
|
|
2178
2356
|
|
|
2179
2357
|
}
|
|
@@ -2229,6 +2407,8 @@ function getImageURIMimeType( uri ) {
|
|
|
2229
2407
|
|
|
2230
2408
|
}
|
|
2231
2409
|
|
|
2410
|
+
const _identityMatrix = new Matrix4();
|
|
2411
|
+
|
|
2232
2412
|
/* GLTF PARSER */
|
|
2233
2413
|
|
|
2234
2414
|
class GLTFParser {
|
|
@@ -2249,6 +2429,9 @@ class GLTFParser {
|
|
|
2249
2429
|
// BufferGeometry caching
|
|
2250
2430
|
this.primitiveCache = {};
|
|
2251
2431
|
|
|
2432
|
+
// Node cache
|
|
2433
|
+
this.nodeCache = {};
|
|
2434
|
+
|
|
2252
2435
|
// Object3D instance caches
|
|
2253
2436
|
this.meshCache = { refs: {}, uses: {} };
|
|
2254
2437
|
this.cameraCache = { refs: {}, uses: {} };
|
|
@@ -2262,7 +2445,7 @@ class GLTFParser {
|
|
|
2262
2445
|
|
|
2263
2446
|
// Use an ImageBitmapLoader if imageBitmaps are supported. Moves much of the
|
|
2264
2447
|
// expensive work of uploading a texture to the GPU off the main thread.
|
|
2265
|
-
|
|
2448
|
+
|
|
2266
2449
|
let isSafari = false;
|
|
2267
2450
|
let isFirefox = false;
|
|
2268
2451
|
let firefoxVersion = - 1;
|
|
@@ -2319,6 +2502,7 @@ class GLTFParser {
|
|
|
2319
2502
|
|
|
2320
2503
|
// Clear the loader cache
|
|
2321
2504
|
this.cache.removeAll();
|
|
2505
|
+
this.nodeCache = {};
|
|
2322
2506
|
|
|
2323
2507
|
// Mark the special nodes/meshes in json for efficient parse
|
|
2324
2508
|
this._invokeAll( function ( ext ) {
|
|
@@ -2538,7 +2722,11 @@ class GLTFParser {
|
|
|
2538
2722
|
break;
|
|
2539
2723
|
|
|
2540
2724
|
case 'node':
|
|
2541
|
-
dependency = this.
|
|
2725
|
+
dependency = this._invokeOne( function ( ext ) {
|
|
2726
|
+
|
|
2727
|
+
return ext.loadNode && ext.loadNode( index );
|
|
2728
|
+
|
|
2729
|
+
} );
|
|
2542
2730
|
break;
|
|
2543
2731
|
|
|
2544
2732
|
case 'mesh':
|
|
@@ -2889,6 +3077,12 @@ class GLTFParser {
|
|
|
2889
3077
|
|
|
2890
3078
|
texture.name = textureDef.name || sourceDef.name || '';
|
|
2891
3079
|
|
|
3080
|
+
if ( texture.name === '' && typeof sourceDef.uri === 'string' && sourceDef.uri.startsWith( 'data:image/' ) === false ) {
|
|
3081
|
+
|
|
3082
|
+
texture.name = sourceDef.uri;
|
|
3083
|
+
|
|
3084
|
+
}
|
|
3085
|
+
|
|
2892
3086
|
const samplers = json.samplers || {};
|
|
2893
3087
|
const sampler = samplers[ textureDef.sampler ] || {};
|
|
2894
3088
|
|
|
@@ -3007,7 +3201,7 @@ class GLTFParser {
|
|
|
3007
3201
|
* @param {Object} mapDef
|
|
3008
3202
|
* @return {Promise<Texture>}
|
|
3009
3203
|
*/
|
|
3010
|
-
assignTexture( materialParams, mapName, mapDef,
|
|
3204
|
+
assignTexture( materialParams, mapName, mapDef, colorSpace ) {
|
|
3011
3205
|
|
|
3012
3206
|
const parser = this;
|
|
3013
3207
|
|
|
@@ -3015,11 +3209,10 @@ class GLTFParser {
|
|
|
3015
3209
|
|
|
3016
3210
|
if ( ! texture ) return null;
|
|
3017
3211
|
|
|
3018
|
-
|
|
3019
|
-
// However, we will copy UV set 0 to UV set 1 on demand for aoMap
|
|
3020
|
-
if ( mapDef.texCoord !== undefined && mapDef.texCoord != 0 && ! ( mapName === 'aoMap' && mapDef.texCoord == 1 ) ) {
|
|
3212
|
+
if ( mapDef.texCoord !== undefined && mapDef.texCoord > 0 ) {
|
|
3021
3213
|
|
|
3022
|
-
|
|
3214
|
+
texture = texture.clone();
|
|
3215
|
+
texture.channel = mapDef.texCoord;
|
|
3023
3216
|
|
|
3024
3217
|
}
|
|
3025
3218
|
|
|
@@ -3037,9 +3230,9 @@ class GLTFParser {
|
|
|
3037
3230
|
|
|
3038
3231
|
}
|
|
3039
3232
|
|
|
3040
|
-
if (
|
|
3233
|
+
if ( colorSpace !== undefined ) {
|
|
3041
3234
|
|
|
3042
|
-
texture.
|
|
3235
|
+
texture.colorSpace = colorSpace;
|
|
3043
3236
|
|
|
3044
3237
|
}
|
|
3045
3238
|
|
|
@@ -3099,6 +3292,7 @@ class GLTFParser {
|
|
|
3099
3292
|
lineMaterial = new LineBasicMaterial();
|
|
3100
3293
|
Material.prototype.copy.call( lineMaterial, material );
|
|
3101
3294
|
lineMaterial.color.copy( material.color );
|
|
3295
|
+
lineMaterial.map = material.map;
|
|
3102
3296
|
|
|
3103
3297
|
this.cache.add( cacheKey, lineMaterial );
|
|
3104
3298
|
|
|
@@ -3144,14 +3338,6 @@ class GLTFParser {
|
|
|
3144
3338
|
|
|
3145
3339
|
}
|
|
3146
3340
|
|
|
3147
|
-
// workarounds for mesh and geometry
|
|
3148
|
-
|
|
3149
|
-
if ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) {
|
|
3150
|
-
|
|
3151
|
-
geometry.setAttribute( 'uv2', geometry.attributes.uv );
|
|
3152
|
-
|
|
3153
|
-
}
|
|
3154
|
-
|
|
3155
3341
|
mesh.material = material;
|
|
3156
3342
|
|
|
3157
3343
|
}
|
|
@@ -3207,7 +3393,7 @@ class GLTFParser {
|
|
|
3207
3393
|
|
|
3208
3394
|
if ( metallicRoughness.baseColorTexture !== undefined ) {
|
|
3209
3395
|
|
|
3210
|
-
pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture,
|
|
3396
|
+
pending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture, SRGBColorSpace ) );
|
|
3211
3397
|
|
|
3212
3398
|
}
|
|
3213
3399
|
|
|
@@ -3298,7 +3484,7 @@ class GLTFParser {
|
|
|
3298
3484
|
|
|
3299
3485
|
if ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {
|
|
3300
3486
|
|
|
3301
|
-
pending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture,
|
|
3487
|
+
pending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture, SRGBColorSpace ) );
|
|
3302
3488
|
|
|
3303
3489
|
}
|
|
3304
3490
|
|
|
@@ -3325,17 +3511,17 @@ class GLTFParser {
|
|
|
3325
3511
|
|
|
3326
3512
|
const sanitizedName = PropertyBinding.sanitizeNodeName( originalName || '' );
|
|
3327
3513
|
|
|
3328
|
-
|
|
3514
|
+
if ( sanitizedName in this.nodeNamesUsed ) {
|
|
3329
3515
|
|
|
3330
|
-
|
|
3516
|
+
return sanitizedName + '_' + ( ++ this.nodeNamesUsed[ sanitizedName ] );
|
|
3331
3517
|
|
|
3332
|
-
|
|
3518
|
+
} else {
|
|
3333
3519
|
|
|
3334
|
-
|
|
3520
|
+
this.nodeNamesUsed[ sanitizedName ] = 0;
|
|
3335
3521
|
|
|
3336
|
-
|
|
3522
|
+
return sanitizedName;
|
|
3337
3523
|
|
|
3338
|
-
|
|
3524
|
+
}
|
|
3339
3525
|
|
|
3340
3526
|
}
|
|
3341
3527
|
|
|
@@ -3465,10 +3651,9 @@ class GLTFParser {
|
|
|
3465
3651
|
? new SkinnedMesh( geometry, material )
|
|
3466
3652
|
: new Mesh( geometry, material );
|
|
3467
3653
|
|
|
3468
|
-
if ( mesh.isSkinnedMesh === true
|
|
3654
|
+
if ( mesh.isSkinnedMesh === true ) {
|
|
3469
3655
|
|
|
3470
|
-
//
|
|
3471
|
-
// it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputs
|
|
3656
|
+
// normalize skin weights to fix malformed assets (see #15319)
|
|
3472
3657
|
mesh.normalizeSkinWeights();
|
|
3473
3658
|
|
|
3474
3659
|
}
|
|
@@ -3534,12 +3719,16 @@ class GLTFParser {
|
|
|
3534
3719
|
|
|
3535
3720
|
if ( meshes.length === 1 ) {
|
|
3536
3721
|
|
|
3722
|
+
if ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, meshes[ 0 ], meshDef );
|
|
3723
|
+
|
|
3537
3724
|
return meshes[ 0 ];
|
|
3538
3725
|
|
|
3539
3726
|
}
|
|
3540
3727
|
|
|
3541
3728
|
const group = new Group();
|
|
3542
3729
|
|
|
3730
|
+
if ( meshDef.extensions ) addUnknownExtensionsToUserData( extensions, group, meshDef );
|
|
3731
|
+
|
|
3543
3732
|
parser.associations.set( group, { meshes: meshIndex } );
|
|
3544
3733
|
|
|
3545
3734
|
for ( let i = 0, il = meshes.length; i < il; i ++ ) {
|
|
@@ -3603,7 +3792,7 @@ class GLTFParser {
|
|
|
3603
3792
|
|
|
3604
3793
|
for ( let i = 0, il = skinDef.joints.length; i < il; i ++ ) {
|
|
3605
3794
|
|
|
3606
|
-
pending.push( this.
|
|
3795
|
+
pending.push( this._loadNodeShallow( skinDef.joints[ i ] ) );
|
|
3607
3796
|
|
|
3608
3797
|
}
|
|
3609
3798
|
|
|
@@ -3622,6 +3811,9 @@ class GLTFParser {
|
|
|
3622
3811
|
const inverseBindMatrices = results.pop();
|
|
3623
3812
|
const jointNodes = results;
|
|
3624
3813
|
|
|
3814
|
+
// Note that bones (joint nodes) may or may not be in the
|
|
3815
|
+
// scene graph at this time.
|
|
3816
|
+
|
|
3625
3817
|
const bones = [];
|
|
3626
3818
|
const boneInverses = [];
|
|
3627
3819
|
|
|
@@ -3665,8 +3857,10 @@ class GLTFParser {
|
|
|
3665
3857
|
loadAnimation( animationIndex ) {
|
|
3666
3858
|
|
|
3667
3859
|
const json = this.json;
|
|
3860
|
+
const parser = this;
|
|
3668
3861
|
|
|
3669
3862
|
const animationDef = json.animations[ animationIndex ];
|
|
3863
|
+
const animationName = animationDef.name ? animationDef.name : 'animation_' + animationIndex;
|
|
3670
3864
|
|
|
3671
3865
|
const pendingNodes = [];
|
|
3672
3866
|
const pendingInputAccessors = [];
|
|
@@ -3683,6 +3877,8 @@ class GLTFParser {
|
|
|
3683
3877
|
const input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;
|
|
3684
3878
|
const output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;
|
|
3685
3879
|
|
|
3880
|
+
if ( target.node === undefined ) continue;
|
|
3881
|
+
|
|
3686
3882
|
pendingNodes.push( this.getDependency( 'node', name ) );
|
|
3687
3883
|
pendingInputAccessors.push( this.getDependency( 'accessor', input ) );
|
|
3688
3884
|
pendingOutputAccessors.push( this.getDependency( 'accessor', output ) );
|
|
@@ -3719,110 +3915,28 @@ class GLTFParser {
|
|
|
3719
3915
|
|
|
3720
3916
|
if ( node === undefined ) continue;
|
|
3721
3917
|
|
|
3722
|
-
node.updateMatrix
|
|
3723
|
-
|
|
3724
|
-
let TypedKeyframeTrack;
|
|
3725
|
-
|
|
3726
|
-
switch ( PATH_PROPERTIES[ target.path ] ) {
|
|
3727
|
-
|
|
3728
|
-
case PATH_PROPERTIES.weights:
|
|
3729
|
-
|
|
3730
|
-
TypedKeyframeTrack = NumberKeyframeTrack;
|
|
3731
|
-
break;
|
|
3918
|
+
if ( node.updateMatrix ) {
|
|
3732
3919
|
|
|
3733
|
-
|
|
3734
|
-
|
|
3735
|
-
TypedKeyframeTrack = QuaternionKeyframeTrack;
|
|
3736
|
-
break;
|
|
3737
|
-
|
|
3738
|
-
case PATH_PROPERTIES.position:
|
|
3739
|
-
case PATH_PROPERTIES.scale:
|
|
3740
|
-
default:
|
|
3741
|
-
|
|
3742
|
-
TypedKeyframeTrack = VectorKeyframeTrack;
|
|
3743
|
-
break;
|
|
3920
|
+
node.updateMatrix();
|
|
3921
|
+
node.matrixAutoUpdate = true;
|
|
3744
3922
|
|
|
3745
3923
|
}
|
|
3746
3924
|
|
|
3747
|
-
const
|
|
3748
|
-
|
|
3749
|
-
const interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;
|
|
3750
|
-
|
|
3751
|
-
const targetNames = [];
|
|
3925
|
+
const createdTracks = parser._createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target );
|
|
3752
3926
|
|
|
3753
|
-
if (
|
|
3927
|
+
if ( createdTracks ) {
|
|
3754
3928
|
|
|
3755
|
-
|
|
3929
|
+
for ( let k = 0; k < createdTracks.length; k ++ ) {
|
|
3756
3930
|
|
|
3757
|
-
|
|
3758
|
-
|
|
3759
|
-
targetNames.push( object.name ? object.name : object.uuid );
|
|
3760
|
-
|
|
3761
|
-
}
|
|
3762
|
-
|
|
3763
|
-
} );
|
|
3764
|
-
|
|
3765
|
-
} else {
|
|
3766
|
-
|
|
3767
|
-
targetNames.push( targetName );
|
|
3768
|
-
|
|
3769
|
-
}
|
|
3770
|
-
|
|
3771
|
-
let outputArray = outputAccessor.array;
|
|
3772
|
-
|
|
3773
|
-
if ( outputAccessor.normalized ) {
|
|
3774
|
-
|
|
3775
|
-
const scale = getNormalizedComponentScale( outputArray.constructor );
|
|
3776
|
-
const scaled = new Float32Array( outputArray.length );
|
|
3777
|
-
|
|
3778
|
-
for ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {
|
|
3779
|
-
|
|
3780
|
-
scaled[ j ] = outputArray[ j ] * scale;
|
|
3931
|
+
tracks.push( createdTracks[ k ] );
|
|
3781
3932
|
|
|
3782
3933
|
}
|
|
3783
3934
|
|
|
3784
|
-
outputArray = scaled;
|
|
3785
|
-
|
|
3786
|
-
}
|
|
3787
|
-
|
|
3788
|
-
for ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {
|
|
3789
|
-
|
|
3790
|
-
const track = new TypedKeyframeTrack(
|
|
3791
|
-
targetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],
|
|
3792
|
-
inputAccessor.array,
|
|
3793
|
-
outputArray,
|
|
3794
|
-
interpolation
|
|
3795
|
-
);
|
|
3796
|
-
|
|
3797
|
-
// Override interpolation with custom factory method.
|
|
3798
|
-
if ( sampler.interpolation === 'CUBICSPLINE' ) {
|
|
3799
|
-
|
|
3800
|
-
track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {
|
|
3801
|
-
|
|
3802
|
-
// A CUBICSPLINE keyframe in glTF has three output values for each input value,
|
|
3803
|
-
// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()
|
|
3804
|
-
// must be divided by three to get the interpolant's sampleSize argument.
|
|
3805
|
-
|
|
3806
|
-
const interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;
|
|
3807
|
-
|
|
3808
|
-
return new interpolantType( this.times, this.values, this.getValueSize() / 3, result );
|
|
3809
|
-
|
|
3810
|
-
};
|
|
3811
|
-
|
|
3812
|
-
// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.
|
|
3813
|
-
track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;
|
|
3814
|
-
|
|
3815
|
-
}
|
|
3816
|
-
|
|
3817
|
-
tracks.push( track );
|
|
3818
|
-
|
|
3819
3935
|
}
|
|
3820
3936
|
|
|
3821
3937
|
}
|
|
3822
3938
|
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
return new AnimationClip( name, undefined, tracks );
|
|
3939
|
+
return new AnimationClip( animationName, undefined, tracks );
|
|
3826
3940
|
|
|
3827
3941
|
} );
|
|
3828
3942
|
|
|
@@ -3871,53 +3985,118 @@ class GLTFParser {
|
|
|
3871
3985
|
loadNode( nodeIndex ) {
|
|
3872
3986
|
|
|
3873
3987
|
const json = this.json;
|
|
3874
|
-
const extensions = this.extensions;
|
|
3875
3988
|
const parser = this;
|
|
3876
3989
|
|
|
3877
3990
|
const nodeDef = json.nodes[ nodeIndex ];
|
|
3878
3991
|
|
|
3879
|
-
|
|
3880
|
-
const nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';
|
|
3992
|
+
const nodePending = parser._loadNodeShallow( nodeIndex );
|
|
3881
3993
|
|
|
3882
|
-
|
|
3994
|
+
const childPending = [];
|
|
3995
|
+
const childrenDef = nodeDef.children || [];
|
|
3883
3996
|
|
|
3884
|
-
|
|
3997
|
+
for ( let i = 0, il = childrenDef.length; i < il; i ++ ) {
|
|
3885
3998
|
|
|
3886
|
-
|
|
3999
|
+
childPending.push( parser.getDependency( 'node', childrenDef[ i ] ) );
|
|
3887
4000
|
|
|
3888
|
-
|
|
4001
|
+
}
|
|
3889
4002
|
|
|
3890
|
-
|
|
4003
|
+
const skeletonPending = nodeDef.skin === undefined
|
|
4004
|
+
? Promise.resolve( null )
|
|
4005
|
+
: parser.getDependency( 'skin', nodeDef.skin );
|
|
3891
4006
|
|
|
3892
|
-
|
|
4007
|
+
return Promise.all( [
|
|
4008
|
+
nodePending,
|
|
4009
|
+
Promise.all( childPending ),
|
|
4010
|
+
skeletonPending
|
|
4011
|
+
] ).then( function ( results ) {
|
|
3893
4012
|
|
|
3894
|
-
|
|
4013
|
+
const node = results[ 0 ];
|
|
4014
|
+
const children = results[ 1 ];
|
|
4015
|
+
const skeleton = results[ 2 ];
|
|
3895
4016
|
|
|
3896
|
-
|
|
4017
|
+
if ( skeleton !== null ) {
|
|
3897
4018
|
|
|
3898
|
-
|
|
4019
|
+
// This full traverse should be fine because
|
|
4020
|
+
// child glTF nodes have not been added to this node yet.
|
|
4021
|
+
node.traverse( function ( mesh ) {
|
|
3899
4022
|
|
|
3900
|
-
|
|
4023
|
+
if ( ! mesh.isSkinnedMesh ) return;
|
|
3901
4024
|
|
|
3902
|
-
|
|
4025
|
+
mesh.bind( skeleton, _identityMatrix );
|
|
3903
4026
|
|
|
3904
|
-
} )
|
|
4027
|
+
} );
|
|
3905
4028
|
|
|
3906
4029
|
}
|
|
3907
4030
|
|
|
3908
|
-
|
|
4031
|
+
for ( let i = 0, il = children.length; i < il; i ++ ) {
|
|
3909
4032
|
|
|
3910
|
-
|
|
4033
|
+
node.add( children[ i ] );
|
|
3911
4034
|
|
|
3912
|
-
}
|
|
4035
|
+
}
|
|
3913
4036
|
|
|
3914
|
-
|
|
4037
|
+
return node;
|
|
3915
4038
|
|
|
3916
|
-
|
|
4039
|
+
} );
|
|
4040
|
+
|
|
4041
|
+
}
|
|
4042
|
+
|
|
4043
|
+
// ._loadNodeShallow() parses a single node.
|
|
4044
|
+
// skin and child nodes are created and added in .loadNode() (no '_' prefix).
|
|
4045
|
+
_loadNodeShallow( nodeIndex ) {
|
|
3917
4046
|
|
|
3918
|
-
|
|
4047
|
+
const json = this.json;
|
|
4048
|
+
const extensions = this.extensions;
|
|
4049
|
+
const parser = this;
|
|
3919
4050
|
|
|
3920
|
-
|
|
4051
|
+
// This method is called from .loadNode() and .loadSkin().
|
|
4052
|
+
// Cache a node to avoid duplication.
|
|
4053
|
+
|
|
4054
|
+
if ( this.nodeCache[ nodeIndex ] !== undefined ) {
|
|
4055
|
+
|
|
4056
|
+
return this.nodeCache[ nodeIndex ];
|
|
4057
|
+
|
|
4058
|
+
}
|
|
4059
|
+
|
|
4060
|
+
const nodeDef = json.nodes[ nodeIndex ];
|
|
4061
|
+
|
|
4062
|
+
// reserve node's name before its dependencies, so the root has the intended name.
|
|
4063
|
+
const nodeName = nodeDef.name ? parser.createUniqueName( nodeDef.name ) : '';
|
|
4064
|
+
|
|
4065
|
+
const pending = [];
|
|
4066
|
+
|
|
4067
|
+
const meshPromise = parser._invokeOne( function ( ext ) {
|
|
4068
|
+
|
|
4069
|
+
return ext.createNodeMesh && ext.createNodeMesh( nodeIndex );
|
|
4070
|
+
|
|
4071
|
+
} );
|
|
4072
|
+
|
|
4073
|
+
if ( meshPromise ) {
|
|
4074
|
+
|
|
4075
|
+
pending.push( meshPromise );
|
|
4076
|
+
|
|
4077
|
+
}
|
|
4078
|
+
|
|
4079
|
+
if ( nodeDef.camera !== undefined ) {
|
|
4080
|
+
|
|
4081
|
+
pending.push( parser.getDependency( 'camera', nodeDef.camera ).then( function ( camera ) {
|
|
4082
|
+
|
|
4083
|
+
return parser._getNodeRef( parser.cameraCache, nodeDef.camera, camera );
|
|
4084
|
+
|
|
4085
|
+
} ) );
|
|
4086
|
+
|
|
4087
|
+
}
|
|
4088
|
+
|
|
4089
|
+
parser._invokeAll( function ( ext ) {
|
|
4090
|
+
|
|
4091
|
+
return ext.createNodeAttachment && ext.createNodeAttachment( nodeIndex );
|
|
4092
|
+
|
|
4093
|
+
} ).forEach( function ( promise ) {
|
|
4094
|
+
|
|
4095
|
+
pending.push( promise );
|
|
4096
|
+
|
|
4097
|
+
} );
|
|
4098
|
+
|
|
4099
|
+
this.nodeCache[ nodeIndex ] = Promise.all( pending ).then( function ( objects ) {
|
|
3921
4100
|
|
|
3922
4101
|
let node;
|
|
3923
4102
|
|
|
@@ -4001,6 +4180,8 @@ class GLTFParser {
|
|
|
4001
4180
|
|
|
4002
4181
|
} );
|
|
4003
4182
|
|
|
4183
|
+
return this.nodeCache[ nodeIndex ];
|
|
4184
|
+
|
|
4004
4185
|
}
|
|
4005
4186
|
|
|
4006
4187
|
/**
|
|
@@ -4010,7 +4191,6 @@ class GLTFParser {
|
|
|
4010
4191
|
*/
|
|
4011
4192
|
loadScene( sceneIndex ) {
|
|
4012
4193
|
|
|
4013
|
-
const json = this.json;
|
|
4014
4194
|
const extensions = this.extensions;
|
|
4015
4195
|
const sceneDef = this.json.scenes[ sceneIndex ];
|
|
4016
4196
|
const parser = this;
|
|
@@ -4030,11 +4210,17 @@ class GLTFParser {
|
|
|
4030
4210
|
|
|
4031
4211
|
for ( let i = 0, il = nodeIds.length; i < il; i ++ ) {
|
|
4032
4212
|
|
|
4033
|
-
pending.push(
|
|
4213
|
+
pending.push( parser.getDependency( 'node', nodeIds[ i ] ) );
|
|
4034
4214
|
|
|
4035
4215
|
}
|
|
4036
4216
|
|
|
4037
|
-
return Promise.all( pending ).then( function () {
|
|
4217
|
+
return Promise.all( pending ).then( function ( nodes ) {
|
|
4218
|
+
|
|
4219
|
+
for ( let i = 0, il = nodes.length; i < il; i ++ ) {
|
|
4220
|
+
|
|
4221
|
+
scene.add( nodes[ i ] );
|
|
4222
|
+
|
|
4223
|
+
}
|
|
4038
4224
|
|
|
4039
4225
|
// Removes dangling associations, associations that reference a node that
|
|
4040
4226
|
// didn't make it into the scene.
|
|
@@ -4076,56 +4262,134 @@ class GLTFParser {
|
|
|
4076
4262
|
|
|
4077
4263
|
}
|
|
4078
4264
|
|
|
4079
|
-
|
|
4080
|
-
|
|
4081
|
-
function buildNodeHierarchy( nodeId, parentObject, json, parser ) {
|
|
4265
|
+
_createAnimationTracks( node, inputAccessor, outputAccessor, sampler, target ) {
|
|
4082
4266
|
|
|
4083
|
-
|
|
4267
|
+
const tracks = [];
|
|
4084
4268
|
|
|
4085
|
-
|
|
4269
|
+
const targetName = node.name ? node.name : node.uuid;
|
|
4086
4270
|
|
|
4087
|
-
|
|
4271
|
+
const targetNames = [];
|
|
4088
4272
|
|
|
4089
|
-
|
|
4273
|
+
if ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {
|
|
4090
4274
|
|
|
4091
|
-
|
|
4275
|
+
node.traverse( function ( object ) {
|
|
4092
4276
|
|
|
4093
|
-
|
|
4277
|
+
if ( object.morphTargetInfluences ) {
|
|
4094
4278
|
|
|
4095
|
-
|
|
4279
|
+
targetNames.push( object.name ? object.name : object.uuid );
|
|
4096
4280
|
|
|
4097
|
-
|
|
4281
|
+
}
|
|
4098
4282
|
|
|
4099
4283
|
} );
|
|
4100
4284
|
|
|
4101
|
-
|
|
4285
|
+
} else {
|
|
4102
4286
|
|
|
4103
|
-
|
|
4287
|
+
targetNames.push( targetName );
|
|
4104
4288
|
|
|
4105
|
-
|
|
4289
|
+
}
|
|
4106
4290
|
|
|
4107
|
-
|
|
4291
|
+
let TypedKeyframeTrack;
|
|
4108
4292
|
|
|
4109
|
-
|
|
4293
|
+
switch ( PATH_PROPERTIES[ target.path ] ) {
|
|
4110
4294
|
|
|
4111
|
-
|
|
4295
|
+
case PATH_PROPERTIES.weights:
|
|
4296
|
+
|
|
4297
|
+
TypedKeyframeTrack = NumberKeyframeTrack;
|
|
4298
|
+
break;
|
|
4112
4299
|
|
|
4113
|
-
|
|
4300
|
+
case PATH_PROPERTIES.rotation:
|
|
4114
4301
|
|
|
4115
|
-
|
|
4302
|
+
TypedKeyframeTrack = QuaternionKeyframeTrack;
|
|
4303
|
+
break;
|
|
4116
4304
|
|
|
4117
|
-
|
|
4305
|
+
case PATH_PROPERTIES.position:
|
|
4306
|
+
case PATH_PROPERTIES.scale:
|
|
4307
|
+
default:
|
|
4308
|
+
switch ( outputAccessor.itemSize ) {
|
|
4309
|
+
|
|
4310
|
+
case 1:
|
|
4311
|
+
TypedKeyframeTrack = NumberKeyframeTrack;
|
|
4312
|
+
break;
|
|
4313
|
+
case 2:
|
|
4314
|
+
case 3:
|
|
4315
|
+
TypedKeyframeTrack = VectorKeyframeTrack;
|
|
4316
|
+
break;
|
|
4317
|
+
|
|
4318
|
+
}
|
|
4319
|
+
|
|
4320
|
+
break;
|
|
4321
|
+
|
|
4322
|
+
}
|
|
4323
|
+
|
|
4324
|
+
const interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;
|
|
4118
4325
|
|
|
4119
|
-
|
|
4120
|
-
|
|
4326
|
+
const outputArray = this._getArrayFromAccessor( outputAccessor );
|
|
4327
|
+
|
|
4328
|
+
for ( let j = 0, jl = targetNames.length; j < jl; j ++ ) {
|
|
4329
|
+
|
|
4330
|
+
const track = new TypedKeyframeTrack(
|
|
4331
|
+
targetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],
|
|
4332
|
+
inputAccessor.array,
|
|
4333
|
+
outputArray,
|
|
4334
|
+
interpolation
|
|
4335
|
+
);
|
|
4336
|
+
|
|
4337
|
+
// Override interpolation with custom factory method.
|
|
4338
|
+
if ( interpolation === 'CUBICSPLINE' ) {
|
|
4339
|
+
|
|
4340
|
+
this._createCubicSplineTrackInterpolant( track );
|
|
4121
4341
|
|
|
4122
4342
|
}
|
|
4123
4343
|
|
|
4344
|
+
tracks.push( track );
|
|
4345
|
+
|
|
4124
4346
|
}
|
|
4125
4347
|
|
|
4126
|
-
return
|
|
4348
|
+
return tracks;
|
|
4127
4349
|
|
|
4128
|
-
}
|
|
4350
|
+
}
|
|
4351
|
+
|
|
4352
|
+
_getArrayFromAccessor( accessor ) {
|
|
4353
|
+
|
|
4354
|
+
let outputArray = accessor.array;
|
|
4355
|
+
|
|
4356
|
+
if ( accessor.normalized ) {
|
|
4357
|
+
|
|
4358
|
+
const scale = getNormalizedComponentScale( outputArray.constructor );
|
|
4359
|
+
const scaled = new Float32Array( outputArray.length );
|
|
4360
|
+
|
|
4361
|
+
for ( let j = 0, jl = outputArray.length; j < jl; j ++ ) {
|
|
4362
|
+
|
|
4363
|
+
scaled[ j ] = outputArray[ j ] * scale;
|
|
4364
|
+
|
|
4365
|
+
}
|
|
4366
|
+
|
|
4367
|
+
outputArray = scaled;
|
|
4368
|
+
|
|
4369
|
+
}
|
|
4370
|
+
|
|
4371
|
+
return outputArray;
|
|
4372
|
+
|
|
4373
|
+
}
|
|
4374
|
+
|
|
4375
|
+
_createCubicSplineTrackInterpolant( track ) {
|
|
4376
|
+
|
|
4377
|
+
track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {
|
|
4378
|
+
|
|
4379
|
+
// A CUBICSPLINE keyframe in glTF has three output values for each input value,
|
|
4380
|
+
// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()
|
|
4381
|
+
// must be divided by three to get the interpolant's sampleSize argument.
|
|
4382
|
+
|
|
4383
|
+
const interpolantType = ( this instanceof QuaternionKeyframeTrack ) ? GLTFCubicSplineQuaternionInterpolant : GLTFCubicSplineInterpolant;
|
|
4384
|
+
|
|
4385
|
+
return new interpolantType( this.times, this.values, this.getValueSize() / 3, result );
|
|
4386
|
+
|
|
4387
|
+
};
|
|
4388
|
+
|
|
4389
|
+
// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.
|
|
4390
|
+
track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;
|
|
4391
|
+
|
|
4392
|
+
}
|
|
4129
4393
|
|
|
4130
4394
|
}
|
|
4131
4395
|
|
|
@@ -4304,98 +4568,4 @@ function addPrimitiveAttributes( geometry, primitiveDef, parser ) {
|
|
|
4304
4568
|
|
|
4305
4569
|
}
|
|
4306
4570
|
|
|
4307
|
-
/**
|
|
4308
|
-
* @param {BufferGeometry} geometry
|
|
4309
|
-
* @param {Number} drawMode
|
|
4310
|
-
* @return {BufferGeometry}
|
|
4311
|
-
*/
|
|
4312
|
-
function toTrianglesDrawMode( geometry, drawMode ) {
|
|
4313
|
-
|
|
4314
|
-
let index = geometry.getIndex();
|
|
4315
|
-
|
|
4316
|
-
// generate index if not present
|
|
4317
|
-
|
|
4318
|
-
if ( index === null ) {
|
|
4319
|
-
|
|
4320
|
-
const indices = [];
|
|
4321
|
-
|
|
4322
|
-
const position = geometry.getAttribute( 'position' );
|
|
4323
|
-
|
|
4324
|
-
if ( position !== undefined ) {
|
|
4325
|
-
|
|
4326
|
-
for ( let i = 0; i < position.count; i ++ ) {
|
|
4327
|
-
|
|
4328
|
-
indices.push( i );
|
|
4329
|
-
|
|
4330
|
-
}
|
|
4331
|
-
|
|
4332
|
-
geometry.setIndex( indices );
|
|
4333
|
-
index = geometry.getIndex();
|
|
4334
|
-
|
|
4335
|
-
} else {
|
|
4336
|
-
|
|
4337
|
-
console.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Undefined position attribute. Processing not possible.' );
|
|
4338
|
-
return geometry;
|
|
4339
|
-
|
|
4340
|
-
}
|
|
4341
|
-
|
|
4342
|
-
}
|
|
4343
|
-
|
|
4344
|
-
//
|
|
4345
|
-
|
|
4346
|
-
const numberOfTriangles = index.count - 2;
|
|
4347
|
-
const newIndices = [];
|
|
4348
|
-
|
|
4349
|
-
if ( drawMode === TriangleFanDrawMode ) {
|
|
4350
|
-
|
|
4351
|
-
// gl.TRIANGLE_FAN
|
|
4352
|
-
|
|
4353
|
-
for ( let i = 1; i <= numberOfTriangles; i ++ ) {
|
|
4354
|
-
|
|
4355
|
-
newIndices.push( index.getX( 0 ) );
|
|
4356
|
-
newIndices.push( index.getX( i ) );
|
|
4357
|
-
newIndices.push( index.getX( i + 1 ) );
|
|
4358
|
-
|
|
4359
|
-
}
|
|
4360
|
-
|
|
4361
|
-
} else {
|
|
4362
|
-
|
|
4363
|
-
// gl.TRIANGLE_STRIP
|
|
4364
|
-
|
|
4365
|
-
for ( let i = 0; i < numberOfTriangles; i ++ ) {
|
|
4366
|
-
|
|
4367
|
-
if ( i % 2 === 0 ) {
|
|
4368
|
-
|
|
4369
|
-
newIndices.push( index.getX( i ) );
|
|
4370
|
-
newIndices.push( index.getX( i + 1 ) );
|
|
4371
|
-
newIndices.push( index.getX( i + 2 ) );
|
|
4372
|
-
|
|
4373
|
-
|
|
4374
|
-
} else {
|
|
4375
|
-
|
|
4376
|
-
newIndices.push( index.getX( i + 2 ) );
|
|
4377
|
-
newIndices.push( index.getX( i + 1 ) );
|
|
4378
|
-
newIndices.push( index.getX( i ) );
|
|
4379
|
-
|
|
4380
|
-
}
|
|
4381
|
-
|
|
4382
|
-
}
|
|
4383
|
-
|
|
4384
|
-
}
|
|
4385
|
-
|
|
4386
|
-
if ( ( newIndices.length / 3 ) !== numberOfTriangles ) {
|
|
4387
|
-
|
|
4388
|
-
console.error( 'THREE.GLTFLoader.toTrianglesDrawMode(): Unable to generate correct amount of triangles.' );
|
|
4389
|
-
|
|
4390
|
-
}
|
|
4391
|
-
|
|
4392
|
-
// build final geometry
|
|
4393
|
-
|
|
4394
|
-
const newGeometry = geometry.clone();
|
|
4395
|
-
newGeometry.setIndex( newIndices );
|
|
4396
|
-
|
|
4397
|
-
return newGeometry;
|
|
4398
|
-
|
|
4399
|
-
}
|
|
4400
|
-
|
|
4401
4571
|
export { GLTFLoader };
|