{“ast”:null,“code”:“/**n * @author Rich Tibbett / github.com/richtrn * @author mrdoob / mrdoob.com/n * @author Tony Parisi / www.tonyparisi.com/n * @author Takahiro / github.com/takahiroxn * @author Don McCurdy / www.donmccurdy.comn */nimport { AnimationClip, Bone, BufferAttribute, BufferGeometry, ClampToEdgeWrapping, Color, DirectionalLight, DoubleSide, FileLoader, FrontSide, Group, InterleavedBuffer, InterleavedBufferAttribute, Interpolant, InterpolateDiscrete, InterpolateLinear, Line, LineBasicMaterial, LineLoop, LineSegments, LinearFilter, LinearMipmapLinearFilter, LinearMipmapNearestFilter, Loader, LoaderUtils, Material, Math as _Math, Matrix4, Mesh, MeshBasicMaterial, MeshStandardMaterial, MirroredRepeatWrapping, NearestFilter, NearestMipmapLinearFilter, NearestMipmapNearestFilter, NumberKeyframeTrack, Object3D, OrthographicCamera, PerspectiveCamera, PointLight, Points, PointsMaterial, PropertyBinding, QuaternionKeyframeTrack, RGBAFormat, RGBFormat, RepeatWrapping, Scene, ShaderLib, ShaderMaterial, Skeleton, SkinnedMesh, SpotLight, TextureLoader, TriangleFanDrawMode, TriangleStripDrawMode, UniformsUtils, Vector2, VectorKeyframeTrack, VertexColors, sRGBEncoding } from "three";nnvar GLTFLoader = function () {n function GLTFLoader(manager) {n Loader.call(this, manager);n this.dracoLoader = null;n this.ddsLoader = null;n }nn GLTFLoader.prototype = Object.assign(Object.create(Loader.prototype), {n constructor: GLTFLoader,n load: function load(url, onLoad, onProgress, onError) {n var scope = this;n var resourcePath;nn if (this.resourcePath !== '') {n resourcePath = this.resourcePath;n } else if (this.path !== '') {n resourcePath = this.path;n } else {n resourcePath = LoaderUtils.extractUrlBase(url);n } // Tells the LoadingManager to track an extra item, which resolves aftern // the model is fully loaded. This means the count of items loaded willn // be incorrect, but ensures manager.onLoad() does not fire early.nnn scope.manager.itemStart(url);nn var _onError = function _onError(e) {n if (onError) {n onError(e);n } else {n console.error(e);n }nn scope.manager.itemError(url);n scope.manager.itemEnd(url);n };nn var loader = new FileLoader(scope.manager);n loader.setPath(this.path);n loader.setResponseType('arraybuffer');nn if (scope.crossOrigin === 'use-credentials') {n loader.setWithCredentials(true);n }nn loader.load(url, function (data) {n try {n scope.parse(data, resourcePath, function (gltf) {n onLoad(gltf);n scope.manager.itemEnd(url);n }, _onError);n } catch (e) {n _onError(e);n }n }, onProgress, _onError);n },n setDRACOLoader: function setDRACOLoader(dracoLoader) {n this.dracoLoader = dracoLoader;n return this;n },n setDDSLoader: function setDDSLoader(ddsLoader) {n this.ddsLoader = ddsLoader;n return this;n },n parse: function parse(data, path, onLoad, onError) {n var content;n var extensions = {};nn if (typeof data === 'string') {n content = data;n } else {n var magic = LoaderUtils.decodeText(new Uint8Array(data, 0, 4));nn if (magic === BINARY_EXTENSION_HEADER_MAGIC) {n try {n extensions = new GLTFBinaryExtension(data);n } catch (error) {n if (onError) onError(error);n return;n }nn content = extensions.content;n } else {n content = LoaderUtils.decodeText(new Uint8Array(data));n }n }nn var json = JSON.parse(content);nn if (json.asset === undefined || json.asset.version < 2) {n if (onError) onError(new Error('THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported. Use LegacyGLTFLoader instead.'));n return;n }nn if (json.extensionsUsed) {n for (var i = 0; i < json.extensionsUsed.length; ++i) {n var extensionName = json.extensionsUsed;n var extensionsRequired = json.extensionsRequired || [];nn switch (extensionName) {n case EXTENSIONS.KHR_LIGHTS_PUNCTUAL:n extensions = new GLTFLightsExtension(json);n break;nn case EXTENSIONS.KHR_MATERIALS_UNLIT:n extensions = new GLTFMaterialsUnlitExtension();n break;nn case EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:n extensions = new GLTFMaterialsPbrSpecularGlossinessExtension();n break;nn case EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:n extensions = new GLTFDracoMeshCompressionExtension(json, this.dracoLoader);n break;nn case EXTENSIONS.MSFT_TEXTURE_DDS:n extensions = new GLTFTextureDDSExtension(this.ddsLoader);n break;nn case EXTENSIONS.KHR_TEXTURE_TRANSFORM:n extensions = new GLTFTextureTransformExtension();n break;nn default:n if (extensionsRequired.indexOf(extensionName) >= 0) {n console.warn('THREE.GLTFLoader: Unknown extension "' + extensionName + '".');n }nn }n }n }nn var parser = new GLTFParser(json, extensions, {n path: path || this.resourcePath || '',n crossOrigin: this.crossOrigin,n manager: this.managern });n parser.parse(onLoad, onError);n }n });n /* GLTFREGISTRY */nn function GLTFRegistry() {n var objects = {};n return {n get: function get(key) {n return objects;n },n add: function add(key, object) {n objects = object;n },n remove: function remove(key) {n delete objects;n },n removeAll: function removeAll() {n objects = {};n }n };n }n /*********************************/nn /********** EXTENSIONS ***********/nn /*********************************/nnn var EXTENSIONS = {n KHR_BINARY_GLTF: 'KHR_binary_glTF',n KHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',n KHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',n KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',n KHR_MATERIALS_UNLIT: 'KHR_materials_unlit',n KHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',n MSFT_TEXTURE_DDS: 'MSFT_texture_dds'n };n /**n * DDS Texture Extensionn *n * Specification: github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_ddsn *n */nn function GLTFTextureDDSExtension(ddsLoader) {n if (!ddsLoader) {n throw new Error('THREE.GLTFLoader: Attempting to load .dds texture without importing DDSLoader');n }nn this.name = EXTENSIONS.MSFT_TEXTURE_DDS;n this.ddsLoader = ddsLoader;n }n /**n * Punctual Lights Extensionn *n * Specification: github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctualn */nnn function GLTFLightsExtension(json) {n this.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;n var extension = json.extensions && json.extensions || {};n this.lightDefs = extension.lights || [];n }nn GLTFLightsExtension.prototype.loadLight = function (lightIndex) {n var lightDef = this.lightDefs;n var lightNode;n var color = new Color(0xffffff);n if (lightDef.color !== undefined) color.fromArray(lightDef.color);n var range = lightDef.range !== undefined ? lightDef.range : 0;nn switch (lightDef.type) {n case 'directional':n lightNode = new DirectionalLight(color);n lightNode.target.position.set(0, 0, -1);n lightNode.add(lightNode.target);n break;nn case 'point':n lightNode = new PointLight(color);n lightNode.distance = range;n break;nn case 'spot':n lightNode = new SpotLight(color);n lightNode.distance = range; // Handle spotlight properties.nn lightDef.spot = lightDef.spot || {};n lightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;n lightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;n lightNode.angle = lightDef.spot.outerConeAngle;n lightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;n lightNode.target.position.set(0, 0, -1);n lightNode.add(lightNode.target);n break;nn default:n throw new Error('THREE.GLTFLoader: Unexpected light type, "' + lightDef.type + '".');n } // Some lights (e.g. spot) default to a position other than the origin. Reset the positionn // here, because node-level parsing will only override position if explicitly specified.nnn lightNode.position.set(0, 0, 0);n lightNode.decay = 2;n if (lightDef.intensity !== undefined) lightNode.intensity = lightDef.intensity;n lightNode.name = lightDef.name || 'light_' + lightIndex;n return Promise.resolve(lightNode);n };n /**n * Unlit Materials Extensionn *n * Specification: github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlitn */nnn function GLTFMaterialsUnlitExtension() {n this.name = EXTENSIONS.KHR_MATERIALS_UNLIT;n }nn GLTFMaterialsUnlitExtension.prototype.getMaterialType = function () {n return MeshBasicMaterial;n };nn GLTFMaterialsUnlitExtension.prototype.extendParams = function (materialParams, materialDef, parser) {n var pending = [];n materialParams.color = new Color(1.0, 1.0, 1.0);n materialParams.opacity = 1.0;n var metallicRoughness = materialDef.pbrMetallicRoughness;nn if (metallicRoughness) {n if (Array.isArray(metallicRoughness.baseColorFactor)) {n var array = metallicRoughness.baseColorFactor;n materialParams.color.fromArray(array);n materialParams.opacity = array;n }nn if (metallicRoughness.baseColorTexture !== undefined) {n pending.push(parser.assignTexture(materialParams, 'map', metallicRoughness.baseColorTexture));n }n }nn return Promise.all(pending);n };n /* BINARY EXTENSION */nnn var BINARY_EXTENSION_HEADER_MAGIC = 'glTF';n var BINARY_EXTENSION_HEADER_LENGTH = 12;n var BINARY_EXTENSION_CHUNK_TYPES = {n JSON: 0x4E4F534A,n BIN: 0x004E4942n };nn function GLTFBinaryExtension(data) {n this.name = EXTENSIONS.KHR_BINARY_GLTF;n this.content = null;n this.body = null;n var headerView = new DataView(data, 0, BINARY_EXTENSION_HEADER_LENGTH);n this.header = {n magic: LoaderUtils.decodeText(new Uint8Array(data.slice(0, 4))),n version: headerView.getUint32(4, true),n length: headerView.getUint32(8, true)n };nn if (this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC) {n throw new Error('THREE.GLTFLoader: Unsupported glTF-Binary header.');n } else if (this.header.version < 2.0) {n throw new Error('THREE.GLTFLoader: Legacy binary file detected. Use LegacyGLTFLoader instead.');n }nn var chunkView = new DataView(data, BINARY_EXTENSION_HEADER_LENGTH);n var chunkIndex = 0;nn while (chunkIndex < chunkView.byteLength) {n var chunkLength = chunkView.getUint32(chunkIndex, true);n chunkIndex += 4;n var chunkType = chunkView.getUint32(chunkIndex, true);n chunkIndex += 4;nn if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON) {n var contentArray = new Uint8Array(data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength);n this.content = LoaderUtils.decodeText(contentArray);n } else if (chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN) {n var byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;n this.body = data.slice(byteOffset, byteOffset + chunkLength);n } // Clients must ignore chunks with unknown types.nnn chunkIndex += chunkLength;n }nn if (this.content === null) {n throw new Error('THREE.GLTFLoader: JSON content not found.');n }n }n /**n * DRACO Mesh Compression Extensionn *n * Specification: github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compressionn */nnn function GLTFDracoMeshCompressionExtension(json, dracoLoader) {n if (!dracoLoader) {n throw new Error('THREE.GLTFLoader: No DRACOLoader instance provided.');n }nn this.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;n this.json = json;n this.dracoLoader = dracoLoader;n }nn GLTFDracoMeshCompressionExtension.prototype.decodePrimitive = function (primitive, parser) {n var json = this.json;n var dracoLoader = this.dracoLoader;n var bufferViewIndex = primitive.extensions.bufferView;n var gltfAttributeMap = primitive.extensions.attributes;n var threeAttributeMap = {};n var attributeNormalizedMap = {};n var attributeTypeMap = {};nn for (var attributeName in gltfAttributeMap) {n var threeAttributeName = ATTRIBUTES || attributeName.toLowerCase();n threeAttributeMap = gltfAttributeMap;n }nn for (attributeName in primitive.attributes) {n var threeAttributeName = ATTRIBUTES || attributeName.toLowerCase();nn if (gltfAttributeMap !== undefined) {n var accessorDef = json.accessors[primitive.attributes];n var componentType = WEBGL_COMPONENT_TYPES;n attributeTypeMap = componentType;n attributeNormalizedMap = accessorDef.normalized === true;n }n }nn return parser.getDependency('bufferView', bufferViewIndex).then(function (bufferView) {n return new Promise(function (resolve) {n dracoLoader.decodeDracoFile(bufferView, function (geometry) {n for (var attributeName in geometry.attributes) {n var attribute = geometry.attributes;n var normalized = attributeNormalizedMap;n if (normalized !== undefined) attribute.normalized = normalized;n }nn resolve(geometry);n }, threeAttributeMap, attributeTypeMap);n });n });n };n /**n * Texture Transform Extensionn *n * Specification: github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transformn */nnn function GLTFTextureTransformExtension() {n this.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;n }nn GLTFTextureTransformExtension.prototype.extendTexture = function (texture, transform) {n texture = texture.clone();nn if (transform.offset !== undefined) {n texture.offset.fromArray(transform.offset);n }nn if (transform.rotation !== undefined) {n texture.rotation = transform.rotation;n }nn if (transform.scale !== undefined) {n texture.repeat.fromArray(transform.scale);n }nn if (transform.texCoord !== undefined) {n console.warn('THREE.GLTFLoader: Custom UV sets in "' + this.name + '" extension not yet supported.');n }nn texture.needsUpdate = true;n return texture;n };n /**n * Specular-Glossiness Extensionn *n * Specification: github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossinessn */nnn function GLTFMaterialsPbrSpecularGlossinessExtension() {n return {n name: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,n specularGlossinessParams: ['color', 'map', 'lightMap', 'lightMapIntensity', 'aoMap', 'aoMapIntensity', 'emissive', 'emissiveIntensity', 'emissiveMap', 'bumpMap', 'bumpScale', 'normalMap', 'displacementMap', 'displacementScale', 'displacementBias', 'specularMap', 'specular', 'glossinessMap', 'glossiness', 'alphaMap', 'envMap', 'envMapIntensity', 'refractionRatio'],n getMaterialType: function getMaterialType() {n return ShaderMaterial;n },n extendParams: function extendParams(materialParams, materialDef, parser) {n var pbrSpecularGlossiness = materialDef.extensions;n var shader = ShaderLib;n var uniforms = UniformsUtils.clone(shader.uniforms);n var specularMapParsFragmentChunk = ['#ifdef USE_SPECULARMAP', 'tuniform sampler2D specularMap;', '#endif'].join('\n');n var glossinessMapParsFragmentChunk = ['#ifdef USE_GLOSSINESSMAP', 'tuniform sampler2D glossinessMap;', '#endif'].join('\n');n var specularMapFragmentChunk = ['vec3 specularFactor = specular;', '#ifdef USE_SPECULARMAP', 'tvec4 texelSpecular = texture2D( specularMap, vUv );', 'ttexelSpecular = sRGBToLinear( texelSpecular );', 't// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture', 'tspecularFactor *= texelSpecular.rgb;', '#endif'].join('\n');n var glossinessMapFragmentChunk = ['float glossinessFactor = glossiness;', '#ifdef USE_GLOSSINESSMAP', 'tvec4 texelGlossiness = texture2D( glossinessMap, vUv );', 't// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture', 'tglossinessFactor *= texelGlossiness.a;', '#endif'].join('\n');n var lightPhysicalFragmentChunk = ['PhysicalMaterial material;', 'material.diffuseColor = diffuseColor.rgb;', 'material.specularRoughness = clamp( 1.0 - glossinessFactor, 0.04, 1.0 );', 'material.specularColor = specularFactor.rgb;'].join('\n');n var fragmentShader = shader.fragmentShader.replace('uniform float roughness;', 'uniform vec3 specular;').replace('uniform float metalness;', 'uniform float glossiness;').replace('#include <roughnessmap_pars_fragment>', specularMapParsFragmentChunk).replace('#include <metalnessmap_pars_fragment>', glossinessMapParsFragmentChunk).replace('#include <roughnessmap_fragment>', specularMapFragmentChunk).replace('#include <metalnessmap_fragment>', glossinessMapFragmentChunk).replace('#include <lights_physical_fragment>', lightPhysicalFragmentChunk);n delete uniforms.roughness;n delete uniforms.metalness;n delete uniforms.roughnessMap;n delete uniforms.metalnessMap;n uniforms.specular = {n value: new Color().setHex(0x111111)n };n uniforms.glossiness = {n value: 0.5n };n uniforms.specularMap = {n value: nulln };n uniforms.glossinessMap = {n value: nulln };n materialParams.vertexShader = shader.vertexShader;n materialParams.fragmentShader = fragmentShader;n materialParams.uniforms = uniforms;n materialParams.defines = {n 'STANDARD': ''n };n materialParams.color = new Color(1.0, 1.0, 1.0);n materialParams.opacity = 1.0;n var pending = [];nn if (Array.isArray(pbrSpecularGlossiness.diffuseFactor)) {n var array = pbrSpecularGlossiness.diffuseFactor;n materialParams.color.fromArray(array);n materialParams.opacity = array;n }nn if (pbrSpecularGlossiness.diffuseTexture !== undefined) {n pending.push(parser.assignTexture(materialParams, 'map', pbrSpecularGlossiness.diffuseTexture));n }nn materialParams.emissive = new Color(0.0, 0.0, 0.0);n materialParams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0;n materialParams.specular = new Color(1.0, 1.0, 1.0);nn if (Array.isArray(pbrSpecularGlossiness.specularFactor)) {n materialParams.specular.fromArray(pbrSpecularGlossiness.specularFactor);n }nn if (pbrSpecularGlossiness.specularGlossinessTexture !== undefined) {n var specGlossMapDef = pbrSpecularGlossiness.specularGlossinessTexture;n pending.push(parser.assignTexture(materialParams, 'glossinessMap', specGlossMapDef));n pending.push(parser.assignTexture(materialParams, 'specularMap', specGlossMapDef));n }nn return Promise.all(pending);n },n createMaterial: function createMaterial(params) {n // setup material properties based on MeshStandardMaterial for Specular-Glossinessn var material = new ShaderMaterial({n defines: params.defines,n vertexShader: params.vertexShader,n fragmentShader: params.fragmentShader,n uniforms: params.uniforms,n fog: true,n lights: true,n opacity: params.opacity,n transparent: params.transparentn });n material.isGLTFSpecularGlossinessMaterial = true;n material.color = params.color;n material.map = params.map === undefined ? null : params.map;n material.lightMap = null;n material.lightMapIntensity = 1.0;n material.aoMap = params.aoMap === undefined ? null : params.aoMap;n material.aoMapIntensity = 1.0;n material.emissive = params.emissive;n material.emissiveIntensity = 1.0;n material.emissiveMap = params.emissiveMap === undefined ? null : params.emissiveMap;n material.bumpMap = params.bumpMap === undefined ? null : params.bumpMap;n material.bumpScale = 1;n material.normalMap = params.normalMap === undefined ? null : params.normalMap;n if (params.normalScale) material.normalScale = params.normalScale;n material.displacementMap = null;n material.displacementScale = 1;n material.displacementBias = 0;n material.specularMap = params.specularMap === undefined ? null : params.specularMap;n material.specular = params.specular;n material.glossinessMap = params.glossinessMap === undefined ? null : params.glossinessMap;n material.glossiness = params.glossiness;n material.alphaMap = null;n material.envMap = params.envMap === undefined ? null : params.envMap;n material.envMapIntensity = 1.0;n material.refractionRatio = 0.98;n material.extensions.derivatives = true;n return material;n },nn /**n * Clones a GLTFSpecularGlossinessMaterial instance. The ShaderMaterial.copy() method cann * copy only properties it knows about or inherits, and misses many properties that wouldn * normally be defined by MeshStandardMaterial.n *n * This method allows GLTFSpecularGlossinessMaterials to be cloned in the process ofn * loading a glTF model, but cloning later (e.g. by the user) would require these changesn * AND also updating `.onBeforeRender` on the parent mesh.n *n * @param {ShaderMaterial} sourcen * @return {ShaderMaterial}n */n cloneMaterial: function cloneMaterial(source) {n var target = source.clone();n target.isGLTFSpecularGlossinessMaterial = true;n var params = this.specularGlossinessParams;nn for (var i = 0, il = params.length; i < il; i++) {n var value = source[params];n target[params] = value && value.isColor ? value.clone() : value;n }nn return target;n },n // Here's based on refreshUniformsCommon() and refreshUniformsStandard() in WebGLRenderer.n refreshUniforms: function refreshUniforms(renderer, scene, camera, geometry, material) {n if (material.isGLTFSpecularGlossinessMaterial !== true) {n return;n }nn var uniforms = material.uniforms;n var defines = material.defines;n uniforms.opacity.value = material.opacity;n uniforms.diffuse.value.copy(material.color);n uniforms.emissive.value.copy(material.emissive).multiplyScalar(material.emissiveIntensity);n uniforms.map.value = material.map;n uniforms.specularMap.value = material.specularMap;n uniforms.alphaMap.value = material.alphaMap;n uniforms.lightMap.value = material.lightMap;n uniforms.lightMapIntensity.value = material.lightMapIntensity;n uniforms.aoMap.value = material.aoMap;n uniforms.aoMapIntensity.value = material.aoMapIntensity; // uv repeat and offset setting prioritiesn // 1. color mapn // 2. specular mapn // 3. normal mapn // 4. bump mapn // 5. alpha mapn // 6. emissive mapnn var uvScaleMap;nn if (material.map) {n uvScaleMap = material.map;n } else if (material.specularMap) {n uvScaleMap = material.specularMap;n } else if (material.displacementMap) {n uvScaleMap = material.displacementMap;n } else if (material.normalMap) {n uvScaleMap = material.normalMap;n } else if (material.bumpMap) {n uvScaleMap = material.bumpMap;n } else if (material.glossinessMap) {n uvScaleMap = material.glossinessMap;n } else if (material.alphaMap) {n uvScaleMap = material.alphaMap;n } else if (material.emissiveMap) {n uvScaleMap = material.emissiveMap;n }nn if (uvScaleMap !== undefined) {n // backwards compatibilityn if (uvScaleMap.isWebGLRenderTarget) {n uvScaleMap = uvScaleMap.texture;n }nn if (uvScaleMap.matrixAutoUpdate === true) {n uvScaleMap.updateMatrix();n }nn uniforms.uvTransform.value.copy(uvScaleMap.matrix);n }nn if (material.envMap) {n uniforms.envMap.value = material.envMap;n uniforms.envMapIntensity.value = material.envMapIntensity; // don't flip CubeTexture envMaps, flip everything else:n // WebGLRenderTargetCube will be flipped for backwards compatibilityn // WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexturen // this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the futurenn uniforms.flipEnvMap.value = material.envMap.isCubeTexture ? -1 : 1;n uniforms.reflectivity.value = material.reflectivity;n uniforms.refractionRatio.value = material.refractionRatio;n uniforms.maxMipLevel.value = renderer.properties.get(material.envMap).__maxMipLevel;n }nn uniforms.specular.value.copy(material.specular);n uniforms.glossiness.value = material.glossiness;n uniforms.glossinessMap.value = material.glossinessMap;n uniforms.emissiveMap.value = material.emissiveMap;n uniforms.bumpMap.value = material.bumpMap;n uniforms.normalMap.value = material.normalMap;n uniforms.displacementMap.value = material.displacementMap;n uniforms.displacementScale.value = material.displacementScale;n uniforms.displacementBias.value = material.displacementBias;nn if (uniforms.glossinessMap.value !== null && defines.USE_GLOSSINESSMAP === undefined) {n defines.USE_GLOSSINESSMAP = ''; // set USE_ROUGHNESSMAP to enable vUvnn defines.USE_ROUGHNESSMAP = '';n }nn if (uniforms.glossinessMap.value === null && defines.USE_GLOSSINESSMAP !== undefined) {n delete defines.USE_GLOSSINESSMAP;n delete defines.USE_ROUGHNESSMAP;n }n }n };n }n /*********************************/nn /********** INTERPOLATION ********/nn /*********************************/n // Spline Interpolationn // Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolationnnn function GLTFCubicSplineInterpolant(parameterPositions, sampleValues, sampleSize, resultBuffer) {n Interpolant.call(this, parameterPositions, sampleValues, sampleSize, resultBuffer);n }nn GLTFCubicSplineInterpolant.prototype = Object.create(Interpolant.prototype);n GLTFCubicSplineInterpolant.prototype.constructor = GLTFCubicSplineInterpolant;nn GLTFCubicSplineInterpolant.prototype.copySampleValue_ = function (index) {n // Copies a sample value to the result buffer. See description of glTFn // CUBICSPLINE values layout in interpolate_() function below.n var result = this.resultBuffer,n values = this.sampleValues,n valueSize = this.valueSize,n offset = index * valueSize * 3 + valueSize;nn for (var i = 0; i !== valueSize; i++) {n result = values[offset + i];n }nn return result;n };nn GLTFCubicSplineInterpolant.prototype.beforeStart_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;n GLTFCubicSplineInterpolant.prototype.afterEnd_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;nn GLTFCubicSplineInterpolant.prototype.interpolate_ = function (i1, t0, t, t1) {n var result = this.resultBuffer;n var values = this.sampleValues;n var stride = this.valueSize;n var stride2 = stride * 2;n var stride3 = stride * 3;n var td = t1 - t0;n var p = (t - t0) / td;n var pp = p * p;n var ppp = pp * p;n var offset1 = i1 * stride3;n var offset0 = offset1 - stride3;n var s2 = -2 * ppp + 3 * pp;n var s3 = ppp - pp;n var s0 = 1 - s2;n var s1 = s3 - pp + p; // Layout of keyframe output values for CUBICSPLINE animations:n // [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, … ]nn for (var i = 0; i !== stride; i++) {n var p0 = values[offset0 + i + stride]; // splineVertex_knn var m0 = values[offset0 + i + stride2] * td; // outTangent_k * (t_k+1 - t_k)nn var p1 = values[offset1 + i + stride]; // splineVertex_k+1nn var m1 = values[offset1 + i] * td; // inTangent_k+1 * (t_k+1 - t_k)nn result = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;n }nn return result;n };n /*********************************/nn /********** INTERNALS ************/nn /*********************************/nn /* CONSTANTS */nnn var WEBGL_CONSTANTS = {n FLOAT: 5126,n //FLOAT_MAT2: 35674,n FLOAT_MAT3: 35675,n FLOAT_MAT4: 35676,n FLOAT_VEC2: 35664,n FLOAT_VEC3: 35665,n FLOAT_VEC4: 35666,n LINEAR: 9729,n REPEAT: 10497,n SAMPLER_2D: 35678,n POINTS: 0,n LINES: 1,n LINE_LOOP: 2,n LINE_STRIP: 3,n TRIANGLES: 4,n TRIANGLE_STRIP: 5,n TRIANGLE_FAN: 6,n UNSIGNED_BYTE: 5121,n UNSIGNED_SHORT: 5123n };n var WEBGL_COMPONENT_TYPES = {n 5120: Int8Array,n 5121: Uint8Array,n 5122: Int16Array,n 5123: Uint16Array,n 5125: Uint32Array,n 5126: Float32Arrayn };n var WEBGL_FILTERS = {n 9728: NearestFilter,n 9729: LinearFilter,n 9984: NearestMipmapNearestFilter,n 9985: LinearMipmapNearestFilter,n 9986: NearestMipmapLinearFilter,n 9987: LinearMipmapLinearFiltern };n var WEBGL_WRAPPINGS = {n 33071: ClampToEdgeWrapping,n 33648: MirroredRepeatWrapping,n 10497: RepeatWrappingn };n var WEBGL_TYPE_SIZES = {n 'SCALAR': 1,n 'VEC2': 2,n 'VEC3': 3,n 'VEC4': 4,n 'MAT2': 4,n 'MAT3': 9,n 'MAT4': 16n };n var ATTRIBUTES = {n POSITION: 'position',n NORMAL: 'normal',n TANGENT: 'tangent',n TEXCOORD_0: 'uv',n TEXCOORD_1: 'uv2',n COLOR_0: 'color',n WEIGHTS_0: 'skinWeight',n JOINTS_0: 'skinIndex'n };n var PATH_PROPERTIES = {n scale: 'scale',n translation: 'position',n rotation: 'quaternion',n weights: 'morphTargetInfluences'n };n var INTERPOLATION = {n CUBICSPLINE: undefined,n // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Eachn // keyframe track will be initialized with a default interpolation type, then modified.n LINEAR: InterpolateLinear,n STEP: InterpolateDiscreten };n var ALPHA_MODES = {n OPAQUE: 'OPAQUE',n MASK: 'MASK',n BLEND: 'BLEND'n };n var MIME_TYPE_FORMATS = {n 'image/png': RGBAFormat,n 'image/jpeg': RGBFormatn };n /* UTILITY FUNCTIONS */nn function resolveURL(url, path) {n // Invalid URLn if (typeof url !== 'string' || url === '') return ''; // Host Relative URLnn if (/^https?:\/\//i.test(path) && /^\//.test(url)) {n path = path.replace(/(^https?:\/\/+).*/i, '$1');n } // Absolute URL ,https://,//nnn if (/^(https?:)?\/\//i.test(url)) return url; // Data URInn if (/^data:.*,.*$/i.test(url)) return url; // Blob URLnn if (/^blob:.*$/i.test(url)) return url; // Relative URLnn return path + url;n }nn var defaultMaterial;n /**n * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-materialn */nn function createDefaultMaterial() {n defaultMaterial = defaultMaterial || new MeshStandardMaterial({n color: 0xFFFFFF,n emissive: 0x000000,n metalness: 1,n roughness: 1,n transparent: false,n depthTest: true,n side: FrontSiden });n return defaultMaterial;n }nn function addUnknownExtensionsToUserData(knownExtensions, object, objectDef) {n // Add unknown glTF extensions to an object's userData.n for (var name in objectDef.extensions) {n if (knownExtensions === undefined) {n object.userData.gltfExtensions = object.userData.gltfExtensions || {};n object.userData.gltfExtensions = objectDef.extensions;n }n }n }n /**n * @param {Object3D|Material|BufferGeometry} objectn * @param {GLTF.definition} gltfDefn */nnn function assignExtrasToUserData(object, gltfDef) {n if (gltfDef.extras !== undefined) {n if (typeof gltfDef.extras === 'object') {n Object.assign(object.userData, gltfDef.extras);n } else {n console.warn('THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras);n }n }n }n /**n * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targetsn *n * @param {BufferGeometry} geometryn * @param {Array<GLTF.Target>} targetsn * @param {GLTFParser} parsern * @return {Promise<BufferGeometry>}n */nnn function addMorphTargets(geometry, targets, parser) {n var hasMorphPosition = false;n var hasMorphNormal = false;nn for (var i = 0, il = targets.length; i < il; i++) {n var target = targets;n if (target.POSITION !== undefined) hasMorphPosition = true;n if (target.NORMAL !== undefined) hasMorphNormal = true;n if (hasMorphPosition && hasMorphNormal) break;n }nn if (!hasMorphPosition && !hasMorphNormal) return Promise.resolve(geometry);n var pendingPositionAccessors = [];n var pendingNormalAccessors = [];nn for (var i = 0, il = targets.length; i < il; i++) {n var target = targets;nn if (hasMorphPosition) {n var pendingAccessor = target.POSITION !== undefined ? parser.getDependency('accessor', target.POSITION) : geometry.attributes.position;n pendingPositionAccessors.push(pendingAccessor);n }nn if (hasMorphNormal) {n var pendingAccessor = target.NORMAL !== undefined ? parser.getDependency('accessor', target.NORMAL) : geometry.attributes.normal;n pendingNormalAccessors.push(pendingAccessor);n }n }nn return Promise.all([Promise.all(pendingPositionAccessors), Promise.all(pendingNormalAccessors)]).then(function (accessors) {n var morphPositions = accessors;n var morphNormals = accessors; // Clone morph target accessors before modifying them.nn for (var i = 0, il = morphPositions.length; i < il; i++) {n if (geometry.attributes.position === morphPositions) continue;n morphPositions = cloneBufferAttribute(morphPositions);n }nn for (var i = 0, il = morphNormals.length; i < il; i++) {n if (geometry.attributes.normal === morphNormals) continue;n morphNormals = cloneBufferAttribute(morphNormals);n }nn for (var i = 0, il = targets.length; i < il; i++) {n var target = targets;n var attributeName = 'morphTarget' + i;nn if (hasMorphPosition) {n // Three.js morph position is absolute value. The formula isn // basePositionn // + weight0 * ( morphPosition0 - basePosition )n // + weight1 * ( morphPosition1 - basePosition )n // …n // while the glTF one is relativen // basePositionn // + weight0 * glTFmorphPosition0n // + weight1 * glTFmorphPosition1n // …n // then we need to convert from relative to absolute here.n if (target.POSITION !== undefined) {n var positionAttribute = morphPositions;n positionAttribute.name = attributeName;n var position = geometry.attributes.position;nn for (var j = 0, jl = positionAttribute.count; j < jl; j++) {n positionAttribute.setXYZ(j, positionAttribute.getX(j) + position.getX(j), positionAttribute.getY(j) + position.getY(j), positionAttribute.getZ(j) + position.getZ(j));n }n }n }nn if (hasMorphNormal) {n // see target.POSITION's commentn if (target.NORMAL !== undefined) {n var normalAttribute = morphNormals;n normalAttribute.name = attributeName;n var normal = geometry.attributes.normal;nn for (var j = 0, jl = normalAttribute.count; j < jl; j++) {n normalAttribute.setXYZ(j, normalAttribute.getX(j) + normal.getX(j), normalAttribute.getY(j) + normal.getY(j), normalAttribute.getZ(j) + normal.getZ(j));n }n }n }n }nn if (hasMorphPosition) geometry.morphAttributes.position = morphPositions;n if (hasMorphNormal) geometry.morphAttributes.normal = morphNormals;n return geometry;n });n }n /**n * @param {Mesh} meshn * @param {GLTF.Mesh} meshDefn */nnn function updateMorphTargets(mesh, meshDef) {n mesh.updateMorphTargets();nn if (meshDef.weights !== undefined) {n for (var i = 0, il = meshDef.weights.length; i < il; i++) {n mesh.morphTargetInfluences = meshDef.weights;n }n } // .extras has user-defined data, so check that .extras.targetNames is an array.nnn if (meshDef.extras && Array.isArray(meshDef.extras.targetNames)) {n var targetNames = meshDef.extras.targetNames;nn if (mesh.morphTargetInfluences.length === targetNames.length) {n mesh.morphTargetDictionary = {};nn for (var i = 0, il = targetNames.length; i < il; i++) {n mesh.morphTargetDictionary[targetNames] = i;n }n } else {n console.warn('THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.');n }n }n }nn function createPrimitiveKey(primitiveDef) {n var dracoExtension = primitiveDef.extensions && primitiveDef.extensions;n var geometryKey;nn if (dracoExtension) {n geometryKey = 'draco:' + dracoExtension.bufferView + ':' + dracoExtension.indices + ':' + createAttributesKey(dracoExtension.attributes);n } else {n geometryKey = primitiveDef.indices + ':' + createAttributesKey(primitiveDef.attributes) + ':' + primitiveDef.mode;n }nn return geometryKey;n }nn function createAttributesKey(attributes) {n var attributesKey = '';n var keys = Object.keys(attributes).sort();nn for (var i = 0, il = keys.length; i < il; i++) {n attributesKey += keys + ':' + attributes[keys] + ';';n }nn return attributesKey;n }nn function cloneBufferAttribute(attribute) {n if (attribute.isInterleavedBufferAttribute) {n var count = attribute.count;n var itemSize = attribute.itemSize;n var array = attribute.array.slice(0, count * itemSize);nn for (var i = 0, j = 0; i < count; ++i) {n array = attribute.getX(i);n if (itemSize >= 2) array = attribute.getY(i);n if (itemSize >= 3) array = attribute.getZ(i);n if (itemSize >= 4) array = attribute.getW(i);n }nn return new BufferAttribute(array, itemSize, attribute.normalized);n }nn return attribute.clone();n }n /* GLTF PARSER */nnn function GLTFParser(json, extensions, options) {n this.json = json || {};n this.extensions = extensions || {};n this.options = options || {}; // loader object cachenn this.cache = new GLTFRegistry(); // BufferGeometry cachingnn this.primitiveCache = {};n this.textureLoader = new TextureLoader(this.options.manager);n this.textureLoader.setCrossOrigin(this.options.crossOrigin);n this.fileLoader = new FileLoader(this.options.manager);n this.fileLoader.setResponseType('arraybuffer');nn if (this.options.crossOrigin === 'use-credentials') {n this.fileLoader.setWithCredentials(true);n }n }nn GLTFParser.prototype.parse = function (onLoad, onError) {n var parser = this;n var json = this.json;n var extensions = this.extensions; // Clear the loader cachenn this.cache.removeAll(); // Mark the special nodes/meshes in json for efficient parsenn this.markDefs();n Promise.all([this.getDependencies('scene'), this.getDependencies('animation'), this.getDependencies('camera')]).then(function (dependencies) {n var result = {n scene: dependencies[json.scene || 0],n scenes: dependencies,n animations: dependencies,n cameras: dependencies,n asset: json.asset,n parser: parser,n userData: {}n };n addUnknownExtensionsToUserData(extensions, result, json);n assignExtrasToUserData(result, json);n onLoad(result);n })["catch"](onError);n };n /**n * Marks the special nodes/meshes in json for efficient parse.n */nnn GLTFParser.prototype.markDefs = function () {n var nodeDefs = this.json.nodes || [];n var skinDefs = this.json.skins || [];n var meshDefs = this.json.meshes || [];n var meshReferences = {};n var meshUses = {}; // Nothing in the node definition indicates whether it is a Bone or ann // Object3D. Use the skins' joint references to mark bones.nn for (var skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex++) {n var joints = skinDefs.joints;nn for (var i = 0, il = joints.length; i < il; i++) {n nodeDefs[joints].isBone = true;n }n } // Meshes can (and should) be reused by multiple nodes in a glTF asset. Ton // avoid having more than one Mesh with the same name, countn // references and rename instances below.n //n // Example: CesiumMilkTruck sample model reuses "Wheel" meshes.nnn for (var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex++) {n var nodeDef = nodeDefs;nn if (nodeDef.mesh !== undefined) {n if (meshReferences === undefined) {n meshReferences = meshUses = 0;n }nn meshReferences++; // Nothing in the mesh definition indicates whether it isn // a SkinnedMesh or Mesh. Use the node's mesh referencen // to mark SkinnedMesh if node has skin.nn if (nodeDef.skin !== undefined) {n meshDefs.isSkinnedMesh = true;n }n }n }nn this.json.meshReferences = meshReferences;n this.json.meshUses = meshUses;n };n /**n * Requests the specified dependency asynchronously, with caching.n * @param {string} typen * @param {number} indexn * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}n */nnn GLTFParser.prototype.getDependency = function (type, index) {n var cacheKey = type + ':' + index;n var dependency = this.cache.get(cacheKey);nn if (!dependency) {n switch (type) {n case 'scene':n dependency = this.loadScene(index);n break;nn case 'node':n dependency = this.loadNode(index);n break;nn case 'mesh':n dependency = this.loadMesh(index);n break;nn case 'accessor':n dependency = this.loadAccessor(index);n break;nn case 'bufferView':n dependency = this.loadBufferView(index);n break;nn case 'buffer':n dependency = this.loadBuffer(index);n break;nn case 'material':n dependency = this.loadMaterial(index);n break;nn case 'texture':n dependency = this.loadTexture(index);n break;nn case 'skin':n dependency = this.loadSkin(index);n break;nn case 'animation':n dependency = this.loadAnimation(index);n break;nn case 'camera':n dependency = this.loadCamera(index);n break;nn case 'light':n dependency = this.extensions.loadLight(index);n break;nn default:n throw new Error('Unknown type: ' + type);n }nn this.cache.add(cacheKey, dependency);n }nn return dependency;n };n /**n * Requests all dependencies of the specified type asynchronously, with caching.n * @param {string} typen * @return {Promise<Array<Object>>}n */nnn GLTFParser.prototype.getDependencies = function (type) {n var dependencies = this.cache.get(type);nn if (!dependencies) {n var parser = this;n var defs = this.json[type + (type === 'mesh' ? 'es' : 's')] || [];n dependencies = Promise.all(defs.map(function (def, index) {n return parser.getDependency(type, index);n }));n this.cache.add(type, dependencies);n }nn return dependencies;n };n /**n * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-viewsn * @param {number} bufferIndexn * @return {Promise<ArrayBuffer>}n */nnn GLTFParser.prototype.loadBuffer = function (bufferIndex) {n var bufferDef = this.json.buffers;n var loader = this.fileLoader;nn if (bufferDef.type && bufferDef.type !== 'arraybuffer') {n throw new Error('THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.');n } // If present, GLB container is required to be the first buffer.nnn if (bufferDef.uri === undefined && bufferIndex === 0) {n return Promise.resolve(this.extensions.body);n }nn var options = this.options;n return new Promise(function (resolve, reject) {n loader.load(resolveURL(bufferDef.uri, options.path), resolve, undefined, function () {n reject(new Error('THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".'));n });n });n };n /**n * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-viewsn * @param {number} bufferViewIndexn * @return {Promise<ArrayBuffer>}n */nnn GLTFParser.prototype.loadBufferView = function (bufferViewIndex) {n var bufferViewDef = this.json.bufferViews;n return this.getDependency('buffer', bufferViewDef.buffer).then(function (buffer) {n var byteLength = bufferViewDef.byteLength || 0;n var byteOffset = bufferViewDef.byteOffset || 0;n return buffer.slice(byteOffset, byteOffset + byteLength);n });n };n /**n * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessorsn * @param {number} accessorIndexn * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}n */nnn GLTFParser.prototype.loadAccessor = function (accessorIndex) {n var parser = this;n var json = this.json;n var accessorDef = this.json.accessors;nn if (accessorDef.bufferView === undefined && accessorDef.sparse === undefined) {n // Ignore empty accessors, which may be used to declare runtimen // information about attributes coming from another source (e.g. Dracon // compression extension).n return Promise.resolve(null);n }nn var pendingBufferViews = [];nn if (accessorDef.bufferView !== undefined) {n pendingBufferViews.push(this.getDependency('bufferView', accessorDef.bufferView));n } else {n pendingBufferViews.push(null);n }nn if (accessorDef.sparse !== undefined) {n pendingBufferViews.push(this.getDependency('bufferView', accessorDef.sparse.indices.bufferView));n pendingBufferViews.push(this.getDependency('bufferView', accessorDef.sparse.values.bufferView));n }nn return Promise.all(pendingBufferViews).then(function (bufferViews) {n var bufferView = bufferViews;n var itemSize = WEBGL_TYPE_SIZES;n var TypedArray = WEBGL_COMPONENT_TYPES; // For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.nn var elementBytes = TypedArray.BYTES_PER_ELEMENT;n var itemBytes = elementBytes * itemSize;n var byteOffset = accessorDef.byteOffset || 0;n var byteStride = accessorDef.bufferView !== undefined ? json.bufferViews.byteStride : undefined;n var normalized = accessorDef.normalized === true;n var array, bufferAttribute; // The buffer is not interleaved if the stride is the item size in bytes.nn if (byteStride && byteStride !== itemBytes) {n // Each "slice" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBuffern // This makes sure that IBA.count reflects accessor.count properlyn var ibSlice = Math.floor(byteOffset / byteStride);n var ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;n var ib = parser.cache.get(ibCacheKey);nn if (!ib) {n array = new TypedArray(bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes); // Integer
parameters to IB/IBA are in array elements, not bytes.nn ib = new InterleavedBuffer(array, byteStride / elementBytes);n parser.cache.add(ibCacheKey, ib);n }nn bufferAttribute = new InterleavedBufferAttribute(ib, itemSize, byteOffset % byteStride / elementBytes, normalized);n } else {n if (bufferView === null) {n array = new TypedArray(accessorDef.count * itemSize);n } else {n array = new TypedArray(bufferView, byteOffset, accessorDef.count * itemSize);n }nn bufferAttribute = new BufferAttribute(array, itemSize, normalized);n } // github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessorsnnn if (accessorDef.sparse !== undefined) {n var itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;n var TypedArrayIndices = WEBGL_COMPONENT_TYPES;n var byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;n var byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;n var sparseIndices = new TypedArrayIndices(bufferViews, byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices);n var sparseValues = new TypedArray(bufferViews, byteOffsetValues, accessorDef.sparse.count * itemSize);nn if (bufferView !== null) {n // Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.n bufferAttribute = new BufferAttribute(bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized);n }nn for (var i = 0, il = sparseIndices.length; i < il; i++) {n var index = sparseIndices;n bufferAttribute.setX(index, sparseValues[i * itemSize]);n if (itemSize >= 2) bufferAttribute.setY(index, sparseValues[i * itemSize + 1]);n if (itemSize >= 3) bufferAttribute.setZ(index, sparseValues[i * itemSize + 2]);n if (itemSize >= 4) bufferAttribute.setW(index, sparseValues[i * itemSize + 3]);n if (itemSize >= 5) throw new Error('THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.');n }n }nn return bufferAttribute;n });n };n /**n * Specification: github.com/KhronosGroup/glTF/tree/master/specification/2.0#texturesn * @param {number} textureIndexn * @return {Promise<THREE.Texture>}n */nnn GLTFParser.prototype.loadTexture = function (textureIndex) {n var parser = this;n var json = this.json;n var options = this.options;n var textureLoader = this.textureLoader;n var URL = window.URL || window.webkitURL;n var textureDef = json.textures;n var textureExtensions = textureDef.extensions || {};n var source;nn if (textureExtensions) {n source = json.images[textureExtensions.source];n } else {n source = json.images;n }nn var sourceURI = source.uri;n var isObjectURL = false;nn if (source.bufferView !== undefined) {n // Load binary image data from bufferView, if provided.n sourceURI = parser.getDependency('bufferView', source.bufferView).then(function (bufferView) {n isObjectURL = true;n var blob = new Blob(, {n type: source.mimeTypen });n sourceURI = URL.createObjectURL(blob);n return sourceURI;n });n }nn return Promise.resolve(sourceURI).then(function (sourceURI) {n // Load Texture resource.n var loader = options.manager.getHandler(sourceURI);nn if (!loader) {n loader = textureExtensions ? parser.extensions.ddsLoader : textureLoader;n }nn return new Promise(function (resolve, reject) {n loader.load(resolveURL(sourceURI, options.path), resolve, undefined, reject);n });n }).then(function (texture) {n // Clean up resources and configure Texture.n if (isObjectURL === true) {n URL.revokeObjectURL(sourceURI);n }nn texture.flipY = false;n if (textureDef.name !== undefined) texture.name = textureDef.name; // Ignore unknown mime types, like DDS files.nn if (source.mimeType in MIME_TYPE_FORMATS) {n texture.format = MIME_TYPE_FORMATS;n }nn var samplers = json.samplers || {};n var sampler = samplers || {};n texture.magFilter = WEBGL_FILTERS || LinearFilter;n texture.minFilter = WEBGL_FILTERS || LinearMipmapLinearFilter;n texture.wrapS = WEBGL_WRAPPINGS || RepeatWrapping;n texture.wrapT = WEBGL_WRAPPINGS || RepeatWrapping;n return texture;n });n };n /**n * Asynchronously assigns a texture to the given material parameters.n * @param {Object} materialParamsn * @param {string} mapNamen * @param {Object} mapDefn * @return {Promise}n */nnn GLTFParser.prototype.assignTexture = function (materialParams, mapName, mapDef) {n var parser = this;n return this.getDependency('texture', mapDef.index).then(function (texture) {n if (!texture.isCompressedTexture) {n switch (mapName) {n case 'aoMap':n case 'emissiveMap':n case 'metalnessMap':n case 'normalMap':n case 'roughnessMap':n texture.format = RGBFormat;n break;n }n }nn if (parser.extensions) {n var transform = mapDef.extensions !== undefined ? mapDef.extensions : undefined;nn if (transform) {n texture = parser.extensions.extendTexture(texture, transform);n }n }nn materialParams = texture;n });n };n /**n * Assigns final material to a Mesh, Line, or Points instance. The instancen * already has a material (generated from the glTF material options alone)n * but reuse of the same glTF material may require multiple threejs materialsn * to accomodate different primitive types, defines, etc. New materials willn * be created if necessary, and reused from a cache.n * @param {Object3D} mesh Mesh, Line, or Points instance.n */nnn GLTFParser.prototype.assignFinalMaterial = function (mesh) {n var geometry = mesh.geometry;n var material = mesh.material;n var extensions = this.extensions;n var useVertexTangents = geometry.attributes.tangent !== undefined;n var useVertexColors = geometry.attributes.color !== undefined;n var useFlatShading = geometry.attributes.normal === undefined;n var useSkinning = mesh.isSkinnedMesh === true;n var useMorphTargets = Object.keys(geometry.morphAttributes).length > 0;n var useMorphNormals = useMorphTargets && geometry.morphAttributes.normal !== undefined;nn if (mesh.isPoints) {n var cacheKey = 'PointsMaterial:' + material.uuid;n var pointsMaterial = this.cache.get(cacheKey);nn if (!pointsMaterial) {n pointsMaterial = new PointsMaterial();n Material.prototype.copy.call(pointsMaterial, material);n pointsMaterial.color.copy(material.color);n pointsMaterial.map = material.map;n pointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1pxnn this.cache.add(cacheKey, pointsMaterial);n }nn material = pointsMaterial;n } else if (mesh.isLine) {n var cacheKey = 'LineBasicMaterial:' + material.uuid;n var lineMaterial = this.cache.get(cacheKey);nn if (!lineMaterial) {n lineMaterial = new LineBasicMaterial();n Material.prototype.copy.call(lineMaterial, material);n lineMaterial.color.copy(material.color);n this.cache.add(cacheKey, lineMaterial);n }nn material = lineMaterial;n } // Clone the material if it will be modifiednnn if (useVertexTangents || useVertexColors || useFlatShading || useSkinning || useMorphTargets) {n var cacheKey = 'ClonedMaterial:' + material.uuid + ':';n if (material.isGLTFSpecularGlossinessMaterial) cacheKey += 'specular-glossiness:';n if (useSkinning) cacheKey += 'skinning:';n if (useVertexTangents) cacheKey += 'vertex-tangents:';n if (useVertexColors) cacheKey += 'vertex-colors:';n if (useFlatShading) cacheKey += 'flat-shading:';n if (useMorphTargets) cacheKey += 'morph-targets:';n if (useMorphNormals) cacheKey += 'morph-normals:';n var cachedMaterial = this.cache.get(cacheKey);nn if (!cachedMaterial) {n cachedMaterial = material.isGLTFSpecularGlossinessMaterial ? extensions.cloneMaterial(material) : material.clone();n if (useSkinning) cachedMaterial.skinning = true;n if (useVertexTangents) cachedMaterial.vertexTangents = true;n if (useVertexColors) cachedMaterial.vertexColors = VertexColors;n if (useFlatShading) cachedMaterial.flatShading = true;n if (useMorphTargets) cachedMaterial.morphTargets = true;n if (useMorphNormals) cachedMaterial.morphNormals = true;n this.cache.add(cacheKey, cachedMaterial);n }nn material = cachedMaterial;n } // workarounds for mesh and geometrynnn if (material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined) {n console.log('THREE.GLTFLoader: Duplicating UVs to support aoMap.');n geometry.addAttribute('uv2', new BufferAttribute(geometry.attributes.uv.array, 2));n }nn if (material.isGLTFSpecularGlossinessMaterial) {n // for GLTFSpecularGlossinessMaterial(ShaderMaterial) uniforms runtime updaten mesh.onBeforeRender = extensions.refreshUniforms;n }nn mesh.material = material;n };n /**n * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materialsn * @param {number} materialIndexn * @return {Promise<Material>}n */nnn GLTFParser.prototype.loadMaterial = function (materialIndex) {n var parser = this;n var json = this.json;n var extensions = this.extensions;n var materialDef = json.materials;n var materialType;n var materialParams = {};n var materialExtensions = materialDef.extensions || {};n var pending = [];nn if (materialExtensions) {n var sgExtension = extensions;n materialType = sgExtension.getMaterialType();n pending.push(sgExtension.extendParams(materialParams, materialDef, parser));n } else if (materialExtensions) {n var kmuExtension = extensions;n materialType = kmuExtension.getMaterialType();n pending.push(kmuExtension.extendParams(materialParams, materialDef, parser));n } else {n // Specification:n // github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-materialn materialType = MeshStandardMaterial;n var metallicRoughness = materialDef.pbrMetallicRoughness || {};n materialParams.color = new Color(1.0, 1.0, 1.0);n materialParams.opacity = 1.0;nn if (Array.isArray(metallicRoughness.baseColorFactor)) {n var array = metallicRoughness.baseColorFactor;n materialParams.color.fromArray(array);n materialParams.opacity = array;n }nn if (metallicRoughness.baseColorTexture !== undefined) {n pending.push(parser.assignTexture(materialParams, 'map', metallicRoughness.baseColorTexture));n }nn materialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;n materialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;nn if (metallicRoughness.metallicRoughnessTexture !== undefined) {n pending.push(parser.assignTexture(materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture));n pending.push(parser.assignTexture(materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture));n }n }nn if (materialDef.doubleSided === true) {n materialParams.side = DoubleSide;n }nn var alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;nn if (alphaMode === ALPHA_MODES.BLEND) {n materialParams.transparent = true;n } else {n materialParams.transparent = false;nn if (alphaMode === ALPHA_MODES.MASK) {n materialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;n }n }nn if (materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial) {n pending.push(parser.assignTexture(materialParams, 'normalMap', materialDef.normalTexture));n materialParams.normalScale = new Vector2(1, 1);nn if (materialDef.normalTexture.scale !== undefined) {n materialParams.normalScale.set(materialDef.normalTexture.scale, materialDef.normalTexture.scale);n }n }nn if (materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial) {n pending.push(parser.assignTexture(materialParams, 'aoMap', materialDef.occlusionTexture));nn if (materialDef.occlusionTexture.strength !== undefined) {n materialParams.aoMapIntensity = materialDef.occlusionTexture.strength;n }n }nn if (materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial) {n materialParams.emissive = new Color().fromArray(materialDef.emissiveFactor);n }nn if (materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial) {n pending.push(parser.assignTexture(materialParams, 'emissiveMap', materialDef.emissiveTexture));n }nn return Promise.all(pending).then(function () {n var material;nn if (materialType === ShaderMaterial) {n material = extensions.createMaterial(materialParams);n } else {n material = new materialType(materialParams);n }nn if (materialDef.name !== undefined) material.name = materialDef.name; // baseColorTexture, emissiveTexture, and specularGlossinessTexture use sRGB encoding.nn if (material.map) material.map.encoding = sRGBEncoding;n if (material.emissiveMap) material.emissiveMap.encoding = sRGBEncoding;n if (material.specularMap) material.specularMap.encoding = sRGBEncoding;n assignExtrasToUserData(material, materialDef);n if (materialDef.extensions) addUnknownExtensionsToUserData(extensions, material, materialDef);n return material;n });n };n /**n * @param {BufferGeometry} geometryn * @param {GLTF.Primitive} primitiveDefn * @param {GLTFParser} parsern * @return {Promise<BufferGeometry>}n */nnn function addPrimitiveAttributes(geometry, primitiveDef, parser) {n var attributes = primitiveDef.attributes;n var pending = [];nn function assignAttributeAccessor(accessorIndex, attributeName) {n return parser.getDependency('accessor', accessorIndex).then(function (accessor) {n geometry.addAttribute(attributeName, accessor);n });n }nn for (var gltfAttributeName in attributes) {n var threeAttributeName = ATTRIBUTES || gltfAttributeName.toLowerCase(); // Skip attributes already provided by e.g. Draco extension.nn if (threeAttributeName in geometry.attributes) continue;n pending.push(assignAttributeAccessor(attributes, threeAttributeName));n }nn if (primitiveDef.indices !== undefined && !geometry.index) {n var accessor = parser.getDependency('accessor', primitiveDef.indices).then(function (accessor) {n geometry.setIndex(accessor);n });n pending.push(accessor);n }nn assignExtrasToUserData(geometry, primitiveDef);n return Promise.all(pending).then(function () {n return primitiveDef.targets !== undefined ? addMorphTargets(geometry, primitiveDef.targets, parser) : geometry;n });n }n /**n * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometryn *n * Creates BufferGeometries from primitives.n *n * @param {Array<GLTF.Primitive>} primitivesn * @return {Promise<Array<BufferGeometry>>}n */nnn GLTFParser.prototype.loadGeometries = function (primitives) {n var parser = this;n var extensions = this.extensions;n var cache = this.primitiveCache;nn function createDracoPrimitive(primitive) {n return extensions.decodePrimitive(primitive, parser).then(function (geometry) {n return addPrimitiveAttributes(geometry, primitive, parser);n });n }nn var pending = [];nn for (var i = 0, il = primitives.length; i < il; i++) {n var primitive = primitives;n var cacheKey = createPrimitiveKey(primitive); // See if we've already created this geometrynn var cached = cache;nn if (cached) {n // Use the cached geometry if it existsn pending.push(cached.promise);n } else {n var geometryPromise;nn if (primitive.extensions && primitive.extensions) {n // Use DRACO geometry if availablen geometryPromise = createDracoPrimitive(primitive);n } else {n // Otherwise create a new geometryn geometryPromise = addPrimitiveAttributes(new BufferGeometry(), primitive, parser);n } // Cache this geometrynnn cache = {n primitive: primitive,n promise: geometryPromisen };n pending.push(geometryPromise);n }n }nn return Promise.all(pending);n };n /**n * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshesn * @param {number} meshIndexn * @return {Promise<Group|Mesh|SkinnedMesh>}n */nnn GLTFParser.prototype.loadMesh = function (meshIndex) {n var parser = this;n var json = this.json;n var meshDef = json.meshes;n var primitives = meshDef.primitives;n var pending = [];nn for (var i = 0, il = primitives.length; i < il; i++) {n var material = primitives.material === undefined ? createDefaultMaterial() : this.getDependency('material', primitives.material);n pending.push(material);n }nn return Promise.all(pending).then(function (originalMaterials) {n return parser.loadGeometries(primitives).then(function (geometries) {n var meshes = [];nn for (var i = 0, il = geometries.length; i < il; i++) {n var geometry = geometries;n var primitive = primitives; // 1. create Meshnn var mesh;n var material = originalMaterials;nn if (primitive.mode === WEBGL_CONSTANTS.TRIANGLES || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP || primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN || primitive.mode === undefined) {n // .isSkinnedMesh isn't in glTF spec. See .markDefs()n mesh = meshDef.isSkinnedMesh === true ? new SkinnedMesh(geometry, material) : new Mesh(geometry, material);nn if (mesh.isSkinnedMesh === true && !mesh.geometry.attributes.skinWeight.normalized) {n // we normalize floating point skin weight array to fix malformed assets (see #15319)n // it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputsn mesh.normalizeSkinWeights();n }nn if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP) {n mesh.drawMode = TriangleStripDrawMode;n } else if (primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN) {n mesh.drawMode = TriangleFanDrawMode;n }n } else if (primitive.mode === WEBGL_CONSTANTS.LINES) {n mesh = new LineSegments(geometry, material);n } else if (primitive.mode === WEBGL_CONSTANTS.LINE_STRIP) {n mesh = new Line(geometry, material);n } else if (primitive.mode === WEBGL_CONSTANTS.LINE_LOOP) {n mesh = new LineLoop(geometry, material);n } else if (primitive.mode === WEBGL_CONSTANTS.POINTS) {n mesh = new Points(geometry, material);n } else {n throw new Error('THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode);n }nn if (Object.keys(mesh.geometry.morphAttributes).length > 0) {n updateMorphTargets(mesh, meshDef);n }nn mesh.name = meshDef.name || 'mesh_' + meshIndex;n if (geometries.length > 1) mesh.name += '_' + i;n assignExtrasToUserData(mesh, meshDef);n parser.assignFinalMaterial(mesh);n meshes.push(mesh);n }nn if (meshes.length === 1) {n return meshes;n }nn var group = new Group();nn for (var i = 0, il = meshes.length; i < il; i++) {n group.add(meshes);n }nn return group;n });n });n };n /**n * Specification: github.com/KhronosGroup/glTF/tree/master/specification/2.0#camerasn * @param {number} cameraIndexn * @return {Promise<THREE.Camera>}n */nnn GLTFParser.prototype.loadCamera = function (cameraIndex) {n var camera;n var cameraDef = this.json.cameras;n var params = cameraDef;nn if (!params) {n console.warn('THREE.GLTFLoader: Missing camera parameters.');n return;n }nn if (cameraDef.type === 'perspective') {n camera = new PerspectiveCamera(_Math.radToDeg(params.yfov), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6);n } else if (cameraDef.type === 'orthographic') {n camera = new OrthographicCamera(params.xmag / -2, params.xmag / 2, params.ymag / 2, params.ymag / -2, params.znear, params.zfar);n }nn if (cameraDef.name !== undefined) camera.name = cameraDef.name;n assignExtrasToUserData(camera, cameraDef);n return Promise.resolve(camera);n };n /**n * Specification: github.com/KhronosGroup/glTF/tree/master/specification/2.0#skinsn * @param {number} skinIndexn * @return {Promise<Object>}n */nnn GLTFParser.prototype.loadSkin = function (skinIndex) {n var skinDef = this.json.skins;n var skinEntry = {n joints: skinDef.jointsn };nn if (skinDef.inverseBindMatrices === undefined) {n return Promise.resolve(skinEntry);n }nn return this.getDependency('accessor', skinDef.inverseBindMatrices).then(function (accessor) {n skinEntry.inverseBindMatrices = accessor;n return skinEntry;n });n };n /**n * Specification: github.com/KhronosGroup/glTF/tree/master/specification/2.0#animationsn * @param {number} animationIndexn * @return {Promise<AnimationClip>}n */nnn GLTFParser.prototype.loadAnimation = function (animationIndex) {n var json = this.json;n var animationDef = json.animations;n var pendingNodes = [];n var pendingInputAccessors = [];n var pendingOutputAccessors = [];n var pendingSamplers = [];n var pendingTargets = [];nn for (var i = 0, il = animationDef.channels.length; i < il; i++) {n var channel = animationDef.channels;n var sampler = animationDef.samplers;n var target = channel.target;n var name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated.nn var input = animationDef.parameters !== undefined ? animationDef.parameters : sampler.input;n var output = animationDef.parameters !== undefined ? animationDef.parameters : sampler.output;n pendingNodes.push(this.getDependency('node', name));n pendingInputAccessors.push(this.getDependency('accessor', input));n pendingOutputAccessors.push(this.getDependency('accessor', output));n pendingSamplers.push(sampler);n pendingTargets.push(target);n }nn return Promise.all([Promise.all(pendingNodes), Promise.all(pendingInputAccessors), Promise.all(pendingOutputAccessors), Promise.all(pendingSamplers), Promise.all(pendingTargets)]).then(function (dependencies) {n var nodes = dependencies;n var inputAccessors = dependencies;n var outputAccessors = dependencies;n var samplers = dependencies;n var targets = dependencies;n var tracks = [];nn for (var i = 0, il = nodes.length; i < il; i++) {n var node = nodes;n var inputAccessor = inputAccessors;n var outputAccessor = outputAccessors;n var sampler = samplers;n var target = targets;n if (node === undefined) continue;n node.updateMatrix();n node.matrixAutoUpdate = true;n var TypedKeyframeTrack;nn switch (PATH_PROPERTIES) {n case PATH_PROPERTIES.weights:n TypedKeyframeTrack = NumberKeyframeTrack;n break;nn case PATH_PROPERTIES.rotation:n TypedKeyframeTrack = QuaternionKeyframeTrack;n break;nn case PATH_PROPERTIES.position:n case PATH_PROPERTIES.scale:n default:n TypedKeyframeTrack = VectorKeyframeTrack;n break;n }nn var targetName = node.name ? node.name : node.uuid;n var interpolation = sampler.interpolation !== undefined ? INTERPOLATION : InterpolateLinear;n var targetNames = [];nn if (PATH_PROPERTIES === PATH_PROPERTIES.weights) {n // Node may be a Group (glTF mesh with several primitives) or a Mesh.n node.traverse(function (object) {n if (object.isMesh === true && object.morphTargetInfluences) {n targetNames.push(object.name ? object.name : object.uuid);n }n });n } else {n targetNames.push(targetName);n }nn var outputArray = outputAccessor.array;nn if (outputAccessor.normalized) {n var scale;nn if (outputArray.constructor === Int8Array) {n scale = 1 / 127;n } else if (outputArray.constructor === Uint8Array) {n scale = 1 / 255;n } else if (outputArray.constructor == Int16Array) {n scale = 1 / 32767;n } else if (outputArray.constructor === Uint16Array) {n scale = 1 / 65535;n } else {n throw new Error('THREE.GLTFLoader: Unsupported output accessor component type.');n }nn var scaled = new Float32Array(outputArray.length);nn for (var j = 0, jl = outputArray.length; j < jl; j++) {n scaled = outputArray * scale;n }nn outputArray = scaled;n }nn for (var j = 0, jl = targetNames.length; j < jl; j++) {n var track = new TypedKeyframeTrack(targetNames + '.' + PATH_PROPERTIES, inputAccessor.array, outputArray, interpolation); // Override interpolation with custom factory method.nn if (sampler.interpolation === 'CUBICSPLINE') {n track.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline(result) {n // A CUBICSPLINE keyframe in glTF has three output values for each input value,n // representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()n // must be divided by three to get the interpolant's sampleSize argument.n return new GLTFCubicSplineInterpolant(this.times, this.values, this.getValueSize() / 3, result);n }; // Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.nnn track.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;n }nn tracks.push(track);n }n }nn var name = animationDef.name !== undefined ? animationDef.name : 'animation_' + animationIndex;n return new AnimationClip(name, undefined, tracks);n });n };n /**n * Specification: github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchyn * @param {number} nodeIndexn * @return {Promise<Object3D>}n */nnn GLTFParser.prototype.loadNode = function (nodeIndex) {n var json = this.json;n var extensions = this.extensions;n var parser = this;n var meshReferences = json.meshReferences;n var meshUses = json.meshUses;n var nodeDef = json.nodes;n return function () {n var pending = [];nn if (nodeDef.mesh !== undefined) {n pending.push(parser.getDependency('mesh', nodeDef.mesh).then(function (mesh) {n var node;nn if (meshReferences > 1) {n var instanceNum = meshUses++;n node = mesh.clone();n node.name += 'instance' + instanceNum; // onBeforeRender copy for Specular-Glossinessnn node.onBeforeRender = mesh.onBeforeRender;nn for (var i = 0, il = node.children.length; i < il; i++) {n node.children.name += 'instance' + instanceNum;n node.children.onBeforeRender = mesh.children.onBeforeRender;n }n } else {n node = mesh;n } // if weights are provided on the node, override weights on the mesh.nnn if (nodeDef.weights !== undefined) {n node.traverse(function (o) {n if (!o.isMesh) return;nn for (var i = 0, il = nodeDef.weights.length; i < il; i++) {n o.morphTargetInfluences = nodeDef.weights;n }n });n }nn return node;n }));n }nn if (nodeDef.camera !== undefined) {n pending.push(parser.getDependency('camera', nodeDef.camera));n }nn if (nodeDef.extensions && nodeDef.extensions && nodeDef.extensions.light !== undefined) {n pending.push(parser.getDependency('light', nodeDef.extensions.light));n }nn return Promise.all(pending);n }().then(function (objects) {n var node; // .isBone isn't in glTF spec. See .markDefsnn if (nodeDef.isBone === true) {n node = new Bone();n } else if (objects.length > 1) {n node = new Group();n } else if (objects.length === 1) {n node = objects;n } else {n node = new Object3D();n }nn if (node !== objects) {n for (var i = 0, il = objects.length; i < il; i++) {n node.add(objects);n }n }nn if (nodeDef.name !== undefined) {n node.userData.name = nodeDef.name;n node.name = PropertyBinding.sanitizeNodeName(nodeDef.name);n }nn assignExtrasToUserData(node, nodeDef);n if (nodeDef.extensions) addUnknownExtensionsToUserData(extensions, node, nodeDef);nn if (nodeDef.matrix !== undefined) {n var matrix = new Matrix4();n matrix.fromArray(nodeDef.matrix);n node.applyMatrix(matrix);n } else {n if (nodeDef.translation !== undefined) {n node.position.fromArray(nodeDef.translation);n }nn if (nodeDef.rotation !== undefined) {n node.quaternion.fromArray(nodeDef.rotation);n }nn if (nodeDef.scale !== undefined) {n node.scale.fromArray(nodeDef.scale);n }n }nn return node;n });n };n /**n * Specification: github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenesn * @param {number} sceneIndexn * @return {Promise<Scene>}n */nnn GLTFParser.prototype.loadScene = function () {n // scene node hierachy buildern function buildNodeHierachy(nodeId, parentObject, json, parser) {n var nodeDef = json.nodes;n return parser.getDependency('node', nodeId).then(function (node) {n if (nodeDef.skin === undefined) return node; // build skeleton here as wellnn var skinEntry;n return parser.getDependency('skin', nodeDef.skin).then(function (skin) {n skinEntry = skin;n var pendingJoints = [];nn for (var i = 0, il = skinEntry.joints.length; i < il; i++) {n pendingJoints.push(parser.getDependency('node', skinEntry.joints));n }nn return Promise.all(pendingJoints);n }).then(function (jointNodes) {n node.traverse(function (mesh) {n if (!mesh.isMesh) return;n var bones = [];n var boneInverses = [];nn for (var j = 0, jl = jointNodes.length; j < jl; j++) {n var jointNode = jointNodes;nn if (jointNode) {n bones.push(jointNode);n var mat = new Matrix4();nn if (skinEntry.inverseBindMatrices !== undefined) {n mat.fromArray(skinEntry.inverseBindMatrices.array, j * 16);n }nn boneInverses.push(mat);n } else {n console.warn('THREE.GLTFLoader: Joint "%s" could not be found.', skinEntry.joints);n }n }nn mesh.bind(new Skeleton(bones, boneInverses), mesh.matrixWorld);n });n return node;n });n }).then(function (node) {n // build node hierachyn parentObject.add(node);n var pending = [];nn if (nodeDef.children) {n var children = nodeDef.children;nn for (var i = 0, il = children.length; i < il; i++) {n var child = children;n pending.push(buildNodeHierachy(child, node, json, parser));n }n }nn return Promise.all(pending);n });n }nn return function loadScene(sceneIndex) {n var json = this.json;n var extensions = this.extensions;n var sceneDef = this.json.scenes;n var parser = this;n var scene = new Scene();n if (sceneDef.name !== undefined) scene.name = sceneDef.name;n assignExtrasToUserData(scene, sceneDef);n if (sceneDef.extensions) addUnknownExtensionsToUserData(extensions, scene, sceneDef);n var nodeIds = sceneDef.nodes || [];n var pending = [];nn for (var i = 0, il = nodeIds.length; i < il; i++) {n pending.push(buildNodeHierachy(nodeIds, scene, json, parser));n }nn return Promise.all(pending).then(function () {n return scene;n });n };n }();nn return GLTFLoader;n}();nnexport { GLTFLoader };”,“map”:{“version”:3,“sources”:[“/Users/lemonandroid/Banal Dropbox/random/redux-os/app/javascript/packs/gltf/jsm/loaders/GLTFLoader.js”],“names”:,“mappings”:“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”,“sourcesContent”:[“/**n * @author Rich Tibbett / github.com/richtrn * @author mrdoob / mrdoob.com/n * @author Tony Parisi / www.tonyparisi.com/n * @author Takahiro / github.com/takahiroxn * @author Don McCurdy / www.donmccurdy.comn */nnimport {ntAnimationClip,ntBone,ntBufferAttribute,ntBufferGeometry,ntClampToEdgeWrapping,ntColor,ntDirectionalLight,ntDoubleSide,ntFileLoader,ntFrontSide,ntGroup,ntInterleavedBuffer,ntInterleavedBufferAttribute,ntInterpolant,ntInterpolateDiscrete,ntInterpolateLinear,ntLine,ntLineBasicMaterial,ntLineLoop,ntLineSegments,ntLinearFilter,ntLinearMipmapLinearFilter,ntLinearMipmapNearestFilter,ntLoader,ntLoaderUtils,ntMaterial,ntMath as _Math,ntMatrix4,ntMesh,ntMeshBasicMaterial,ntMeshStandardMaterial,ntMirroredRepeatWrapping,ntNearestFilter,ntNearestMipmapLinearFilter,ntNearestMipmapNearestFilter,ntNumberKeyframeTrack,ntObject3D,ntOrthographicCamera,ntPerspectiveCamera,ntPointLight,ntPoints,ntPointsMaterial,ntPropertyBinding,ntQuaternionKeyframeTrack,ntRGBAFormat,ntRGBFormat,ntRepeatWrapping,ntScene,ntShaderLib,ntShaderMaterial,ntSkeleton,ntSkinnedMesh,ntSpotLight,ntTextureLoader,ntTriangleFanDrawMode,ntTriangleStripDrawMode,ntUniformsUtils,ntVector2,ntVectorKeyframeTrack,ntVertexColors,ntsRGBEncodingn} from "three";nnvar GLTFLoader = ( function () {nntfunction GLTFLoader( manager ) {nnttLoader.call( this, manager );nnttthis.dracoLoader = null;nttthis.ddsLoader = null;nnt}nntGLTFLoader.prototype = Object.assign( Object.create( Loader.prototype ), {nnttconstructor: GLTFLoader,nnttload: function ( url, onLoad, onProgress, onError ) {nntttvar scope = this;nntttvar resourcePath;nntttif ( this.resourcePath !== '' ) {nnttttresourcePath = this.resourcePath;nnttt} else if ( this.path !== '' ) {nnttttresourcePath = this.path;nnttt} else {nnttttresourcePath = LoaderUtils.extractUrlBase( url );nnttt}nnttt// Tells the LoadingManager to track an extra item, which resolves afternttt// the model is fully loaded. This means the count of items loaded willnttt// be incorrect, but ensures manager.onLoad() does not fire early.ntttscope.manager.itemStart( url );nntttvar _onError = function ( e ) {nnttttif ( onError ) {nntttttonError( e );nntttt} else {nntttttconsole.error( e );nntttt}nnttttscope.manager.itemError( url );nttttscope.manager.itemEnd( url );nnttt};nntttvar loader = new FileLoader( scope.manager );nntttloader.setPath( this.path );ntttloader.setResponseType( 'arraybuffer' );nntttif ( scope.crossOrigin === 'use-credentials' ) {nnttttloader.setWithCredentials( true );nnttt}nntttloader.load( url, function ( data ) {nntttttry {nntttttscope.parse( data, resourcePath, function ( gltf ) {nnttttttonLoad( gltf );nnttttttscope.manager.itemEnd( url );nnttttt}, _onError );nntttt} catch ( e ) {nnttttt_onError( e );nntttt}nnttt}, onProgress, _onError );nntt},nnttsetDRACOLoader: function ( dracoLoader ) {nntttthis.dracoLoader = dracoLoader;ntttreturn this;nntt},nnttsetDDSLoader: function ( ddsLoader ) {nntttthis.ddsLoader = ddsLoader;ntttreturn this;nntt},nnttparse: function ( data, path, onLoad, onError ) {nntttvar content;ntttvar extensions = {};nntttif ( typeof data === 'string' ) {nnttttcontent = data;nnttt} else {nnttttvar magic = LoaderUtils.decodeText( new Uint8Array( data, 0, 4 ) );nnttttif ( magic === BINARY_EXTENSION_HEADER_MAGIC ) {nnttttttry {nnttttttextensions[ EXTENSIONS.KHR_BINARY_GLTF ] = new GLTFBinaryExtension( data );nnttttt} catch ( error ) {nnttttttif ( onError ) onError( error );nttttttreturn;nnttttt}nntttttcontent = extensions[ EXTENSIONS.KHR_BINARY_GLTF ].content;nntttt} else {nntttttcontent = LoaderUtils.decodeText( new Uint8Array( data ) );nntttt}nnttt}nntttvar json = JSON.parse( content );nntttif ( json.asset === undefined || json.asset.version[ 0 ] < 2 ) {nnttttif ( onError ) onError( new Error( 'THREE.GLTFLoader: Unsupported asset. glTF versions >=2.0 are supported. Use LegacyGLTFLoader instead.' ) );nttttreturn;nnttt}nntttif ( json.extensionsUsed ) {nnttttfor ( var i = 0; i < json.extensionsUsed.length; ++ i ) {nntttttvar extensionName = json.extensionsUsed[ i ];ntttttvar extensionsRequired = json.extensionsRequired || [];nntttttswitch ( extensionName ) {nnttttttcase EXTENSIONS.KHR_LIGHTS_PUNCTUAL:ntttttttextensions[ extensionName ] = new GLTFLightsExtension( json );ntttttttbreak;nnttttttcase EXTENSIONS.KHR_MATERIALS_UNLIT:ntttttttextensions[ extensionName ] = new GLTFMaterialsUnlitExtension();ntttttttbreak;nnttttttcase EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS:ntttttttextensions[ extensionName ] = new GLTFMaterialsPbrSpecularGlossinessExtension();ntttttttbreak;nnttttttcase EXTENSIONS.KHR_DRACO_MESH_COMPRESSION:ntttttttextensions[ extensionName ] = new GLTFDracoMeshCompressionExtension( json, this.dracoLoader );ntttttttbreak;nnttttttcase EXTENSIONS.MSFT_TEXTURE_DDS:ntttttttextensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] = new GLTFTextureDDSExtension( this.ddsLoader );ntttttttbreak;nnttttttcase EXTENSIONS.KHR_TEXTURE_TRANSFORM:ntttttttextensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] = new GLTFTextureTransformExtension();ntttttttbreak;nnttttttdefault:nntttttttif ( extensionsRequired.indexOf( extensionName ) >= 0 ) {nnttttttttconsole.warn( 'THREE.GLTFLoader: Unknown extension "' + extensionName + '".' );nnttttttt}nnttttt}nntttt}nnttt}nntttvar parser = new GLTFParser( json, extensions, {nnttttpath: path || this.resourcePath || '',nttttcrossOrigin: this.crossOrigin,nttttmanager: this.managernnttt} );nntttparser.parse( onLoad, onError );nntt}nnt} );nnt/* GLTFREGISTRY */nntfunction GLTFRegistry() {nnttvar objects = {};nnttreturnt{nntttget: function ( key ) {nnttttreturn objects[ key ];nnttt},nntttadd: function ( key, object ) {nnttttobjects[ key ] = object;nnttt},nntttremove: function ( key ) {nnttttdelete objects[ key ];nnttt},nntttremoveAll: function () {nnttttobjects = {};nnttt}nntt};nnt}nnt/*********************************/nt/********** EXTENSIONS ***********/nt/*********************************/nntvar EXTENSIONS = {nttKHR_BINARY_GLTF: 'KHR_binary_glTF',nttKHR_DRACO_MESH_COMPRESSION: 'KHR_draco_mesh_compression',nttKHR_LIGHTS_PUNCTUAL: 'KHR_lights_punctual',nttKHR_MATERIALS_PBR_SPECULAR_GLOSSINESS: 'KHR_materials_pbrSpecularGlossiness',nttKHR_MATERIALS_UNLIT: 'KHR_materials_unlit',nttKHR_TEXTURE_TRANSFORM: 'KHR_texture_transform',nttMSFT_TEXTURE_DDS: 'MSFT_texture_dds'nt};nnt/**nt * DDS Texture Extensionnt *nt * Specification: github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Vendor/MSFT_texture_ddsnt *nt */ntfunction GLTFTextureDDSExtension( ddsLoader ) {nnttif ( ! ddsLoader ) {nntttthrow new Error( 'THREE.GLTFLoader: Attempting to load .dds texture without importing DDSLoader' );nntt}nnttthis.name = EXTENSIONS.MSFT_TEXTURE_DDS;nttthis.ddsLoader = ddsLoader;nnt}nnt/**nt * Punctual Lights Extensionnt *nt * Specification: github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_lights_punctualnt */ntfunction GLTFLightsExtension( json ) {nnttthis.name = EXTENSIONS.KHR_LIGHTS_PUNCTUAL;nnttvar extension = ( json.extensions && json.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ] ) || {};nttthis.lightDefs = extension.lights || [];nnt}nntGLTFLightsExtension.prototype.loadLight = function ( lightIndex ) {nnttvar lightDef = this.lightDefs[ lightIndex ];nttvar lightNode;nnttvar color = new Color( 0xffffff );nttif ( lightDef.color !== undefined ) color.fromArray( lightDef.color );nnttvar range = lightDef.range !== undefined ? lightDef.range : 0;nnttswitch ( lightDef.type ) {nntttcase 'directional':nttttlightNode = new DirectionalLight( color );nttttlightNode.target.position.set( 0, 0, - 1 );nttttlightNode.add( lightNode.target );nttttbreak;nntttcase 'point':nttttlightNode = new PointLight( color );nttttlightNode.distance = range;nttttbreak;nntttcase 'spot':nttttlightNode = new SpotLight( color );nttttlightNode.distance = range;ntttt// Handle spotlight properties.nttttlightDef.spot = lightDef.spot || {};nttttlightDef.spot.innerConeAngle = lightDef.spot.innerConeAngle !== undefined ? lightDef.spot.innerConeAngle : 0;nttttlightDef.spot.outerConeAngle = lightDef.spot.outerConeAngle !== undefined ? lightDef.spot.outerConeAngle : Math.PI / 4.0;nttttlightNode.angle = lightDef.spot.outerConeAngle;nttttlightNode.penumbra = 1.0 - lightDef.spot.innerConeAngle / lightDef.spot.outerConeAngle;nttttlightNode.target.position.set( 0, 0, - 1 );nttttlightNode.add( lightNode.target );nttttbreak;nntttdefault:nttttthrow new Error( 'THREE.GLTFLoader: Unexpected light type, "' + lightDef.type + '".' );nntt}nntt// Some lights (e.g. spot) default to a position other than the origin. Reset the positionntt// here, because node-level parsing will only override position if explicitly specified.nttlightNode.position.set( 0, 0, 0 );nnttlightNode.decay = 2;nnttif ( lightDef.intensity !== undefined ) lightNode.intensity = lightDef.intensity;nnttlightNode.name = lightDef.name || ( 'light_' + lightIndex );nnttreturn Promise.resolve( lightNode );nnt};nnt/**nt * Unlit Materials Extensionnt *nt * Specification: github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_unlitnt */ntfunction GLTFMaterialsUnlitExtension() {nnttthis.name = EXTENSIONS.KHR_MATERIALS_UNLIT;nnt}nntGLTFMaterialsUnlitExtension.prototype.getMaterialType = function () {nnttreturn MeshBasicMaterial;nnt};nntGLTFMaterialsUnlitExtension.prototype.extendParams = function ( materialParams, materialDef, parser ) {nnttvar pending = [];nnttmaterialParams.color = new Color( 1.0, 1.0, 1.0 );nttmaterialParams.opacity = 1.0;nnttvar metallicRoughness = materialDef.pbrMetallicRoughness;nnttif ( metallicRoughness ) {nntttif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {nnttttvar array = metallicRoughness.baseColorFactor;nnttttmaterialParams.color.fromArray( array );nttttmaterialParams.opacity = array[ 3 ];nnttt}nntttif ( metallicRoughness.baseColorTexture !== undefined ) {nnttttpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) );nnttt}nntt}nnttreturn Promise.all( pending );nnt};nnt/* BINARY EXTENSION */ntvar BINARY_EXTENSION_HEADER_MAGIC = 'glTF';ntvar BINARY_EXTENSION_HEADER_LENGTH = 12;ntvar BINARY_EXTENSION_CHUNK_TYPES = { JSON: 0x4E4F534A, BIN: 0x004E4942 };nntfunction GLTFBinaryExtension( data ) {nnttthis.name = EXTENSIONS.KHR_BINARY_GLTF;nttthis.content = null;nttthis.body = null;nnttvar headerView = new DataView( data, 0, BINARY_EXTENSION_HEADER_LENGTH );nnttthis.header = {ntttmagic: LoaderUtils.decodeText( new Uint8Array( data.slice( 0, 4 ) ) ),ntttversion: headerView.getUint32( 4, true ),ntttlength: headerView.getUint32( 8, true )ntt};nnttif ( this.header.magic !== BINARY_EXTENSION_HEADER_MAGIC ) {nntttthrow new Error( 'THREE.GLTFLoader: Unsupported glTF-Binary header.' );nntt} else if ( this.header.version < 2.0 ) {nntttthrow new Error( 'THREE.GLTFLoader: Legacy binary file detected. Use LegacyGLTFLoader instead.' );nntt}nnttvar chunkView = new DataView( data, BINARY_EXTENSION_HEADER_LENGTH );nttvar chunkIndex = 0;nnttwhile ( chunkIndex < chunkView.byteLength ) {nntttvar chunkLength = chunkView.getUint32( chunkIndex, true );ntttchunkIndex += 4;nntttvar chunkType = chunkView.getUint32( chunkIndex, true );ntttchunkIndex += 4;nntttif ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.JSON ) {nnttttvar contentArray = new Uint8Array( data, BINARY_EXTENSION_HEADER_LENGTH + chunkIndex, chunkLength );nttttthis.content = LoaderUtils.decodeText( contentArray );nnttt} else if ( chunkType === BINARY_EXTENSION_CHUNK_TYPES.BIN ) {nnttttvar byteOffset = BINARY_EXTENSION_HEADER_LENGTH + chunkIndex;nttttthis.body = data.slice( byteOffset, byteOffset + chunkLength );nnttt}nnttt// Clients must ignore chunks with unknown types.nntttchunkIndex += chunkLength;nntt}nnttif ( this.content === null ) {nntttthrow new Error( 'THREE.GLTFLoader: JSON content not found.' );nntt}nnt}nnt/**nt * DRACO Mesh Compression Extensionnt *nt * Specification: github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_draco_mesh_compressionnt */ntfunction GLTFDracoMeshCompressionExtension( json, dracoLoader ) {nnttif ( ! dracoLoader ) {nntttthrow new Error( 'THREE.GLTFLoader: No DRACOLoader instance provided.' );nntt}nnttthis.name = EXTENSIONS.KHR_DRACO_MESH_COMPRESSION;nttthis.json = json;nttthis.dracoLoader = dracoLoader;nnt}nntGLTFDracoMeshCompressionExtension.prototype.decodePrimitive = function ( primitive, parser ) {nnttvar json = this.json;nttvar dracoLoader = this.dracoLoader;nttvar bufferViewIndex = primitive.extensions[ this.name ].bufferView;nttvar gltfAttributeMap = primitive.extensions[ this.name ].attributes;nttvar threeAttributeMap = {};nttvar attributeNormalizedMap = {};nttvar attributeTypeMap = {};nnttfor ( var attributeName in gltfAttributeMap ) {nntttvar threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();nntttthreeAttributeMap[ threeAttributeName ] = gltfAttributeMap[ attributeName ];nntt}nnttfor ( attributeName in primitive.attributes ) {nntttvar threeAttributeName = ATTRIBUTES[ attributeName ] || attributeName.toLowerCase();nntttif ( gltfAttributeMap[ attributeName ] !== undefined ) {nnttttvar accessorDef = json.accessors[ primitive.attributes[ attributeName ] ];nttttvar componentType = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];nnttttattributeTypeMap[ threeAttributeName ] = componentType;nttttattributeNormalizedMap[ threeAttributeName ] = accessorDef.normalized === true;nnttt}nntt}nnttreturn parser.getDependency( 'bufferView', bufferViewIndex ).then( function ( bufferView ) {nntttreturn new Promise( function ( resolve ) {nnttttdracoLoader.decodeDracoFile( bufferView, function ( geometry ) {nntttttfor ( var attributeName in geometry.attributes ) {nnttttttvar attribute = geometry.attributes[ attributeName ];nttttttvar normalized = attributeNormalizedMap[ attributeName ];nnttttttif ( normalized !== undefined ) attribute.normalized = normalized;nnttttt}nntttttresolve( geometry );nntttt}, threeAttributeMap, attributeTypeMap );nnttt} );nntt} );nnt};nnt/**nt * Texture Transform Extensionnt *nt * Specification: github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_texture_transformnt */ntfunction GLTFTextureTransformExtension() {nnttthis.name = EXTENSIONS.KHR_TEXTURE_TRANSFORM;nnt}nntGLTFTextureTransformExtension.prototype.extendTexture = function ( texture, transform ) {nntttexture = texture.clone();nnttif ( transform.offset !== undefined ) {nnttttexture.offset.fromArray( transform.offset );nntt}nnttif ( transform.rotation !== undefined ) {nnttttexture.rotation = transform.rotation;nntt}nnttif ( transform.scale !== undefined ) {nnttttexture.repeat.fromArray( transform.scale );nntt}nnttif ( transform.texCoord !== undefined ) {nntttconsole.warn( 'THREE.GLTFLoader: Custom UV sets in "' + this.name + '" extension not yet supported.' );nntt}nntttexture.needsUpdate = true;nnttreturn texture;nnt};nnt/**nt * Specular-Glossiness Extensionnt *nt * Specification: github.com/KhronosGroup/glTF/tree/master/extensions/2.0/Khronos/KHR_materials_pbrSpecularGlossinessnt */ntfunction GLTFMaterialsPbrSpecularGlossinessExtension() {nnttreturn {nntttname: EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS,nntttspecularGlossinessParams: [ntttt'color',ntttt'map',ntttt'lightMap',ntttt'lightMapIntensity',ntttt'aoMap',ntttt'aoMapIntensity',ntttt'emissive',ntttt'emissiveIntensity',ntttt'emissiveMap',ntttt'bumpMap',ntttt'bumpScale',ntttt'normalMap',ntttt'displacementMap',ntttt'displacementScale',ntttt'displacementBias',ntttt'specularMap',ntttt'specular',ntttt'glossinessMap',ntttt'glossiness',ntttt'alphaMap',ntttt'envMap',ntttt'envMapIntensity',ntttt'refractionRatio',nttt],nntttgetMaterialType: function () {nnttttreturn ShaderMaterial;nnttt},nntttextendParams: function ( materialParams, materialDef, parser ) {nnttttvar pbrSpecularGlossiness = materialDef.extensions[ this.name ];nnttttvar shader = ShaderLib[ 'standard' ];nnttttvar uniforms = UniformsUtils.clone( shader.uniforms );nnttttvar specularMapParsFragmentChunk = [nttttt'#ifdef USE_SPECULARMAP',nttttt'tuniform sampler2D specularMap;',nttttt'#endif'ntttt].join( '\n' );nnttttvar glossinessMapParsFragmentChunk = [nttttt'#ifdef USE_GLOSSINESSMAP',nttttt'tuniform sampler2D glossinessMap;',nttttt'#endif'ntttt].join( '\n' );nnttttvar specularMapFragmentChunk = [nttttt'vec3 specularFactor = specular;',nttttt'#ifdef USE_SPECULARMAP',nttttt'tvec4 texelSpecular = texture2D( specularMap, vUv );',nttttt'ttexelSpecular = sRGBToLinear( texelSpecular );',nttttt't// reads channel RGB, compatible with a glTF Specular-Glossiness (RGBA) texture',nttttt'tspecularFactor *= texelSpecular.rgb;',nttttt'#endif'ntttt].join( '\n' );nnttttvar glossinessMapFragmentChunk = [nttttt'float glossinessFactor = glossiness;',nttttt'#ifdef USE_GLOSSINESSMAP',nttttt'tvec4 texelGlossiness = texture2D( glossinessMap, vUv );',nttttt't// reads channel A, compatible with a glTF Specular-Glossiness (RGBA) texture',nttttt'tglossinessFactor *= texelGlossiness.a;',nttttt'#endif'ntttt].join( '\n' );nnttttvar lightPhysicalFragmentChunk = [nttttt'PhysicalMaterial material;',nttttt'material.diffuseColor = diffuseColor.rgb;',nttttt'material.specularRoughness = clamp( 1.0 - glossinessFactor, 0.04, 1.0 );',nttttt'material.specularColor = specularFactor.rgb;',ntttt].join( '\n' );nnttttvar fragmentShader = shader.fragmentShadernttttt.replace( 'uniform float roughness;', 'uniform vec3 specular;' )nttttt.replace( 'uniform float metalness;', 'uniform float glossiness;' )nttttt.replace( '#include <roughnessmap_pars_fragment>', specularMapParsFragmentChunk )nttttt.replace( '#include <metalnessmap_pars_fragment>', glossinessMapParsFragmentChunk )nttttt.replace( '#include <roughnessmap_fragment>', specularMapFragmentChunk )nttttt.replace( '#include <metalnessmap_fragment>', glossinessMapFragmentChunk )nttttt.replace( '#include <lights_physical_fragment>', lightPhysicalFragmentChunk );nnttttdelete uniforms.roughness;nttttdelete uniforms.metalness;nttttdelete uniforms.roughnessMap;nttttdelete uniforms.metalnessMap;nnttttuniforms.specular = { value: new Color().setHex( 0x111111 ) };nttttuniforms.glossiness = { value: 0.5 };nttttuniforms.specularMap = { value: null };nttttuniforms.glossinessMap = { value: null };nnttttmaterialParams.vertexShader = shader.vertexShader;nttttmaterialParams.fragmentShader = fragmentShader;nttttmaterialParams.uniforms = uniforms;nttttmaterialParams.defines = { 'STANDARD': '' };nnttttmaterialParams.color = new Color( 1.0, 1.0, 1.0 );nttttmaterialParams.opacity = 1.0;nnttttvar pending = [];nnttttif ( Array.isArray( pbrSpecularGlossiness.diffuseFactor ) ) {nntttttvar array = pbrSpecularGlossiness.diffuseFactor;nntttttmaterialParams.color.fromArray( array );ntttttmaterialParams.opacity = array[ 3 ];nntttt}nnttttif ( pbrSpecularGlossiness.diffuseTexture !== undefined ) {nntttttpending.push( parser.assignTexture( materialParams, 'map', pbrSpecularGlossiness.diffuseTexture ) );nntttt}nnttttmaterialParams.emissive = new Color( 0.0, 0.0, 0.0 );nttttmaterialParams.glossiness = pbrSpecularGlossiness.glossinessFactor !== undefined ? pbrSpecularGlossiness.glossinessFactor : 1.0;nttttmaterialParams.specular = new Color( 1.0, 1.0, 1.0 );nnttttif ( Array.isArray( pbrSpecularGlossiness.specularFactor ) ) {nntttttmaterialParams.specular.fromArray( pbrSpecularGlossiness.specularFactor );nntttt}nnttttif ( pbrSpecularGlossiness.specularGlossinessTexture !== undefined ) {nntttttvar specGlossMapDef = pbrSpecularGlossiness.specularGlossinessTexture;ntttttpending.push( parser.assignTexture( materialParams, 'glossinessMap', specGlossMapDef ) );ntttttpending.push( parser.assignTexture( materialParams, 'specularMap', specGlossMapDef ) );nntttt}nnttttreturn Promise.all( pending );nnttt},nntttcreateMaterial: function ( params ) {nntttt// setup material properties based on MeshStandardMaterial for Specular-Glossinessnnttttvar material = new ShaderMaterial( {ntttttdefines: params.defines,ntttttvertexShader: params.vertexShader,ntttttfragmentShader: params.fragmentShader,ntttttuniforms: params.uniforms,ntttttfog: true,ntttttlights: true,ntttttopacity: params.opacity,nttttttransparent: params.transparentntttt} );nnttttmaterial.isGLTFSpecularGlossinessMaterial = true;nnttttmaterial.color = params.color;nnttttmaterial.map = params.map === undefined ? null : params.map;nnttttmaterial.lightMap = null;nttttmaterial.lightMapIntensity = 1.0;nnttttmaterial.aoMap = params.aoMap === undefined ? null : params.aoMap;nttttmaterial.aoMapIntensity = 1.0;nnttttmaterial.emissive = params.emissive;nttttmaterial.emissiveIntensity = 1.0;nttttmaterial.emissiveMap = params.emissiveMap === undefined ? null : params.emissiveMap;nnttttmaterial.bumpMap = params.bumpMap === undefined ? null : params.bumpMap;nttttmaterial.bumpScale = 1;nnttttmaterial.normalMap = params.normalMap === undefined ? null : params.normalMap;nnttttif ( params.normalScale ) material.normalScale = params.normalScale;nnttttmaterial.displacementMap = null;nttttmaterial.displacementScale = 1;nttttmaterial.displacementBias = 0;nnttttmaterial.specularMap = params.specularMap === undefined ? null : params.specularMap;nttttmaterial.specular = params.specular;nnttttmaterial.glossinessMap = params.glossinessMap === undefined ? null : params.glossinessMap;nttttmaterial.glossiness = params.glossiness;nnttttmaterial.alphaMap = null;nnttttmaterial.envMap = params.envMap === undefined ? null : params.envMap;nttttmaterial.envMapIntensity = 1.0;nnttttmaterial.refractionRatio = 0.98;nnttttmaterial.extensions.derivatives = true;nnttttreturn material;nnttt},nnttt/**nttt * Clones a GLTFSpecularGlossinessMaterial instance. The ShaderMaterial.copy() method cannttt * copy only properties it knows about or inherits, and misses many properties that wouldnttt * normally be defined by MeshStandardMaterial.nttt *nttt * This method allows GLTFSpecularGlossinessMaterials to be cloned in the process ofnttt * loading a glTF model, but cloning later (e.g. by the user) would require these changesnttt * AND also updating `.onBeforeRender` on the parent mesh.nttt *nttt * @param {ShaderMaterial} sourcenttt * @return {ShaderMaterial}nttt */ntttcloneMaterial: function ( source ) {nnttttvar target = source.clone();nntttttarget.isGLTFSpecularGlossinessMaterial = true;nnttttvar params = this.specularGlossinessParams;nnttttfor ( var i = 0, il = params.length; i < il; i ++ ) {nntttttvar value = source[ params[ i ] ];nttttttarget[ params[ i ] ] = ( value && value.isColor ) ? value.clone() : value;nntttt}nnttttreturn target;nnttt},nnttt// Here's based on refreshUniformsCommon() and refreshUniformsStandard() in WebGLRenderer.ntttrefreshUniforms: function ( renderer, scene, camera, geometry, material ) {nnttttif ( material.isGLTFSpecularGlossinessMaterial !== true ) {nntttttreturn;nntttt}nnttttvar uniforms = material.uniforms;nttttvar defines = material.defines;nnttttuniforms.opacity.value = material.opacity;nnttttuniforms.diffuse.value.copy( material.color );nttttuniforms.emissive.value.copy( material.emissive ).multiplyScalar( material.emissiveIntensity );nnttttuniforms.map.value = material.map;nttttuniforms.specularMap.value = material.specularMap;nttttuniforms.alphaMap.value = material.alphaMap;nnttttuniforms.lightMap.value = material.lightMap;nttttuniforms.lightMapIntensity.value = material.lightMapIntensity;nnttttuniforms.aoMap.value = material.aoMap;nttttuniforms.aoMapIntensity.value = material.aoMapIntensity;nntttt// uv repeat and offset setting prioritiesntttt// 1. color mapntttt// 2. specular mapntttt// 3. normal mapntttt// 4. bump mapntttt// 5. alpha mapntttt// 6. emissive mapnnttttvar uvScaleMap;nnttttif ( material.map ) {nntttttuvScaleMap = material.map;nntttt} else if ( material.specularMap ) {nntttttuvScaleMap = material.specularMap;nntttt} else if ( material.displacementMap ) {nntttttuvScaleMap = material.displacementMap;nntttt} else if ( material.normalMap ) {nntttttuvScaleMap = material.normalMap;nntttt} else if ( material.bumpMap ) {nntttttuvScaleMap = material.bumpMap;nntttt} else if ( material.glossinessMap ) {nntttttuvScaleMap = material.glossinessMap;nntttt} else if ( material.alphaMap ) {nntttttuvScaleMap = material.alphaMap;nntttt} else if ( material.emissiveMap ) {nntttttuvScaleMap = material.emissiveMap;nntttt}nnttttif ( uvScaleMap !== undefined ) {nnttttt// backwards compatibilityntttttif ( uvScaleMap.isWebGLRenderTarget ) {nnttttttuvScaleMap = uvScaleMap.texture;nnttttt}nntttttif ( uvScaleMap.matrixAutoUpdate === true ) {nnttttttuvScaleMap.updateMatrix();nnttttt}nntttttuniforms.uvTransform.value.copy( uvScaleMap.matrix );nntttt}nnttttif ( material.envMap ) {nntttttuniforms.envMap.value = material.envMap;ntttttuniforms.envMapIntensity.value = material.envMapIntensity;nnttttt// don't flip CubeTexture envMaps, flip everything else:nttttt// WebGLRenderTargetCube will be flipped for backwards compatibilitynttttt// WebGLRenderTargetCube.texture will be flipped because it's a Texture and NOT a CubeTexturenttttt// this check must be handled differently, or removed entirely, if WebGLRenderTargetCube uses a CubeTexture in the futurentttttuniforms.flipEnvMap.value = material.envMap.isCubeTexture ? - 1 : 1;nntttttuniforms.reflectivity.value = material.reflectivity;ntttttuniforms.refractionRatio.value = material.refractionRatio;nntttttuniforms.maxMipLevel.value = renderer.properties.get( material.envMap ).__maxMipLevel;nntttt}nnttttuniforms.specular.value.copy( material.specular );nttttuniforms.glossiness.value = material.glossiness;nnttttuniforms.glossinessMap.value = material.glossinessMap;nnttttuniforms.emissiveMap.value = material.emissiveMap;nttttuniforms.bumpMap.value = material.bumpMap;nttttuniforms.normalMap.value = material.normalMap;nnttttuniforms.displacementMap.value = material.displacementMap;nttttuniforms.displacementScale.value = material.displacementScale;nttttuniforms.displacementBias.value = material.displacementBias;nnttttif ( uniforms.glossinessMap.value !== null && defines.USE_GLOSSINESSMAP === undefined ) {nntttttdefines.USE_GLOSSINESSMAP = '';nttttt// set USE_ROUGHNESSMAP to enable vUvntttttdefines.USE_ROUGHNESSMAP = '';nntttt}nnttttif ( uniforms.glossinessMap.value === null && defines.USE_GLOSSINESSMAP !== undefined ) {nntttttdelete defines.USE_GLOSSINESSMAP;ntttttdelete defines.USE_ROUGHNESSMAP;nntttt}nnttt}nntt};nnt}nnt/*********************************/nt/********** INTERPOLATION ********/nt/*********************************/nnt// Spline Interpolationnt// Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#appendix-c-spline-interpolationntfunction GLTFCubicSplineInterpolant( parameterPositions, sampleValues, sampleSize, resultBuffer ) {nnttInterpolant.call( this, parameterPositions, sampleValues, sampleSize, resultBuffer );nnt}nntGLTFCubicSplineInterpolant.prototype = Object.create( Interpolant.prototype );ntGLTFCubicSplineInterpolant.prototype.constructor = GLTFCubicSplineInterpolant;nntGLTFCubicSplineInterpolant.prototype.copySampleValue_ = function ( index ) {nntt// Copies a sample value to the result buffer. See description of glTFntt// CUBICSPLINE values layout in interpolate_() function below.nnttvar result = this.resultBuffer,ntttvalues = this.sampleValues,ntttvalueSize = this.valueSize,ntttoffset = index * valueSize * 3 + valueSize;nnttfor ( var i = 0; i !== valueSize; i ++ ) {nntttresult[ i ] = values[ offset + i ];nntt}nnttreturn result;nnt};nntGLTFCubicSplineInterpolant.prototype.beforeStart_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;nntGLTFCubicSplineInterpolant.prototype.afterEnd_ = GLTFCubicSplineInterpolant.prototype.copySampleValue_;nntGLTFCubicSplineInterpolant.prototype.interpolate_ = function ( i1, t0, t, t1 ) {nnttvar result = this.resultBuffer;nttvar values = this.sampleValues;nttvar stride = this.valueSize;nnttvar stride2 = stride * 2;nttvar stride3 = stride * 3;nnttvar td = t1 - t0;nnttvar p = ( t - t0 ) / td;nttvar pp = p * p;nttvar ppp = pp * p;nnttvar offset1 = i1 * stride3;nttvar offset0 = offset1 - stride3;nnttvar s2 = - 2 * ppp + 3 * pp;nttvar s3 = ppp - pp;nttvar s0 = 1 - s2;nttvar s1 = s3 - pp + p;nntt// Layout of keyframe output values for CUBICSPLINE animations:ntt// [ inTangent_1, splineVertex_1, outTangent_1, inTangent_2, splineVertex_2, … ]nttfor ( var i = 0; i !== stride; i ++ ) {nntttvar p0 = values[ offset0 + i + stride ]; // splineVertex_kntttvar m0 = values[ offset0 + i + stride2 ] * td; // outTangent_k * (t_k+1 - t_k)ntttvar p1 = values[ offset1 + i + stride ]; // splineVertex_k+1ntttvar m1 = values[ offset1 + i ] * td; // inTangent_k+1 * (t_k+1 - t_k)nntttresult[ i ] = s0 * p0 + s1 * m0 + s2 * p1 + s3 * m1;nntt}nnttreturn result;nnt};nnt/*********************************/nt/********** INTERNALS ************/nt/*********************************/nnt/* CONSTANTS */nntvar WEBGL_CONSTANTS = {nttFLOAT: 5126,ntt//FLOAT_MAT2: 35674,nttFLOAT_MAT3: 35675,nttFLOAT_MAT4: 35676,nttFLOAT_VEC2: 35664,nttFLOAT_VEC3: 35665,nttFLOAT_VEC4: 35666,nttLINEAR: 9729,nttREPEAT: 10497,nttSAMPLER_2D: 35678,nttPOINTS: 0,nttLINES: 1,nttLINE_LOOP: 2,nttLINE_STRIP: 3,nttTRIANGLES: 4,nttTRIANGLE_STRIP: 5,nttTRIANGLE_FAN: 6,nttUNSIGNED_BYTE: 5121,nttUNSIGNED_SHORT: 5123nt};nntvar WEBGL_COMPONENT_TYPES = {ntt5120: Int8Array,ntt5121: Uint8Array,ntt5122: Int16Array,ntt5123: Uint16Array,ntt5125: Uint32Array,ntt5126: Float32Arraynt};nntvar WEBGL_FILTERS = {ntt9728: NearestFilter,ntt9729: LinearFilter,ntt9984: NearestMipmapNearestFilter,ntt9985: LinearMipmapNearestFilter,ntt9986: NearestMipmapLinearFilter,ntt9987: LinearMipmapLinearFilternt};nntvar WEBGL_WRAPPINGS = {ntt33071: ClampToEdgeWrapping,ntt33648: MirroredRepeatWrapping,ntt10497: RepeatWrappingnt};nntvar WEBGL_TYPE_SIZES = {ntt'SCALAR': 1,ntt'VEC2': 2,ntt'VEC3': 3,ntt'VEC4': 4,ntt'MAT2': 4,ntt'MAT3': 9,ntt'MAT4': 16nt};nntvar ATTRIBUTES = {nttPOSITION: 'position',nttNORMAL: 'normal',nttTANGENT: 'tangent',nttTEXCOORD_0: 'uv',nttTEXCOORD_1: 'uv2',nttCOLOR_0: 'color',nttWEIGHTS_0: 'skinWeight',nttJOINTS_0: 'skinIndex',nt};nntvar PATH_PROPERTIES = {nttscale: 'scale',ntttranslation: 'position',nttrotation: 'quaternion',nttweights: 'morphTargetInfluences'nt};nntvar INTERPOLATION = {nttCUBICSPLINE: undefined, // We use a custom interpolant (GLTFCubicSplineInterpolation) for CUBICSPLINE tracks. Eachntt // keyframe track will be initialized with a default interpolation type, then modified.nttLINEAR: InterpolateLinear,nttSTEP: InterpolateDiscretent};nntvar ALPHA_MODES = {nttOPAQUE: 'OPAQUE',nttMASK: 'MASK',nttBLEND: 'BLEND'nt};nntvar MIME_TYPE_FORMATS = {ntt'image/png': RGBAFormat,ntt'image/jpeg': RGBFormatnt};nnt/* UTILITY FUNCTIONS */nntfunction resolveURL( url, path ) {nntt// Invalid URLnttif ( typeof url !== 'string' || url === '' ) return '';nntt// Host Relative URLnttif ( /^https?:\/\//i.test( path ) && /^\//.test( url ) ) {nntttpath = path.replace( /(^https?:\/\/+).*/i, '$1' );nntt}nntt// Absolute URL ,https://,//nttif ( /^(https?:)?\/\//i.test( url ) ) return url;nntt// Data URInttif ( /^data:.*,.*$/i.test( url ) ) return url;nntt// Blob URLnttif ( /^blob:.*$/i.test( url ) ) return url;nntt// Relative URLnttreturn path + url;nnt}nntvar defaultMaterial;nnt/**nt * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#default-materialnt */ntfunction createDefaultMaterial() {nnttdefaultMaterial = defaultMaterial || new MeshStandardMaterial( {ntttcolor: 0xFFFFFF,ntttemissive: 0x000000,ntttmetalness: 1,ntttroughness: 1,nttttransparent: false,ntttdepthTest: true,ntttside: FrontSidentt} );nnttreturn defaultMaterial;nnt}nntfunction addUnknownExtensionsToUserData( knownExtensions, object, objectDef ) {nntt// Add unknown glTF extensions to an object's userData.nnttfor ( var name in objectDef.extensions ) {nntttif ( knownExtensions[ name ] === undefined ) {nnttttobject.userData.gltfExtensions = object.userData.gltfExtensions || {};nttttobject.userData.gltfExtensions[ name ] = objectDef.extensions[ name ];nnttt}nntt}nnt}nnt/**nt * @param {Object3D|Material|BufferGeometry} objectnt * @param {GLTF.definition} gltfDefnt */ntfunction assignExtrasToUserData( object, gltfDef ) {nnttif ( gltfDef.extras !== undefined ) {nntttif ( typeof gltfDef.extras === 'object' ) {nnttttObject.assign( object.userData, gltfDef.extras );nnttt} else {nnttttconsole.warn( 'THREE.GLTFLoader: Ignoring primitive type .extras, ' + gltfDef.extras );nnttt}nntt}nnt}nnt/**nt * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#morph-targetsnt *nt * @param {BufferGeometry} geometrynt * @param {Array<GLTF.Target>} targetsnt * @param {GLTFParser} parsernt * @return {Promise<BufferGeometry>}nt */ntfunction addMorphTargets( geometry, targets, parser ) {nnttvar hasMorphPosition = false;nttvar hasMorphNormal = false;nnttfor ( var i = 0, il = targets.length; i < il; i ++ ) {nntttvar target = targets[ i ];nntttif ( target.POSITION !== undefined ) hasMorphPosition = true;ntttif ( target.NORMAL !== undefined ) hasMorphNormal = true;nntttif ( hasMorphPosition && hasMorphNormal ) break;nntt}nnttif ( ! hasMorphPosition && ! hasMorphNormal ) return Promise.resolve( geometry );nnttvar pendingPositionAccessors = [];nttvar pendingNormalAccessors = [];nnttfor ( var i = 0, il = targets.length; i < il; i ++ ) {nntttvar target = targets[ i ];nntttif ( hasMorphPosition ) {nnttttvar pendingAccessor = target.POSITION !== undefinednttttt? parser.getDependency( 'accessor', target.POSITION )nttttt: geometry.attributes.position;nnttttpendingPositionAccessors.push( pendingAccessor );nnttt}nntttif ( hasMorphNormal ) {nnttttvar pendingAccessor = target.NORMAL !== undefinednttttt? parser.getDependency( 'accessor', target.NORMAL )nttttt: geometry.attributes.normal;nnttttpendingNormalAccessors.push( pendingAccessor );nnttt}nntt}nnttreturn Promise.all( [ntttPromise.all( pendingPositionAccessors ),ntttPromise.all( pendingNormalAccessors )ntt] ).then( function ( accessors ) {nntttvar morphPositions = accessors[ 0 ];ntttvar morphNormals = accessors[ 1 ];nnttt// Clone morph target accessors before modifying them.nntttfor ( var i = 0, il = morphPositions.length; i < il; i ++ ) {nnttttif ( geometry.attributes.position === morphPositions[ i ] ) continue;nnttttmorphPositions[ i ] = cloneBufferAttribute( morphPositions[ i ] );nnttt}nntttfor ( var i = 0, il = morphNormals.length; i < il; i ++ ) {nnttttif ( geometry.attributes.normal === morphNormals[ i ] ) continue;nnttttmorphNormals[ i ] = cloneBufferAttribute( morphNormals[ i ] );nnttt}nntttfor ( var i = 0, il = targets.length; i < il; i ++ ) {nnttttvar target = targets[ i ];nttttvar attributeName = 'morphTarget' + i;nnttttif ( hasMorphPosition ) {nnttttt// Three.js morph position is absolute value. The formula isnttttt// basePositionnttttt// + weight0 * ( morphPosition0 - basePosition )nttttt// + weight1 * ( morphPosition1 - basePosition )nttttt// …nttttt// while the glTF one is relativenttttt// basePositionnttttt// + weight0 * glTFmorphPosition0nttttt// + weight1 * glTFmorphPosition1nttttt// …nttttt// then we need to convert from relative to absolute here.nntttttif ( target.POSITION !== undefined ) {nnttttttvar positionAttribute = morphPositions[ i ];nttttttpositionAttribute.name = attributeName;nnttttttvar position = geometry.attributes.position;nnttttttfor ( var j = 0, jl = positionAttribute.count; j < jl; j ++ ) {nntttttttpositionAttribute.setXYZ(nttttttttj,nttttttttpositionAttribute.getX( j ) + position.getX( j ),nttttttttpositionAttribute.getY( j ) + position.getY( j ),nttttttttpositionAttribute.getZ( j ) + position.getZ( j )nttttttt);nntttttt}nnttttt}nntttt}nnttttif ( hasMorphNormal ) {nnttttt// see target.POSITION's commentnntttttif ( target.NORMAL !== undefined ) {nnttttttvar normalAttribute = morphNormals[ i ];nttttttnormalAttribute.name = attributeName;nnttttttvar normal = geometry.attributes.normal;nnttttttfor ( var j = 0, jl = normalAttribute.count; j < jl; j ++ ) {nntttttttnormalAttribute.setXYZ(nttttttttj,nttttttttnormalAttribute.getX( j ) + normal.getX( j ),nttttttttnormalAttribute.getY( j ) + normal.getY( j ),nttttttttnormalAttribute.getZ( j ) + normal.getZ( j )nttttttt);nntttttt}nnttttt}nntttt}nnttt}nntttif ( hasMorphPosition ) geometry.morphAttributes.position = morphPositions;ntttif ( hasMorphNormal ) geometry.morphAttributes.normal = morphNormals;nntttreturn geometry;nntt} );nnt}nnt/**nt * @param {Mesh} meshnt * @param {GLTF.Mesh} meshDefnt */ntfunction updateMorphTargets( mesh, meshDef ) {nnttmesh.updateMorphTargets();nnttif ( meshDef.weights !== undefined ) {nntttfor ( var i = 0, il = meshDef.weights.length; i < il; i ++ ) {nnttttmesh.morphTargetInfluences[ i ] = meshDef.weights[ i ];nnttt}nntt}nntt// .extras has user-defined data, so check that .extras.targetNames is an array.nttif ( meshDef.extras && Array.isArray( meshDef.extras.targetNames ) ) {nntttvar targetNames = meshDef.extras.targetNames;nntttif ( mesh.morphTargetInfluences.length === targetNames.length ) {nnttttmesh.morphTargetDictionary = {};nnttttfor ( var i = 0, il = targetNames.length; i < il; i ++ ) {nntttttmesh.morphTargetDictionary[ targetNames[ i ] ] = i;nntttt}nnttt} else {nnttttconsole.warn( 'THREE.GLTFLoader: Invalid extras.targetNames length. Ignoring names.' );nnttt}nntt}nnt}nntfunction createPrimitiveKey( primitiveDef ) {nnttvar dracoExtension = primitiveDef.extensions && primitiveDef.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ];nttvar geometryKey;nnttif ( dracoExtension ) {nntttgeometryKey = 'draco:' + dracoExtension.bufferViewntttt+ ':' + dracoExtension.indicesntttt+ ':' + createAttributesKey( dracoExtension.attributes );nntt} else {nntttgeometryKey = primitiveDef.indices + ':' + createAttributesKey( primitiveDef.attributes ) + ':' + primitiveDef.mode;nntt}nnttreturn geometryKey;nnt}nntfunction createAttributesKey( attributes ) {nnttvar attributesKey = '';nnttvar keys = Object.keys( attributes ).sort();nnttfor ( var i = 0, il = keys.length; i < il; i ++ ) {nntttattributesKey += keys[ i ] + ':' + attributes[ keys[ i ] ] + ';';nntt}nnttreturn attributesKey;nnt}nntfunction cloneBufferAttribute( attribute ) {nnttif ( attribute.isInterleavedBufferAttribute ) {nntttvar count = attribute.count;ntttvar itemSize = attribute.itemSize;ntttvar array = attribute.array.slice( 0, count * itemSize );nntttfor ( var i = 0, j = 0; i < count; ++ i ) {nnttttarray[ j ++ ] = attribute.getX( i );nttttif ( itemSize >= 2 ) array[ j ++ ] = attribute.getY( i );nttttif ( itemSize >= 3 ) array[ j ++ ] = attribute.getZ( i );nttttif ( itemSize >= 4 ) array[ j ++ ] = attribute.getW( i );nnttt}nntttreturn new BufferAttribute( array, itemSize, attribute.normalized );nntt}nnttreturn attribute.clone();nnt}nnt/* GLTF PARSER */nntfunction GLTFParser( json, extensions, options ) {nnttthis.json = json || {};nttthis.extensions = extensions || {};nttthis.options = options || {};nntt// loader object cachenttthis.cache = new GLTFRegistry();nntt// BufferGeometry cachingnttthis.primitiveCache = {};nnttthis.textureLoader = new TextureLoader( this.options.manager );nttthis.textureLoader.setCrossOrigin( this.options.crossOrigin );nnttthis.fileLoader = new FileLoader( this.options.manager );nttthis.fileLoader.setResponseType( 'arraybuffer' );nnttif ( this.options.crossOrigin === 'use-credentials' ) {nntttthis.fileLoader.setWithCredentials( true );nntt}nnt}nntGLTFParser.prototype.parse = function ( onLoad, onError ) {nnttvar parser = this;nttvar json = this.json;nttvar extensions = this.extensions;nntt// Clear the loader cachenttthis.cache.removeAll();nntt// Mark the special nodes/meshes in json for efficient parsenttthis.markDefs();nnttPromise.all( [nntttthis.getDependencies( 'scene' ),ntttthis.getDependencies( 'animation' ),ntttthis.getDependencies( 'camera' ),nntt] ).then( function ( dependencies ) {nntttvar result = {nttttscene: dependencies[ 0 ][ json.scene || 0 ],nttttscenes: dependencies[ 0 ],nttttanimations: dependencies[ 1 ],nttttcameras: dependencies[ 2 ],nttttasset: json.asset,nttttparser: parser,nttttuserData: {}nttt};nntttaddUnknownExtensionsToUserData( extensions, result, json );nntttassignExtrasToUserData( result, json );nntttonLoad( result );nntt} ).catch( onError );nnt};nnt/**nt * Marks the special nodes/meshes in json for efficient parse.nt */ntGLTFParser.prototype.markDefs = function () {nnttvar nodeDefs = this.json.nodes || [];nttvar skinDefs = this.json.skins || [];nttvar meshDefs = this.json.meshes || [];nnttvar meshReferences = {};nttvar meshUses = {};nntt// Nothing in the node definition indicates whether it is a Bone or anntt// Object3D. Use the skins' joint references to mark bones.nttfor ( var skinIndex = 0, skinLength = skinDefs.length; skinIndex < skinLength; skinIndex ++ ) {nntttvar joints = skinDefs[ skinIndex ].joints;nntttfor ( var i = 0, il = joints.length; i < il; i ++ ) {nnttttnodeDefs[ joints[ i ] ].isBone = true;nnttt}nntt}nntt// Meshes can (and should) be reused by multiple nodes in a glTF asset. Tontt// avoid having more than one Mesh with the same name, countntt// references and rename instances below.ntt//ntt// Example: CesiumMilkTruck sample model reuses "Wheel" meshes.nttfor ( var nodeIndex = 0, nodeLength = nodeDefs.length; nodeIndex < nodeLength; nodeIndex ++ ) {nntttvar nodeDef = nodeDefs[ nodeIndex ];nntttif ( nodeDef.mesh !== undefined ) {nnttttif ( meshReferences[ nodeDef.mesh ] === undefined ) {nntttttmeshReferences[ nodeDef.mesh ] = meshUses[ nodeDef.mesh ] = 0;nntttt}nnttttmeshReferences[ nodeDef.mesh ] ++;nntttt// Nothing in the mesh definition indicates whether it isntttt// a SkinnedMesh or Mesh. Use the node's mesh referencentttt// to mark SkinnedMesh if node has skin.nttttif ( nodeDef.skin !== undefined ) {nntttttmeshDefs[ nodeDef.mesh ].isSkinnedMesh = true;nntttt}nnttt}nntt}nnttthis.json.meshReferences = meshReferences;nttthis.json.meshUses = meshUses;nnt};nnt/**nt * Requests the specified dependency asynchronously, with caching.nt * @param {string} typent * @param {number} indexnt * @return {Promise<Object3D|Material|THREE.Texture|AnimationClip|ArrayBuffer|Object>}nt */ntGLTFParser.prototype.getDependency = function ( type, index ) {nnttvar cacheKey = type + ':' + index;nttvar dependency = this.cache.get( cacheKey );nnttif ( ! dependency ) {nntttswitch ( type ) {nnttttcase 'scene':ntttttdependency = this.loadScene( index );ntttttbreak;nnttttcase 'node':ntttttdependency = this.loadNode( index );ntttttbreak;nnttttcase 'mesh':ntttttdependency = this.loadMesh( index );ntttttbreak;nnttttcase 'accessor':ntttttdependency = this.loadAccessor( index );ntttttbreak;nnttttcase 'bufferView':ntttttdependency = this.loadBufferView( index );ntttttbreak;nnttttcase 'buffer':ntttttdependency = this.loadBuffer( index );ntttttbreak;nnttttcase 'material':ntttttdependency = this.loadMaterial( index );ntttttbreak;nnttttcase 'texture':ntttttdependency = this.loadTexture( index );ntttttbreak;nnttttcase 'skin':ntttttdependency = this.loadSkin( index );ntttttbreak;nnttttcase 'animation':ntttttdependency = this.loadAnimation( index );ntttttbreak;nnttttcase 'camera':ntttttdependency = this.loadCamera( index );ntttttbreak;nnttttcase 'light':ntttttdependency = this.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ].loadLight( index );ntttttbreak;nnttttdefault:ntttttthrow new Error( 'Unknown type: ' + type );nnttt}nntttthis.cache.add( cacheKey, dependency );nntt}nnttreturn dependency;nnt};nnt/**nt * Requests all dependencies of the specified type asynchronously, with caching.nt * @param {string} typent * @return {Promise<Array<Object>>}nt */ntGLTFParser.prototype.getDependencies = function ( type ) {nnttvar dependencies = this.cache.get( type );nnttif ( ! dependencies ) {nntttvar parser = this;ntttvar defs = this.json[ type + ( type === 'mesh' ? 'es' : 's' ) ] || [];nntttdependencies = Promise.all( defs.map( function ( def, index ) {nnttttreturn parser.getDependency( type, index );nnttt} ) );nntttthis.cache.add( type, dependencies );nntt}nnttreturn dependencies;nnt};nnt/**nt * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-viewsnt * @param {number} bufferIndexnt * @return {Promise<ArrayBuffer>}nt */ntGLTFParser.prototype.loadBuffer = function ( bufferIndex ) {nnttvar bufferDef = this.json.buffers[ bufferIndex ];nttvar loader = this.fileLoader;nnttif ( bufferDef.type && bufferDef.type !== 'arraybuffer' ) {nntttthrow new Error( 'THREE.GLTFLoader: ' + bufferDef.type + ' buffer type is not supported.' );nntt}nntt// If present, GLB container is required to be the first buffer.nttif ( bufferDef.uri === undefined && bufferIndex === 0 ) {nntttreturn Promise.resolve( this.extensions[ EXTENSIONS.KHR_BINARY_GLTF ].body );nntt}nnttvar options = this.options;nnttreturn new Promise( function ( resolve, reject ) {nntttloader.load( resolveURL( bufferDef.uri, options.path ), resolve, undefined, function () {nnttttreject( new Error( 'THREE.GLTFLoader: Failed to load buffer "' + bufferDef.uri + '".' ) );nnttt} );nntt} );nnt};nnt/**nt * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#buffers-and-buffer-viewsnt * @param {number} bufferViewIndexnt * @return {Promise<ArrayBuffer>}nt */ntGLTFParser.prototype.loadBufferView = function ( bufferViewIndex ) {nnttvar bufferViewDef = this.json.bufferViews[ bufferViewIndex ];nnttreturn this.getDependency( 'buffer', bufferViewDef.buffer ).then( function ( buffer ) {nntttvar byteLength = bufferViewDef.byteLength || 0;ntttvar byteOffset = bufferViewDef.byteOffset || 0;ntttreturn buffer.slice( byteOffset, byteOffset + byteLength );nntt} );nnt};nnt/**nt * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#accessorsnt * @param {number} accessorIndexnt * @return {Promise<BufferAttribute|InterleavedBufferAttribute>}nt */ntGLTFParser.prototype.loadAccessor = function ( accessorIndex ) {nnttvar parser = this;nttvar json = this.json;nnttvar accessorDef = this.json.accessors[ accessorIndex ];nnttif ( accessorDef.bufferView === undefined && accessorDef.sparse === undefined ) {nnttt// Ignore empty accessors, which may be used to declare runtimenttt// information about attributes coming from another source (e.g. Draconttt// compression extension).ntttreturn Promise.resolve( null );nntt}nnttvar pendingBufferViews = [];nnttif ( accessorDef.bufferView !== undefined ) {nntttpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.bufferView ) );nntt} else {nntttpendingBufferViews.push( null );nntt}nnttif ( accessorDef.sparse !== undefined ) {nntttpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.indices.bufferView ) );ntttpendingBufferViews.push( this.getDependency( 'bufferView', accessorDef.sparse.values.bufferView ) );nntt}nnttreturn Promise.all( pendingBufferViews ).then( function ( bufferViews ) {nntttvar bufferView = bufferViews[ 0 ];nntttvar itemSize = WEBGL_TYPE_SIZES[ accessorDef.type ];ntttvar TypedArray = WEBGL_COMPONENT_TYPES[ accessorDef.componentType ];nnttt// For VEC3: itemSize is 3, elementBytes is 4, itemBytes is 12.ntttvar elementBytes = TypedArray.BYTES_PER_ELEMENT;ntttvar itemBytes = elementBytes * itemSize;ntttvar byteOffset = accessorDef.byteOffset || 0;ntttvar byteStride = accessorDef.bufferView !== undefined ? json.bufferViews[ accessorDef.bufferView ].byteStride : undefined;ntttvar normalized = accessorDef.normalized === true;ntttvar array, bufferAttribute;nnttt// The buffer is not interleaved if the stride is the item size in bytes.ntttif ( byteStride && byteStride !== itemBytes ) {nntttt// Each "slice" of the buffer, as defined by 'count' elements of 'byteStride' bytes, gets its own InterleavedBufferntttt// This makes sure that IBA.count reflects accessor.count properlynttttvar ibSlice = Math.floor( byteOffset / byteStride );nttttvar ibCacheKey = 'InterleavedBuffer:' + accessorDef.bufferView + ':' + accessorDef.componentType + ':' + ibSlice + ':' + accessorDef.count;nttttvar ib = parser.cache.get( ibCacheKey );nnttttif ( ! ib ) {nntttttarray = new TypedArray( bufferView, ibSlice * byteStride, accessorDef.count * byteStride / elementBytes );nnttttt// Integer
parameters to IB/IBA are in array elements, not bytes.ntttttib = new InterleavedBuffer( array, byteStride / elementBytes );nntttttparser.cache.add( ibCacheKey, ib );nntttt}nnttttbufferAttribute = new InterleavedBufferAttribute( ib, itemSize, ( byteOffset % byteStride ) / elementBytes, normalized );nnttt} else {nnttttif ( bufferView === null ) {nntttttarray = new TypedArray( accessorDef.count * itemSize );nntttt} else {nntttttarray = new TypedArray( bufferView, byteOffset, accessorDef.count * itemSize );nntttt}nnttttbufferAttribute = new BufferAttribute( array, itemSize, normalized );nnttt}nnttt// github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#sparse-accessorsntttif ( accessorDef.sparse !== undefined ) {nnttttvar itemSizeIndices = WEBGL_TYPE_SIZES.SCALAR;nttttvar TypedArrayIndices = WEBGL_COMPONENT_TYPES[ accessorDef.sparse.indices.componentType ];nnttttvar byteOffsetIndices = accessorDef.sparse.indices.byteOffset || 0;nttttvar byteOffsetValues = accessorDef.sparse.values.byteOffset || 0;nnttttvar sparseIndices = new TypedArrayIndices( bufferViews[ 1 ], byteOffsetIndices, accessorDef.sparse.count * itemSizeIndices );nttttvar sparseValues = new TypedArray( bufferViews[ 2 ], byteOffsetValues, accessorDef.sparse.count * itemSize );nnttttif ( bufferView !== null ) {nnttttt// Avoid modifying the original ArrayBuffer, if the bufferView wasn't initialized with zeroes.ntttttbufferAttribute = new BufferAttribute( bufferAttribute.array.slice(), bufferAttribute.itemSize, bufferAttribute.normalized );nntttt}nnttttfor ( var i = 0, il = sparseIndices.length; i < il; i ++ ) {nntttttvar index = sparseIndices[ i ];nntttttbufferAttribute.setX( index, sparseValues[ i * itemSize ] );ntttttif ( itemSize >= 2 ) bufferAttribute.setY( index, sparseValues[ i * itemSize + 1 ] );ntttttif ( itemSize >= 3 ) bufferAttribute.setZ( index, sparseValues[ i * itemSize + 2 ] );ntttttif ( itemSize >= 4 ) bufferAttribute.setW( index, sparseValues[ i * itemSize + 3 ] );ntttttif ( itemSize >= 5 ) throw new Error( 'THREE.GLTFLoader: Unsupported itemSize in sparse BufferAttribute.' );nntttt}nnttt}nntttreturn bufferAttribute;nntt} );nnt};nnt/**nt * Specification: github.com/KhronosGroup/glTF/tree/master/specification/2.0#texturesnt * @param {number} textureIndexnt * @return {Promise<THREE.Texture>}nt */ntGLTFParser.prototype.loadTexture = function ( textureIndex ) {nnttvar parser = this;nttvar json = this.json;nttvar options = this.options;nttvar textureLoader = this.textureLoader;nnttvar URL = window.URL || window.webkitURL;nnttvar textureDef = json.textures[ textureIndex ];nnttvar textureExtensions = textureDef.extensions || {};nnttvar source;nnttif ( textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ] ) {nntttsource = json.images[ textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].source ];nntt} else {nntttsource = json.images[ textureDef.source ];nntt}nnttvar sourceURI = source.uri;nttvar isObjectURL = false;nnttif ( source.bufferView !== undefined ) {nnttt// Load binary image data from bufferView, if provided.nntttsourceURI = parser.getDependency( 'bufferView', source.bufferView ).then( function ( bufferView ) {nnttttisObjectURL = true;nttttvar blob = new Blob( [ bufferView ], { type: source.mimeType } );nttttsourceURI = URL.createObjectURL( blob );nttttreturn sourceURI;nnttt} );nntt}nnttreturn Promise.resolve( sourceURI ).then( function ( sourceURI ) {nnttt// Load Texture resource.nntttvar loader = options.manager.getHandler( sourceURI );nntttif ( ! loader ) {nnttttloader = textureExtensions[ EXTENSIONS.MSFT_TEXTURE_DDS ]nttttt? parser.extensions[ EXTENSIONS.MSFT_TEXTURE_DDS ].ddsLoadernttttt: textureLoader;nnttt}nntttreturn new Promise( function ( resolve, reject ) {nnttttloader.load( resolveURL( sourceURI, options.path ), resolve, undefined, reject );nnttt} );nntt} ).then( function ( texture ) {nnttt// Clean up resources and configure Texture.nntttif ( isObjectURL === true ) {nnttttURL.revokeObjectURL( sourceURI );nnttt}nnttttexture.flipY = false;nntttif ( textureDef.name !== undefined ) texture.name = textureDef.name;nnttt// Ignore unknown mime types, like DDS files.ntttif ( source.mimeType in MIME_TYPE_FORMATS ) {nntttttexture.format = MIME_TYPE_FORMATS[ source.mimeType ];nnttt}nntttvar samplers = json.samplers || {};ntttvar sampler = samplers[ textureDef.sampler ] || {};nnttttexture.magFilter = WEBGL_FILTERS[ sampler.magFilter ] || LinearFilter;nttttexture.minFilter = WEBGL_FILTERS[ sampler.minFilter ] || LinearMipmapLinearFilter;nttttexture.wrapS = WEBGL_WRAPPINGS[ sampler.wrapS ] || RepeatWrapping;nttttexture.wrapT = WEBGL_WRAPPINGS[ sampler.wrapT ] || RepeatWrapping;nntttreturn texture;nntt} );nnt};nnt/**nt * Asynchronously assigns a texture to the given material parameters.nt * @param {Object} materialParamsnt * @param {string} mapNament * @param {Object} mapDefnt * @return {Promise}nt */ntGLTFParser.prototype.assignTexture = function ( materialParams, mapName, mapDef ) {nnttvar parser = this;nnttreturn this.getDependency( 'texture', mapDef.index ).then( function ( texture ) {nntttif ( ! texture.isCompressedTexture ) {nnttttswitch ( mapName ) {nntttttcase 'aoMap':ntttttcase 'emissiveMap':ntttttcase 'metalnessMap':ntttttcase 'normalMap':ntttttcase 'roughnessMap':ntttttttexture.format = RGBFormat;nttttttbreak;nntttt}nnttt}nntttif ( parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] ) {nnttttvar transform = mapDef.extensions !== undefined ? mapDef.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ] : undefined;nnttttif ( transform ) {nnttttttexture = parser.extensions[ EXTENSIONS.KHR_TEXTURE_TRANSFORM ].extendTexture( texture, transform );nntttt}nnttt}nntttmaterialParams[ mapName ] = texture;nntt} );nnt};nnt/**nt * Assigns final material to a Mesh, Line, or Points instance. The instancent * already has a material (generated from the glTF material options alone)nt * but reuse of the same glTF material may require multiple threejs materialsnt * to accomodate different primitive types, defines, etc. New materials willnt * be created if necessary, and reused from a cache.nt * @param {Object3D} mesh Mesh, Line, or Points instance.nt */ntGLTFParser.prototype.assignFinalMaterial = function ( mesh ) {nnttvar geometry = mesh.geometry;nttvar material = mesh.material;nttvar extensions = this.extensions;nnttvar useVertexTangents = geometry.attributes.tangent !== undefined;nttvar useVertexColors = geometry.attributes.color !== undefined;nttvar useFlatShading = geometry.attributes.normal === undefined;nttvar useSkinning = mesh.isSkinnedMesh === true;nttvar useMorphTargets = Object.keys( geometry.morphAttributes ).length > 0;nttvar useMorphNormals = useMorphTargets && geometry.morphAttributes.normal !== undefined;nnttif ( mesh.isPoints ) {nntttvar cacheKey = 'PointsMaterial:' + material.uuid;nntttvar pointsMaterial = this.cache.get( cacheKey );nntttif ( ! pointsMaterial ) {nnttttpointsMaterial = new PointsMaterial();nttttMaterial.prototype.copy.call( pointsMaterial, material );nttttpointsMaterial.color.copy( material.color );nttttpointsMaterial.map = material.map;nttttpointsMaterial.sizeAttenuation = false; // glTF spec says points should be 1pxnnttttthis.cache.add( cacheKey, pointsMaterial );nnttt}nntttmaterial = pointsMaterial;nntt} else if ( mesh.isLine ) {nntttvar cacheKey = 'LineBasicMaterial:' + material.uuid;nntttvar lineMaterial = this.cache.get( cacheKey );nntttif ( ! lineMaterial ) {nnttttlineMaterial = new LineBasicMaterial();nttttMaterial.prototype.copy.call( lineMaterial, material );nttttlineMaterial.color.copy( material.color );nnttttthis.cache.add( cacheKey, lineMaterial );nnttt}nntttmaterial = lineMaterial;nntt}nntt// Clone the material if it will be modifiednttif ( useVertexTangents || useVertexColors || useFlatShading || useSkinning || useMorphTargets ) {nntttvar cacheKey = 'ClonedMaterial:' + material.uuid + ':';nntttif ( material.isGLTFSpecularGlossinessMaterial ) cacheKey += 'specular-glossiness:';ntttif ( useSkinning ) cacheKey += 'skinning:';ntttif ( useVertexTangents ) cacheKey += 'vertex-tangents:';ntttif ( useVertexColors ) cacheKey += 'vertex-colors:';ntttif ( useFlatShading ) cacheKey += 'flat-shading:';ntttif ( useMorphTargets ) cacheKey += 'morph-targets:';ntttif ( useMorphNormals ) cacheKey += 'morph-normals:';nntttvar cachedMaterial = this.cache.get( cacheKey );nntttif ( ! cachedMaterial ) {nnttttcachedMaterial = material.isGLTFSpecularGlossinessMaterialnttttt? extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].cloneMaterial( material )nttttt: material.clone();nnttttif ( useSkinning ) cachedMaterial.skinning = true;nttttif ( useVertexTangents ) cachedMaterial.vertexTangents = true;nttttif ( useVertexColors ) cachedMaterial.vertexColors = VertexColors;nttttif ( useFlatShading ) cachedMaterial.flatShading = true;nttttif ( useMorphTargets ) cachedMaterial.morphTargets = true;nttttif ( useMorphNormals ) cachedMaterial.morphNormals = true;nnttttthis.cache.add( cacheKey, cachedMaterial );nnttt}nntttmaterial = cachedMaterial;nntt}nntt// workarounds for mesh and geometrynnttif ( material.aoMap && geometry.attributes.uv2 === undefined && geometry.attributes.uv !== undefined ) {nntttconsole.log( 'THREE.GLTFLoader: Duplicating UVs to support aoMap.' );ntttgeometry.addAttribute( 'uv2', new BufferAttribute( geometry.attributes.uv.array, 2 ) );nntt}nnttif ( material.isGLTFSpecularGlossinessMaterial ) {nnttt// for GLTFSpecularGlossinessMaterial(ShaderMaterial) uniforms runtime updatentttmesh.onBeforeRender = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].refreshUniforms;nntt}nnttmesh.material = material;nnt};nnt/**nt * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#materialsnt * @param {number} materialIndexnt * @return {Promise<Material>}nt */ntGLTFParser.prototype.loadMaterial = function ( materialIndex ) {nnttvar parser = this;nttvar json = this.json;nttvar extensions = this.extensions;nttvar materialDef = json.materials[ materialIndex ];nnttvar materialType;nttvar materialParams = {};nttvar materialExtensions = materialDef.extensions || {};nnttvar pending = [];nnttif ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ] ) {nntttvar sgExtension = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ];ntttmaterialType = sgExtension.getMaterialType();ntttpending.push( sgExtension.extendParams( materialParams, materialDef, parser ) );nntt} else if ( materialExtensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ] ) {nntttvar kmuExtension = extensions[ EXTENSIONS.KHR_MATERIALS_UNLIT ];ntttmaterialType = kmuExtension.getMaterialType();ntttpending.push( kmuExtension.extendParams( materialParams, materialDef, parser ) );nntt} else {nnttt// Specification:nttt// github.com/KhronosGroup/glTF/tree/master/specification/2.0#metallic-roughness-materialnntttmaterialType = MeshStandardMaterial;nntttvar metallicRoughness = materialDef.pbrMetallicRoughness || {};nntttmaterialParams.color = new Color( 1.0, 1.0, 1.0 );ntttmaterialParams.opacity = 1.0;nntttif ( Array.isArray( metallicRoughness.baseColorFactor ) ) {nnttttvar array = metallicRoughness.baseColorFactor;nnttttmaterialParams.color.fromArray( array );nttttmaterialParams.opacity = array[ 3 ];nnttt}nntttif ( metallicRoughness.baseColorTexture !== undefined ) {nnttttpending.push( parser.assignTexture( materialParams, 'map', metallicRoughness.baseColorTexture ) );nnttt}nntttmaterialParams.metalness = metallicRoughness.metallicFactor !== undefined ? metallicRoughness.metallicFactor : 1.0;ntttmaterialParams.roughness = metallicRoughness.roughnessFactor !== undefined ? metallicRoughness.roughnessFactor : 1.0;nntttif ( metallicRoughness.metallicRoughnessTexture !== undefined ) {nnttttpending.push( parser.assignTexture( materialParams, 'metalnessMap', metallicRoughness.metallicRoughnessTexture ) );nttttpending.push( parser.assignTexture( materialParams, 'roughnessMap', metallicRoughness.metallicRoughnessTexture ) );nnttt}nntt}nnttif ( materialDef.doubleSided === true ) {nntttmaterialParams.side = DoubleSide;nntt}nnttvar alphaMode = materialDef.alphaMode || ALPHA_MODES.OPAQUE;nnttif ( alphaMode === ALPHA_MODES.BLEND ) {nntttmaterialParams.transparent = true;nntt} else {nntttmaterialParams.transparent = false;nntttif ( alphaMode === ALPHA_MODES.MASK ) {nnttttmaterialParams.alphaTest = materialDef.alphaCutoff !== undefined ? materialDef.alphaCutoff : 0.5;nnttt}nntt}nnttif ( materialDef.normalTexture !== undefined && materialType !== MeshBasicMaterial ) {nntttpending.push( parser.assignTexture( materialParams, 'normalMap', materialDef.normalTexture ) );nntttmaterialParams.normalScale = new Vector2( 1, 1 );nntttif ( materialDef.normalTexture.scale !== undefined ) {nnttttmaterialParams.normalScale.set( materialDef.normalTexture.scale, materialDef.normalTexture.scale );nnttt}nntt}nnttif ( materialDef.occlusionTexture !== undefined && materialType !== MeshBasicMaterial ) {nntttpending.push( parser.assignTexture( materialParams, 'aoMap', materialDef.occlusionTexture ) );nntttif ( materialDef.occlusionTexture.strength !== undefined ) {nnttttmaterialParams.aoMapIntensity = materialDef.occlusionTexture.strength;nnttt}nntt}nnttif ( materialDef.emissiveFactor !== undefined && materialType !== MeshBasicMaterial ) {nntttmaterialParams.emissive = new Color().fromArray( materialDef.emissiveFactor );nntt}nnttif ( materialDef.emissiveTexture !== undefined && materialType !== MeshBasicMaterial ) {nntttpending.push( parser.assignTexture( materialParams, 'emissiveMap', materialDef.emissiveTexture ) );nntt}nnttreturn Promise.all( pending ).then( function () {nntttvar material;nntttif ( materialType === ShaderMaterial ) {nnttttmaterial = extensions[ EXTENSIONS.KHR_MATERIALS_PBR_SPECULAR_GLOSSINESS ].createMaterial( materialParams );nnttt} else {nnttttmaterial = new materialType( materialParams );nnttt}nntttif ( materialDef.name !== undefined ) material.name = materialDef.name;nnttt// baseColorTexture, emissiveTexture, and specularGlossinessTexture use sRGB encoding.ntttif ( material.map ) material.map.encoding = sRGBEncoding;ntttif ( material.emissiveMap ) material.emissiveMap.encoding = sRGBEncoding;ntttif ( material.specularMap ) material.specularMap.encoding = sRGBEncoding;nntttassignExtrasToUserData( material, materialDef );nntttif ( materialDef.extensions ) addUnknownExtensionsToUserData( extensions, material, materialDef );nntttreturn material;nntt} );nnt};nnt/**nt * @param {BufferGeometry} geometrynt * @param {GLTF.Primitive} primitiveDefnt * @param {GLTFParser} parsernt * @return {Promise<BufferGeometry>}nt */ntfunction addPrimitiveAttributes( geometry, primitiveDef, parser ) {nnttvar attributes = primitiveDef.attributes;nnttvar pending = [];nnttfunction assignAttributeAccessor( accessorIndex, attributeName ) {nntttreturn parser.getDependency( 'accessor', accessorIndex )ntttt.then( function ( accessor ) {nntttttgeometry.addAttribute( attributeName, accessor );nntttt} );nntt}nnttfor ( var gltfAttributeName in attributes ) {nntttvar threeAttributeName = ATTRIBUTES[ gltfAttributeName ] || gltfAttributeName.toLowerCase();nnttt// Skip attributes already provided by e.g. Draco extension.ntttif ( threeAttributeName in geometry.attributes ) continue;nntttpending.push( assignAttributeAccessor( attributes[ gltfAttributeName ], threeAttributeName ) );nntt}nnttif ( primitiveDef.indices !== undefined && ! geometry.index ) {nntttvar accessor = parser.getDependency( 'accessor', primitiveDef.indices ).then( function ( accessor ) {nnttttgeometry.setIndex( accessor );nnttt} );nntttpending.push( accessor );nntt}nnttassignExtrasToUserData( geometry, primitiveDef );nnttreturn Promise.all( pending ).then( function () {nntttreturn primitiveDef.targets !== undefinedntttt? addMorphTargets( geometry, primitiveDef.targets, parser )ntttt: geometry;nntt} );nnt}nnt/**nt * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#geometrynt *nt * Creates BufferGeometries from primitives.nt *nt * @param {Array<GLTF.Primitive>} primitivesnt * @return {Promise<Array<BufferGeometry>>}nt */ntGLTFParser.prototype.loadGeometries = function ( primitives ) {nnttvar parser = this;nttvar extensions = this.extensions;nttvar cache = this.primitiveCache;nnttfunction createDracoPrimitive( primitive ) {nntttreturn extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ]ntttt.decodePrimitive( primitive, parser )ntttt.then( function ( geometry ) {nntttttreturn addPrimitiveAttributes( geometry, primitive, parser );nntttt} );nntt}nnttvar pending = [];nnttfor ( var i = 0, il = primitives.length; i < il; i ++ ) {nntttvar primitive = primitives[ i ];ntttvar cacheKey = createPrimitiveKey( primitive );nnttt// See if we've already created this geometryntttvar cached = cache[ cacheKey ];nntttif ( cached ) {nntttt// Use the cached geometry if it existsnttttpending.push( cached.promise );nnttt} else {nnttttvar geometryPromise;nnttttif ( primitive.extensions && primitive.extensions[ EXTENSIONS.KHR_DRACO_MESH_COMPRESSION ] ) {nnttttt// Use DRACO geometry if availablentttttgeometryPromise = createDracoPrimitive( primitive );nntttt} else {nnttttt// Otherwise create a new geometryntttttgeometryPromise = addPrimitiveAttributes( new BufferGeometry(), primitive, parser );nntttt}nntttt// Cache this geometrynttttcache[ cacheKey ] = { primitive: primitive, promise: geometryPromise };nnttttpending.push( geometryPromise );nnttt}nntt}nnttreturn Promise.all( pending );nnt};nnt/**nt * Specification: github.com/KhronosGroup/glTF/blob/master/specification/2.0/README.md#meshesnt * @param {number} meshIndexnt * @return {Promise<Group|Mesh|SkinnedMesh>}nt */ntGLTFParser.prototype.loadMesh = function ( meshIndex ) {nnttvar parser = this;nttvar json = this.json;nnttvar meshDef = json.meshes[ meshIndex ];nttvar primitives = meshDef.primitives;nnttvar pending = [];nnttfor ( var i = 0, il = primitives.length; i < il; i ++ ) {nntttvar material = primitives[ i ].material === undefinedntttt? createDefaultMaterial()ntttt: this.getDependency( 'material', primitives[ i ].material );nntttpending.push( material );nntt}nnttreturn Promise.all( pending ).then( function ( originalMaterials ) {nntttreturn parser.loadGeometries( primitives ).then( function ( geometries ) {nnttttvar meshes = [];nnttttfor ( var i = 0, il = geometries.length; i < il; i ++ ) {nntttttvar geometry = geometries[ i ];ntttttvar primitive = primitives[ i ];nnttttt// 1. create Meshnntttttvar mesh;nntttttvar material = originalMaterials[ i ];nntttttif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLES ||nttttttprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ||nttttttprimitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ||nttttttprimitive.mode === undefined ) {nntttttt// .isSkinnedMesh isn't in glTF spec. See .markDefs()nttttttmesh = meshDef.isSkinnedMesh === truenttttttt? new SkinnedMesh( geometry, material )nttttttt: new Mesh( geometry, material );nnttttttif ( mesh.isSkinnedMesh === true && ! mesh.geometry.attributes.skinWeight.normalized ) {nnttttttt// we normalize floating point skin weight array to fix malformed assets (see #15319)nttttttt// it's important to skip this for non-float32 data since normalizeSkinWeights assumes non-normalized inputsntttttttmesh.normalizeSkinWeights();nntttttt}nnttttttif ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_STRIP ) {nntttttttmesh.drawMode = TriangleStripDrawMode;nntttttt} else if ( primitive.mode === WEBGL_CONSTANTS.TRIANGLE_FAN ) {nntttttttmesh.drawMode = TriangleFanDrawMode;nntttttt}nnttttt} else if ( primitive.mode === WEBGL_CONSTANTS.LINES ) {nnttttttmesh = new LineSegments( geometry, material );nnttttt} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_STRIP ) {nnttttttmesh = new Line( geometry, material );nnttttt} else if ( primitive.mode === WEBGL_CONSTANTS.LINE_LOOP ) {nnttttttmesh = new LineLoop( geometry, material );nnttttt} else if ( primitive.mode === WEBGL_CONSTANTS.POINTS ) {nnttttttmesh = new Points( geometry, material );nnttttt} else {nnttttttthrow new Error( 'THREE.GLTFLoader: Primitive mode unsupported: ' + primitive.mode );nnttttt}nntttttif ( Object.keys( mesh.geometry.morphAttributes ).length > 0 ) {nnttttttupdateMorphTargets( mesh, meshDef );nnttttt}nntttttmesh.name = meshDef.name || ( 'mesh_' + meshIndex );nntttttif ( geometries.length > 1 ) mesh.name += '_' + i;nntttttassignExtrasToUserData( mesh, meshDef );nntttttparser.assignFinalMaterial( mesh );nntttttmeshes.push( mesh );nntttt}nnttttif ( meshes.length === 1 ) {nntttttreturn meshes[ 0 ];nntttt}nnttttvar group = new Group();nnttttfor ( var i = 0, il = meshes.length; i < il; i ++ ) {nntttttgroup.add( meshes[ i ] );nntttt}nnttttreturn group;nnttt} );nntt} );nnt};nnt/**nt * Specification: github.com/KhronosGroup/glTF/tree/master/specification/2.0#camerasnt * @param {number} cameraIndexnt * @return {Promise<THREE.Camera>}nt */ntGLTFParser.prototype.loadCamera = function ( cameraIndex ) {nnttvar camera;nttvar cameraDef = this.json.cameras[ cameraIndex ];nttvar params = cameraDef[ cameraDef.type ];nnttif ( ! params ) {nntttconsole.warn( 'THREE.GLTFLoader: Missing camera parameters.' );ntttreturn;nntt}nnttif ( cameraDef.type === 'perspective' ) {nntttcamera = new PerspectiveCamera( _Math.radToDeg( params.yfov ), params.aspectRatio || 1, params.znear || 1, params.zfar || 2e6 );nntt} else if ( cameraDef.type === 'orthographic' ) {nntttcamera = new OrthographicCamera( params.xmag / - 2, params.xmag / 2, params.ymag / 2, params.ymag / - 2, params.znear, params.zfar );nntt}nnttif ( cameraDef.name !== undefined ) camera.name = cameraDef.name;nnttassignExtrasToUserData( camera, cameraDef );nnttreturn Promise.resolve( camera );nnt};nnt/**nt * Specification: github.com/KhronosGroup/glTF/tree/master/specification/2.0#skinsnt * @param {number} skinIndexnt * @return {Promise<Object>}nt */ntGLTFParser.prototype.loadSkin = function ( skinIndex ) {nnttvar skinDef = this.json.skins[ skinIndex ];nnttvar skinEntry = { joints: skinDef.joints };nnttif ( skinDef.inverseBindMatrices === undefined ) {nntttreturn Promise.resolve( skinEntry );nntt}nnttreturn this.getDependency( 'accessor', skinDef.inverseBindMatrices ).then( function ( accessor ) {nntttskinEntry.inverseBindMatrices = accessor;nntttreturn skinEntry;nntt} );nnt};nnt/**nt * Specification: github.com/KhronosGroup/glTF/tree/master/specification/2.0#animationsnt * @param {number} animationIndexnt * @return {Promise<AnimationClip>}nt */ntGLTFParser.prototype.loadAnimation = function ( animationIndex ) {nnttvar json = this.json;nnttvar animationDef = json.animations[ animationIndex ];nnttvar pendingNodes = [];nttvar pendingInputAccessors = [];nttvar pendingOutputAccessors = [];nttvar pendingSamplers = [];nttvar pendingTargets = [];nnttfor ( var i = 0, il = animationDef.channels.length; i < il; i ++ ) {nntttvar channel = animationDef.channels[ i ];ntttvar sampler = animationDef.samplers[ channel.sampler ];ntttvar target = channel.target;ntttvar name = target.node !== undefined ? target.node : target.id; // NOTE: target.id is deprecated.ntttvar input = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.input ] : sampler.input;ntttvar output = animationDef.parameters !== undefined ? animationDef.parameters[ sampler.output ] : sampler.output;nntttpendingNodes.push( this.getDependency( 'node', name ) );ntttpendingInputAccessors.push( this.getDependency( 'accessor', input ) );ntttpendingOutputAccessors.push( this.getDependency( 'accessor', output ) );ntttpendingSamplers.push( sampler );ntttpendingTargets.push( target );nntt}nnttreturn Promise.all( [nntttPromise.all( pendingNodes ),ntttPromise.all( pendingInputAccessors ),ntttPromise.all( pendingOutputAccessors ),ntttPromise.all( pendingSamplers ),ntttPromise.all( pendingTargets )nntt] ).then( function ( dependencies ) {nntttvar nodes = dependencies[ 0 ];ntttvar inputAccessors = dependencies[ 1 ];ntttvar outputAccessors = dependencies[ 2 ];ntttvar samplers = dependencies[ 3 ];ntttvar targets = dependencies[ 4 ];nntttvar tracks = [];nntttfor ( var i = 0, il = nodes.length; i < il; i ++ ) {nnttttvar node = nodes[ i ];nttttvar inputAccessor = inputAccessors[ i ];nttttvar outputAccessor = outputAccessors[ i ];nttttvar sampler = samplers[ i ];nttttvar target = targets[ i ];nnttttif ( node === undefined ) continue;nnttttnode.updateMatrix();nttttnode.matrixAutoUpdate = true;nnttttvar TypedKeyframeTrack;nnttttswitch ( PATH_PROPERTIES[ target.path ] ) {nntttttcase PATH_PROPERTIES.weights:nnttttttTypedKeyframeTrack = NumberKeyframeTrack;nttttttbreak;nntttttcase PATH_PROPERTIES.rotation:nnttttttTypedKeyframeTrack = QuaternionKeyframeTrack;nttttttbreak;nntttttcase PATH_PROPERTIES.position:ntttttcase PATH_PROPERTIES.scale:ntttttdefault:nnttttttTypedKeyframeTrack = VectorKeyframeTrack;nttttttbreak;nntttt}nnttttvar targetName = node.name ? node.name : node.uuid;nnttttvar interpolation = sampler.interpolation !== undefined ? INTERPOLATION[ sampler.interpolation ] : InterpolateLinear;nnttttvar targetNames = [];nnttttif ( PATH_PROPERTIES[ target.path ] === PATH_PROPERTIES.weights ) {nnttttt// Node may be a Group (glTF mesh with several primitives) or a Mesh.ntttttnode.traverse( function ( object ) {nnttttttif ( object.isMesh === true && object.morphTargetInfluences ) {nnttttttttargetNames.push( object.name ? object.name : object.uuid );nntttttt}nnttttt} );nntttt} else {nnttttttargetNames.push( targetName );nntttt}nnttttvar outputArray = outputAccessor.array;nnttttif ( outputAccessor.normalized ) {nntttttvar scale;nntttttif ( outputArray.constructor === Int8Array ) {nnttttttscale = 1 / 127;nnttttt} else if ( outputArray.constructor === Uint8Array ) {nnttttttscale = 1 / 255;nnttttt} else if ( outputArray.constructor == Int16Array ) {nnttttttscale = 1 / 32767;nnttttt} else if ( outputArray.constructor === Uint16Array ) {nnttttttscale = 1 / 65535;nnttttt} else {nnttttttthrow new Error( 'THREE.GLTFLoader: Unsupported output accessor component type.' );nnttttt}nntttttvar scaled = new Float32Array( outputArray.length );nntttttfor ( var j = 0, jl = outputArray.length; j < jl; j ++ ) {nnttttttscaled[ j ] = outputArray[ j ] * scale;nnttttt}nntttttoutputArray = scaled;nntttt}nnttttfor ( var j = 0, jl = targetNames.length; j < jl; j ++ ) {nntttttvar track = new TypedKeyframeTrack(ntttttttargetNames[ j ] + '.' + PATH_PROPERTIES[ target.path ],nttttttinputAccessor.array,nttttttoutputArray,nttttttinterpolationnttttt);nnttttt// Override interpolation with custom factory method.ntttttif ( sampler.interpolation === 'CUBICSPLINE' ) {nntttttttrack.createInterpolant = function InterpolantFactoryMethodGLTFCubicSpline( result ) {nnttttttt// A CUBICSPLINE keyframe in glTF has three output values for each input value,nttttttt// representing inTangent, splineVertex, and outTangent. As a result, track.getValueSize()nttttttt// must be divided by three to get the interpolant's sampleSize argument.nntttttttreturn new GLTFCubicSplineInterpolant( this.times, this.values, this.getValueSize() / 3, result );nntttttt};nntttttt// Mark as CUBICSPLINE. `track.getInterpolation()` doesn't support custom interpolants.ntttttttrack.createInterpolant.isInterpolantFactoryMethodGLTFCubicSpline = true;nnttttt}nnttttttracks.push( track );nntttt}nnttt}nntttvar name = animationDef.name !== undefined ? animationDef.name : 'animation_' + animationIndex;nntttreturn new AnimationClip( name, undefined, tracks );nntt} );nnt};nnt/**nt * Specification: github.com/KhronosGroup/glTF/tree/master/specification/2.0#nodes-and-hierarchynt * @param {number} nodeIndexnt * @return {Promise<Object3D>}nt */ntGLTFParser.prototype.loadNode = function ( nodeIndex ) {nnttvar json = this.json;nttvar extensions = this.extensions;nttvar parser = this;nnttvar meshReferences = json.meshReferences;nttvar meshUses = json.meshUses;nnttvar nodeDef = json.nodes[ nodeIndex ];nnttreturn ( function () {nntttvar pending = [];nntttif ( nodeDef.mesh !== undefined ) {nnttttpending.push( parser.getDependency( 'mesh', nodeDef.mesh ).then( function ( mesh ) {nntttttvar node;nntttttif ( meshReferences[ nodeDef.mesh ] > 1 ) {nnttttttvar instanceNum = meshUses[ nodeDef.mesh ] ++;nnttttttnode = mesh.clone();nttttttnode.name += 'instance' + instanceNum;nntttttt// onBeforeRender copy for Specular-Glossinessnttttttnode.onBeforeRender = mesh.onBeforeRender;nnttttttfor ( var i = 0, il = node.children.length; i < il; i ++ ) {nntttttttnode.children[ i ].name += 'instance' + instanceNum;ntttttttnode.children[ i ].onBeforeRender = mesh.children[ i ].onBeforeRender;nntttttt}nnttttt} else {nnttttttnode = mesh;nnttttt}nnttttt// if weights are provided on the node, override weights on the mesh.ntttttif ( nodeDef.weights !== undefined ) {nnttttttnode.traverse( function ( o ) {nntttttttif ( ! o.isMesh ) return;nntttttttfor ( var i = 0, il = nodeDef.weights.length; i < il; i ++ ) {nntttttttto.morphTargetInfluences[ i ] = nodeDef.weights[ i ];nnttttttt}nntttttt} );nnttttt}nntttttreturn node;nntttt} ) );nnttt}nntttif ( nodeDef.camera !== undefined ) {nnttttpending.push( parser.getDependency( 'camera', nodeDef.camera ) );nnttt}nntttif ( nodeDef.extensionsntttt&& nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ]ntttt&& nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ].light !== undefined ) {nnttttpending.push( parser.getDependency( 'light', nodeDef.extensions[ EXTENSIONS.KHR_LIGHTS_PUNCTUAL ].light ) );nnttt}nntttreturn Promise.all( pending );nntt}() ).then( function ( objects ) {nntttvar node;nnttt// .isBone isn't in glTF spec. See .markDefsntttif ( nodeDef.isBone === true ) {nnttttnode = new Bone();nnttt} else if ( objects.length > 1 ) {nnttttnode = new Group();nnttt} else if ( objects.length === 1 ) {nnttttnode = objects[ 0 ];nnttt} else {nnttttnode = new Object3D();nnttt}nntttif ( node !== objects[ 0 ] ) {nnttttfor ( var i = 0, il = objects.length; i < il; i ++ ) {nntttttnode.add( objects[ i ] );nntttt}nnttt}nntttif ( nodeDef.name !== undefined ) {nnttttnode.userData.name = nodeDef.name;nttttnode.name = PropertyBinding.sanitizeNodeName( nodeDef.name );nnttt}nntttassignExtrasToUserData( node, nodeDef );nntttif ( nodeDef.extensions ) addUnknownExtensionsToUserData( extensions, node, nodeDef );nntttif ( nodeDef.matrix !== undefined ) {nnttttvar matrix = new Matrix4();nttttmatrix.fromArray( nodeDef.matrix );nttttnode.applyMatrix( matrix );nnttt} else {nnttttif ( nodeDef.translation !== undefined ) {nntttttnode.position.fromArray( nodeDef.translation );nntttt}nnttttif ( nodeDef.rotation !== undefined ) {nntttttnode.quaternion.fromArray( nodeDef.rotation );nntttt}nnttttif ( nodeDef.scale !== undefined ) {nntttttnode.scale.fromArray( nodeDef.scale );nntttt}nnttt}nntttreturn node;nntt} );nnt};nnt/**nt * Specification: github.com/KhronosGroup/glTF/tree/master/specification/2.0#scenesnt * @param {number} sceneIndexnt * @return {Promise<Scene>}nt */ntGLTFParser.prototype.loadScene = function () {nntt// scene node hierachy buildernnttfunction buildNodeHierachy( nodeId, parentObject, json, parser ) {nntttvar nodeDef = json.nodes[ nodeId ];nntttreturn parser.getDependency( 'node', nodeId ).then( function ( node ) {nnttttif ( nodeDef.skin === undefined ) return node;nntttt// build skeleton here as wellnnttttvar skinEntry;nnttttreturn parser.getDependency( 'skin', nodeDef.skin ).then( function ( skin ) {nntttttskinEntry = skin;nntttttvar pendingJoints = [];nntttttfor ( var i = 0, il = skinEntry.joints.length; i < il; i ++ ) {nnttttttpendingJoints.push( parser.getDependency( 'node', skinEntry.joints[ i ] ) );nnttttt}nntttttreturn Promise.all( pendingJoints );nntttt} ).then( function ( jointNodes ) {nntttttnode.traverse( function ( mesh ) {nnttttttif ( ! mesh.isMesh ) return;nnttttttvar bones = [];nttttttvar boneInverses = [];nnttttttfor ( var j = 0, jl = jointNodes.length; j < jl; j ++ ) {nntttttttvar jointNode = jointNodes[ j ];nntttttttif ( jointNode ) {nnttttttttbones.push( jointNode );nnttttttttvar mat = new Matrix4();nnttttttttif ( skinEntry.inverseBindMatrices !== undefined ) {nntttttttttmat.fromArray( skinEntry.inverseBindMatrices.array, j * 16 );nntttttttt}nnttttttttboneInverses.push( mat );nnttttttt} else {nnttttttttconsole.warn( 'THREE.GLTFLoader: Joint "%s" could not be found.', skinEntry.joints[ j ] );nnttttttt}nntttttt}nnttttttmesh.bind( new Skeleton( bones, boneInverses ), mesh.matrixWorld );nnttttt} );nntttttreturn node;nntttt} );nnttt} ).then( function ( node ) {nntttt// build node hierachynnttttparentObject.add( node );nnttttvar pending = [];nnttttif ( nodeDef.children ) {nntttttvar children = nodeDef.children;nntttttfor ( var i = 0, il = children.length; i < il; i ++ ) {nnttttttvar child = children[ i ];nttttttpending.push( buildNodeHierachy( child, node, json, parser ) );nnttttt}nntttt}nnttttreturn Promise.all( pending );nnttt} );nntt}nnttreturn function loadScene( sceneIndex ) {nntttvar json = this.json;ntttvar extensions = this.extensions;ntttvar sceneDef = this.json.scenes[ sceneIndex ];ntttvar parser = this;nntttvar scene = new Scene();ntttif ( sceneDef.name !== undefined ) scene.name = sceneDef.name;nntttassignExtrasToUserData( scene, sceneDef );nntttif ( sceneDef.extensions ) addUnknownExtensionsToUserData( extensions, scene, sceneDef );nntttvar nodeIds = sceneDef.nodes || [];nntttvar pending = [];nntttfor ( var i = 0, il = nodeIds.length; i < il; i ++ ) {nnttttpending.push( buildNodeHierachy( nodeIds[ i ], scene, json, parser ) );nnttt}nntttreturn Promise.all( pending ).then( function () {nnttttreturn scene;nnttt} );nntt};nnt}();nntreturn GLTFLoader;nn} )();nnexport { GLTFLoader };”]},“metadata”:{},“sourceType”:“module”}