123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422 |
- /*global define*/
- define([
- '../Core/defaultValue',
- '../Core/defined'
- ], function(
- defaultValue,
- defined) {
- "use strict";
- function accessorDefaults(gltf) {
- if (!defined(gltf.accessors)) {
- gltf.accessors = {};
- }
- var accessors = gltf.accessors;
- for (var name in accessors) {
- if (accessors.hasOwnProperty(name)) {
- var accessor = accessors[name];
- accessor.byteStride = defaultValue(accessor.byteStride, 0);
- }
- }
- }
- function animationDefaults(gltf) {
- if (!defined(gltf.animations)) {
- gltf.animations = {};
- }
- var animations = gltf.animations;
- for (var name in animations) {
- if (animations.hasOwnProperty(name)) {
- var animation = animations[name];
- if (!defined(animation.channels)) {
- animation.channels = [];
- }
- if (!defined(animation.parameters)) {
- animation.parameters = {};
- }
- if (!defined(animation.samplers)) {
- animation.samplers = {};
- }
- var samplers = animations.samplers;
- for (var samplerName in samplers) {
- if (samplers.hasOwnProperty(samplerName)) {
- var sampler = samplers[samplerName];
- sampler.interpolation = defaultValue(sampler.interpolation, 'LINEAR');
- }
- }
- }
- }
- }
- function assetDefaults(gltf) {
- if (!defined(gltf.asset)) {
- gltf.asset = {};
- }
- gltf.asset.premultipliedAlpha = defaultValue(gltf.asset.premultipliedAlpha, false);
- }
- function bufferDefaults(gltf) {
- if (!defined(gltf.buffers)) {
- gltf.buffers = {};
- }
- var buffers = gltf.buffers;
- for (var name in buffers) {
- if (buffers.hasOwnProperty(name)) {
- var buffer = buffers[name];
- buffer.type = defaultValue(buffer.type, 'arraybuffer');
- }
- }
- }
- function bufferViewDefaults(gltf) {
- if (!defined(gltf.bufferViews)) {
- gltf.bufferViews = {};
- }
- }
- function cameraDefaults(gltf) {
- if (!defined(gltf.cameras)) {
- gltf.cameras = {};
- }
- }
- function imageDefaults(gltf) {
- if (!defined(gltf.images)) {
- gltf.images = {};
- }
- }
- function lightDefaults(gltf) {
- if (!defined(gltf.lights)) {
- gltf.lights = {};
- }
- var lights = gltf.lights;
- for (var name in lights) {
- if (lights.hasOwnProperty(name)) {
- var light = lights[name];
- if (light.type === 'ambient') {
- if (!defined(light.ambient)) {
- light.ambient = {};
- }
- var ambientLight = light.ambient;
- if (!defined(ambientLight.color)) {
- ambientLight.color = [1.0, 1.0, 1.0];
- }
- } else if (light.type === 'directional') {
- if (!defined(light.directional)) {
- light.directional = {};
- }
- var directionalLight = light.directional;
- if (!defined(directionalLight.color)) {
- directionalLight.color = [1.0, 1.0, 1.0];
- }
- } else if (light.type === 'point') {
- if (!defined(light.point)) {
- light.point = {};
- }
- var pointLight = light.point;
- if (!defined(pointLight.color)) {
- pointLight.color = [1.0, 1.0, 1.0];
- }
- pointLight.constantAttenuation = defaultValue(pointLight.constantAttenuation, 1.0);
- pointLight.linearAttenuation = defaultValue(pointLight.linearAttenuation, 0.0);
- pointLight.quadraticAttenuation = defaultValue(pointLight.quadraticAttenuation, 0.0);
- } else if (light.type === 'spot') {
- if (!defined(light.spot)) {
- light.spot = {};
- }
- var spotLight = light.spot;
- if (!defined(spotLight.color)) {
- spotLight.color = [1.0, 1.0, 1.0];
- }
- spotLight.constantAttenuation = defaultValue(spotLight.constantAttenuation, 1.0);
- spotLight.fallOffAngle = defaultValue(spotLight.fallOffAngle, 3.14159265);
- spotLight.fallOffExponent = defaultValue(spotLight.fallOffExponent, 0.0);
- spotLight.linearAttenuation = defaultValue(spotLight.linearAttenuation, 0.0);
- spotLight.quadraticAttenuation = defaultValue(spotLight.quadraticAttenuation, 0.0);
- }
- }
- }
- }
- function materialDefaults(gltf) {
- if (!defined(gltf.materials)) {
- gltf.materials = {};
- }
- var materials = gltf.materials;
- for (var name in materials) {
- if (materials.hasOwnProperty(name)) {
- var instanceTechnique = materials[name].instanceTechnique;
- if (!defined(instanceTechnique.values)) {
- instanceTechnique.values = {};
- }
- }
- }
- }
- function meshDefaults(gltf) {
- if (!defined(gltf.meshes)) {
- gltf.meshes = {};
- }
- var meshes = gltf.meshes;
- for (var name in meshes) {
- if (meshes.hasOwnProperty(name)) {
- var mesh = meshes[name];
- if (!defined(mesh.primitives)) {
- mesh.primitives = [];
- }
- var primitives = mesh.primitives.length;
- var length = primitives.length;
- for (var i = 0; i < length; ++i) {
- var primitive = primitives[i];
- if (!defined(primitive.attributes)) {
- primitive.attributes = {};
- }
- primitive.primitive = defaultValue(primitive.primitive, WebGLRenderingContext.TRIANGLES);
- }
- }
- }
- }
- function nodeDefaults(gltf) {
- if (!defined(gltf.nodes)) {
- gltf.nodes = {};
- }
- var nodes = gltf.nodes;
- for (var name in nodes) {
- if (nodes.hasOwnProperty(name)) {
- var node = nodes[name];
- if (!defined(node.children)) {
- node.children = [];
- }
- if (!defined(node.matrix)) {
- // Add default identity matrix if there is no matrix property and no TRS properties
- if (!(defined(node.translation) && defined(node.rotation) && defined(node.scale))) {
- 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
- ];
- } else {
- if (!defined(node.translation)) {
- node.translation = [0.0, 0.0, 0.0];
- }
- if (!defined(node.rotation)) {
- // GLTF_SPEC: What is the default? https://github.com/KhronosGroup/glTF/issues/197
- node.rotation = [1.0, 0.0, 0.0, 0.0];
- }
- if (!defined(node.scale)) {
- node.scale = [1.0, 1.0, 1.0];
- }
- }
- }
- }
- }
- }
- function programDefaults(gltf) {
- if (!defined(gltf.programs)) {
- gltf.programs = {};
- }
- var programs = gltf.programs;
- for (var name in programs) {
- if (programs.hasOwnProperty(name)) {
- var program = programs[name];
- if (!defined(program.attributes)) {
- program.attributes = [];
- }
- }
- }
- }
- function samplerDefaults(gltf) {
- if (!defined(gltf.samplers)) {
- gltf.samplers = {};
- }
- var samplers = gltf.samplers;
- for (var name in samplers) {
- if (samplers.hasOwnProperty(name)) {
- var sampler = samplers[name];
- sampler.magFilter = defaultValue(sampler.magFilter, WebGLRenderingContext.LINEAR);
- sampler.minFilter = defaultValue(sampler.minFilter, WebGLRenderingContext.NEAREST_MIPMAP_LINEAR);
- sampler.wrapS = defaultValue(sampler.wrapS, WebGLRenderingContext.REPEAT);
- sampler.wrapT = defaultValue(sampler.wrapT, WebGLRenderingContext.REPEAT);
- }
- }
- }
- function sceneDefaults(gltf) {
- if (!defined(gltf.scenes)) {
- gltf.scenes = {};
- }
- var scenes = gltf.scenes;
- for (var name in scenes) {
- if (scenes.hasOwnProperty(name)) {
- var scene = scenes[name];
- if (!defined(scene.node)) {
- scene.node = [];
- }
- }
- }
- }
- function shaderDefaults(gltf) {
- if (!defined(gltf.shaders)) {
- gltf.shaders = {};
- }
- }
- function skinDefaults(gltf) {
- if (!defined(gltf.skins)) {
- gltf.skins = {};
- }
- var skins = gltf.skins;
- for (var name in skins) {
- if (skins.hasOwnProperty(name)) {
- var skin = skins[name];
- if (defined(skin.bindShapeMatrix)) {
- skin.bindShapeMatrix = [
- 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
- ];
- }
- }
- }
- }
- function statesDefaults(states) {
- if (!defined(states.enable)) {
- states.enable = [];
- }
- if (!defined(states.disable)) {
- states.disable = [];
- }
- }
- function techniqueDefaults(gltf) {
- if (!defined(gltf.techniques)) {
- gltf.techniques = {};
- }
- var techniques = gltf.techniques;
- for (var name in techniques) {
- if (techniques.hasOwnProperty(name)) {
- var technique = techniques[name];
- if (!defined(technique.parameters)) {
- technique.parameters = {};
- }
- var passes = technique.passes;
- for (var passName in passes) {
- if (passes.hasOwnProperty(passName)) {
- var pass = passes[passName];
- var instanceProgram = pass.instanceProgram;
- if (!defined(instanceProgram.attributes)) {
- instanceProgram.attributes = {};
- }
- if (!defined(instanceProgram.uniforms)) {
- instanceProgram.uniforms = {};
- }
- if (!defined(pass.states)) {
- pass.states = {};
- }
- statesDefaults(pass.states);
- }
- }
- }
- }
- }
- function textureDefaults(gltf) {
- if (!defined(gltf.textures)) {
- gltf.textures = {};
- }
- var textures = gltf.textures;
- for (var name in textures) {
- if (textures.hasOwnProperty(name)) {
- var texture = textures[name];
- texture.format = defaultValue(texture.format, WebGLRenderingContext.RGBA);
- texture.internalFormat = defaultValue(texture.internalFormat, texture.format);
- texture.target = defaultValue(texture.target, WebGLRenderingContext.TEXTURE_2D);
- texture.type = defaultValue(texture.type, WebGLRenderingContext.UNSIGNED_BYTE);
- }
- }
- }
- /**
- * Modifies gltf in place.
- *
- * @private
- */
- var gltfDefaults = function(gltf) {
- if (!defined(gltf)) {
- return undefined;
- }
- if (!defined(gltf.allExtensions)) {
- gltf.allExtensions = [];
- }
- accessorDefaults(gltf);
- animationDefaults(gltf);
- assetDefaults(gltf);
- bufferDefaults(gltf);
- bufferViewDefaults(gltf);
- cameraDefaults(gltf);
- imageDefaults(gltf);
- lightDefaults(gltf);
- materialDefaults(gltf);
- meshDefaults(gltf);
- nodeDefaults(gltf);
- programDefaults(gltf);
- samplerDefaults(gltf);
- sceneDefaults(gltf);
- shaderDefaults(gltf);
- skinDefaults(gltf);
- techniqueDefaults(gltf);
- gltf.profile = defaultValue(gltf.profile, 'WebGL 1.0.2');
- gltf.version = defaultValue(gltf.version, '1.0');
- textureDefaults(gltf);
- return gltf;
- };
- return gltfDefaults;
- });
|