| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227 | 
							- import addToArray from "./addToArray.js";
 
- import ForEach from "./ForEach.js";
 
- import getAccessorByteStride from "./getAccessorByteStride.js";
 
- import defaultValue from "../../Core/defaultValue.js";
 
- import defined from "../../Core/defined.js";
 
- import WebGLConstants from "../../Core/WebGLConstants.js";
 
- /**
 
-  * Adds default glTF values if they don't exist.
 
-  *
 
-  * @param {Object} gltf A javascript object containing a glTF asset.
 
-  * @returns {Object} The modified glTF.
 
-  *
 
-  * @private
 
-  */
 
- function addDefaults(gltf) {
 
-   ForEach.accessor(gltf, function (accessor) {
 
-     if (defined(accessor.bufferView)) {
 
-       accessor.byteOffset = defaultValue(accessor.byteOffset, 0);
 
-     }
 
-   });
 
-   ForEach.bufferView(gltf, function (bufferView) {
 
-     if (defined(bufferView.buffer)) {
 
-       bufferView.byteOffset = defaultValue(bufferView.byteOffset, 0);
 
-     }
 
-   });
 
-   ForEach.mesh(gltf, function (mesh) {
 
-     ForEach.meshPrimitive(mesh, function (primitive) {
 
-       primitive.mode = defaultValue(primitive.mode, WebGLConstants.TRIANGLES);
 
-       if (!defined(primitive.material)) {
 
-         if (!defined(gltf.materials)) {
 
-           gltf.materials = [];
 
-         }
 
-         const defaultMaterial = {
 
-           name: "default",
 
-         };
 
-         primitive.material = addToArray(gltf.materials, defaultMaterial);
 
-       }
 
-     });
 
-   });
 
-   ForEach.accessorContainingVertexAttributeData(gltf, function (accessorId) {
 
-     const accessor = gltf.accessors[accessorId];
 
-     const bufferViewId = accessor.bufferView;
 
-     accessor.normalized = defaultValue(accessor.normalized, false);
 
-     if (defined(bufferViewId)) {
 
-       const bufferView = gltf.bufferViews[bufferViewId];
 
-       bufferView.byteStride = getAccessorByteStride(gltf, accessor);
 
-       bufferView.target = WebGLConstants.ARRAY_BUFFER;
 
-     }
 
-   });
 
-   ForEach.accessorContainingIndexData(gltf, function (accessorId) {
 
-     const accessor = gltf.accessors[accessorId];
 
-     const bufferViewId = accessor.bufferView;
 
-     if (defined(bufferViewId)) {
 
-       const bufferView = gltf.bufferViews[bufferViewId];
 
-       bufferView.target = WebGLConstants.ELEMENT_ARRAY_BUFFER;
 
-     }
 
-   });
 
-   ForEach.material(gltf, function (material) {
 
-     const extensions = defaultValue(
 
-       material.extensions,
 
-       defaultValue.EMPTY_OBJECT
 
-     );
 
-     const materialsCommon = extensions.KHR_materials_common;
 
-     if (defined(materialsCommon)) {
 
-       const technique = materialsCommon.technique;
 
-       const values = defined(materialsCommon.values)
 
-         ? materialsCommon.values
 
-         : {};
 
-       materialsCommon.values = values;
 
-       values.ambient = defined(values.ambient)
 
-         ? values.ambient
 
-         : [0.0, 0.0, 0.0, 1.0];
 
-       values.emission = defined(values.emission)
 
-         ? values.emission
 
-         : [0.0, 0.0, 0.0, 1.0];
 
-       values.transparency = defaultValue(values.transparency, 1.0);
 
-       values.transparent = defaultValue(values.transparent, false);
 
-       values.doubleSided = defaultValue(values.doubleSided, false);
 
-       if (technique !== "CONSTANT") {
 
-         values.diffuse = defined(values.diffuse)
 
-           ? values.diffuse
 
-           : [0.0, 0.0, 0.0, 1.0];
 
-         if (technique !== "LAMBERT") {
 
-           values.specular = defined(values.specular)
 
-             ? values.specular
 
-             : [0.0, 0.0, 0.0, 1.0];
 
-           values.shininess = defaultValue(values.shininess, 0.0);
 
-         }
 
-       }
 
-       return;
 
-     }
 
-     material.emissiveFactor = defaultValue(
 
-       material.emissiveFactor,
 
-       [0.0, 0.0, 0.0]
 
-     );
 
-     material.alphaMode = defaultValue(material.alphaMode, "OPAQUE");
 
-     material.doubleSided = defaultValue(material.doubleSided, false);
 
-     if (material.alphaMode === "MASK") {
 
-       material.alphaCutoff = defaultValue(material.alphaCutoff, 0.5);
 
-     }
 
-     const techniquesExtension = extensions.KHR_techniques_webgl;
 
-     if (defined(techniquesExtension)) {
 
-       ForEach.materialValue(material, function (materialValue) {
 
-         // Check if material value is a TextureInfo object
 
-         if (defined(materialValue.index)) {
 
-           addTextureDefaults(materialValue);
 
-         }
 
-       });
 
-     }
 
-     addTextureDefaults(material.emissiveTexture);
 
-     addTextureDefaults(material.normalTexture);
 
-     addTextureDefaults(material.occlusionTexture);
 
-     const pbrMetallicRoughness = material.pbrMetallicRoughness;
 
-     if (defined(pbrMetallicRoughness)) {
 
-       pbrMetallicRoughness.baseColorFactor = defaultValue(
 
-         pbrMetallicRoughness.baseColorFactor,
 
-         [1.0, 1.0, 1.0, 1.0]
 
-       );
 
-       pbrMetallicRoughness.metallicFactor = defaultValue(
 
-         pbrMetallicRoughness.metallicFactor,
 
-         1.0
 
-       );
 
-       pbrMetallicRoughness.roughnessFactor = defaultValue(
 
-         pbrMetallicRoughness.roughnessFactor,
 
-         1.0
 
-       );
 
-       addTextureDefaults(pbrMetallicRoughness.baseColorTexture);
 
-       addTextureDefaults(pbrMetallicRoughness.metallicRoughnessTexture);
 
-     }
 
-     const pbrSpecularGlossiness =
 
-       extensions.KHR_materials_pbrSpecularGlossiness;
 
-     if (defined(pbrSpecularGlossiness)) {
 
-       pbrSpecularGlossiness.diffuseFactor = defaultValue(
 
-         pbrSpecularGlossiness.diffuseFactor,
 
-         [1.0, 1.0, 1.0, 1.0]
 
-       );
 
-       pbrSpecularGlossiness.specularFactor = defaultValue(
 
-         pbrSpecularGlossiness.specularFactor,
 
-         [1.0, 1.0, 1.0]
 
-       );
 
-       pbrSpecularGlossiness.glossinessFactor = defaultValue(
 
-         pbrSpecularGlossiness.glossinessFactor,
 
-         1.0
 
-       );
 
-       addTextureDefaults(pbrSpecularGlossiness.specularGlossinessTexture);
 
-     }
 
-   });
 
-   ForEach.animation(gltf, function (animation) {
 
-     ForEach.animationSampler(animation, function (sampler) {
 
-       sampler.interpolation = defaultValue(sampler.interpolation, "LINEAR");
 
-     });
 
-   });
 
-   const animatedNodes = getAnimatedNodes(gltf);
 
-   ForEach.node(gltf, function (node, id) {
 
-     const animated = defined(animatedNodes[id]);
 
-     if (
 
-       animated ||
 
-       defined(node.translation) ||
 
-       defined(node.rotation) ||
 
-       defined(node.scale)
 
-     ) {
 
-       node.translation = defaultValue(node.translation, [0.0, 0.0, 0.0]);
 
-       node.rotation = defaultValue(node.rotation, [0.0, 0.0, 0.0, 1.0]);
 
-       node.scale = defaultValue(node.scale, [1.0, 1.0, 1.0]);
 
-     } else {
 
-       node.matrix = defaultValue(
 
-         node.matrix,
 
-         [
 
-           1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0, 0.0, 0.0,
 
-           0.0, 1.0,
 
-         ]
 
-       );
 
-     }
 
-   });
 
-   ForEach.sampler(gltf, function (sampler) {
 
-     sampler.wrapS = defaultValue(sampler.wrapS, WebGLConstants.REPEAT);
 
-     sampler.wrapT = defaultValue(sampler.wrapT, WebGLConstants.REPEAT);
 
-   });
 
-   if (defined(gltf.scenes) && !defined(gltf.scene)) {
 
-     gltf.scene = 0;
 
-   }
 
-   return gltf;
 
- }
 
- function getAnimatedNodes(gltf) {
 
-   const nodes = {};
 
-   ForEach.animation(gltf, function (animation) {
 
-     ForEach.animationChannel(animation, function (channel) {
 
-       const target = channel.target;
 
-       const nodeId = target.node;
 
-       const path = target.path;
 
-       // Ignore animations that target 'weights'
 
-       if (path === "translation" || path === "rotation" || path === "scale") {
 
-         nodes[nodeId] = true;
 
-       }
 
-     });
 
-   });
 
-   return nodes;
 
- }
 
- function addTextureDefaults(texture) {
 
-   if (defined(texture)) {
 
-     texture.texCoord = defaultValue(texture.texCoord, 0);
 
-   }
 
- }
 
- export default addDefaults;
 
 
  |