提交 3d9a27a7 编写于 作者: M Mr.doob

GLTFLoader: Removed .bind() craziness.

上级 67b4a111
......@@ -132,9 +132,7 @@ THREE.GLTFLoader = ( function () {
function GLTFShader( targetNode, allNodes ) {
var scope = this;
this.boundUniforms = {};
var boundUniforms = {};
// bind each uniform to its source node
......@@ -156,7 +154,7 @@ THREE.GLTFLoader = ( function () {
}
scope.boundUniforms[ uniformId ] = {
boundUniforms[ uniformId ] = {
semantic: uniform.semantic,
sourceNode: sourceNode,
targetNode: targetNode,
......@@ -167,6 +165,7 @@ THREE.GLTFLoader = ( function () {
}
this.boundUniforms = boundUniforms;
this._m4 = new THREE.Matrix4();
}
......@@ -614,6 +613,8 @@ THREE.GLTFLoader = ( function () {
GLTFParser.prototype.parse = function ( callback ) {
var json = this.json;
// Clear the loader cache
this.cache.removeAll();
......@@ -626,7 +627,7 @@ THREE.GLTFLoader = ( function () {
] ).then( function ( dependencies ) {
var scene = dependencies.scenes[ this.json.scene ];
var scene = dependencies.scenes[ json.scene ];
var cameras = [];
......@@ -647,33 +648,39 @@ THREE.GLTFLoader = ( function () {
callback( scene, cameras, animations );
}.bind( this ) );
} );
};
GLTFParser.prototype.loadShaders = function () {
return _each( this.json.shaders, function ( shader ) {
var json = this.json;
var options = this.options;
return _each( json.shaders, function ( shader ) {
return new Promise( function ( resolve ) {
var loader = new THREE.FileLoader();
loader.responseType = 'text';
loader.load( resolveURL( shader.uri, this.options.path ), function ( shaderText ) {
loader.load( resolveURL( shader.uri, options.path ), function ( shaderText ) {
resolve( shaderText );
} );
}.bind( this ) );
} );
}.bind( this ) );
} );
};
GLTFParser.prototype.loadBuffers = function () {
return _each( this.json.buffers, function ( buffer ) {
var json = this.json;
var options = this.options;
return _each( json.buffers, function ( buffer ) {
if ( buffer.type === 'arraybuffer' ) {
......@@ -681,29 +688,31 @@ THREE.GLTFLoader = ( function () {
var loader = new THREE.FileLoader();
loader.responseType = 'arraybuffer';
loader.load( resolveURL( buffer.uri, this.options.path ), function ( buffer ) {
loader.load( resolveURL( buffer.uri, options.path ), function ( buffer ) {
resolve( buffer );
} );
}.bind( this ) );
} );
}
}.bind( this ) );
} );
};
GLTFParser.prototype.loadBufferViews = function () {
var json = this.json;
return this._withDependencies( [
"buffers"
] ).then( function ( dependencies ) {
return _each( this.json.bufferViews, function ( bufferView ) {
return _each( json.bufferViews, function ( bufferView ) {
var arraybuffer = dependencies.buffers[ bufferView.buffer ];
......@@ -711,19 +720,21 @@ THREE.GLTFLoader = ( function () {
} );
}.bind( this ) );
} );
};
GLTFParser.prototype.loadAccessors = function () {
var json = this.json;
return this._withDependencies( [
"bufferViews"
] ).then( function ( dependencies ) {
return _each( this.json.accessors, function ( accessor ) {
return _each( json.accessors, function ( accessor ) {
var arraybuffer = dependencies.bufferViews[ accessor.bufferView ];
var itemSize = WEBGL_TYPE_SIZES[ accessor.type ];
......@@ -754,19 +765,22 @@ THREE.GLTFLoader = ( function () {
} );
}.bind( this ) );
} );
};
GLTFParser.prototype.loadTextures = function () {
return _each( this.json.textures, function ( texture ) {
var json = this.json;
var options = this.options;
return _each( json.textures, function ( texture ) {
if ( texture.source ) {
return new Promise( function ( resolve ) {
var source = this.json.images[ texture.source ];
var source = json.images[ texture.source ];
var textureLoader = THREE.Loader.Handlers.get( source.uri );
......@@ -776,15 +790,15 @@ THREE.GLTFLoader = ( function () {
}
textureLoader.crossOrigin = this.options.crossOrigin || false;
textureLoader.crossOrigin = options.crossOrigin || false;
textureLoader.load( resolveURL( source.uri, this.options.path ), function ( _texture ) {
textureLoader.load( resolveURL( source.uri, options.path ), function ( _texture ) {
_texture.flipY = false;
if ( texture.sampler ) {
var sampler = this.json.samplers[ texture.sampler ];
var sampler = json.samplers[ texture.sampler ];
_texture.magFilter = WEBGL_FILTERS[ sampler.magFilter ];
_texture.minFilter = WEBGL_FILTERS[ sampler.minFilter ];
......@@ -795,22 +809,24 @@ THREE.GLTFLoader = ( function () {
resolve( _texture );
}.bind( this ), undefined, function () {
}, undefined, function () {
resolve();
} );
}.bind( this ) );
} );
}
}.bind( this ) );
} );
};
GLTFParser.prototype.loadMaterials = function () {
var json = this.json;
return this._withDependencies( [
"shaders",
......@@ -818,7 +834,7 @@ THREE.GLTFLoader = ( function () {
] ).then( function ( dependencies ) {
return _each( this.json.materials, function ( material ) {
return _each( json.materials, function ( material ) {
var materialType;
var materialValues = {};
......@@ -830,9 +846,9 @@ THREE.GLTFLoader = ( function () {
khr_material = material.extensions.KHR_materials_common;
} else if ( this.json.extensions && this.json.extensions.KHR_materials_common ) {
} else if ( json.extensions && json.extensions.KHR_materials_common ) {
khr_material = this.json.extensions.KHR_materials_common;
khr_material = json.extensions.KHR_materials_common;
}
......@@ -881,11 +897,11 @@ THREE.GLTFLoader = ( function () {
materialType = DeferredShaderMaterial;
var technique = this.json.techniques[ material.technique ];
var technique = json.techniques[ material.technique ];
materialParams.uniforms = {};
var program = this.json.programs[ technique.program ];
var program = json.programs[ technique.program ];
if ( program ) {
......@@ -1090,14 +1106,16 @@ THREE.GLTFLoader = ( function () {
return _material;
}.bind( this ) );
} );
}.bind( this ) );
} );
};
GLTFParser.prototype.loadMeshes = function () {
var json = this.json;
return this._withDependencies( [
"accessors",
......@@ -1105,7 +1123,7 @@ THREE.GLTFLoader = ( function () {
] ).then( function ( dependencies ) {
return _each( this.json.meshes, function ( mesh ) {
return _each( json.meshes, function ( mesh ) {
var group = new THREE.Object3D();
group.name = mesh.name;
......@@ -1196,13 +1214,15 @@ THREE.GLTFLoader = ( function () {
} );
}.bind( this ) );
} );
};
GLTFParser.prototype.loadCameras = function () {
return _each( this.json.cameras, function ( camera ) {
var json = this.json;
return _each( json.cameras, function ( camera ) {
if ( camera.type == "perspective" && camera.perspective ) {
......@@ -1232,13 +1252,13 @@ THREE.GLTFLoader = ( function () {
}
}.bind( this ) );
} );
};
GLTFParser.prototype.loadSkins = function () {
var scope = this;
var json = this.json;
return this._withDependencies( [
......@@ -1246,7 +1266,7 @@ THREE.GLTFLoader = ( function () {
] ).then( function ( dependencies ) {
return _each( scope.json.skins, function ( skin ) {
return _each( json.skins, function ( skin ) {
var _skin = {
bindShapeMatrix: new THREE.Matrix4().fromArray( skin.bindShapeMatrix ),
......@@ -1264,7 +1284,7 @@ THREE.GLTFLoader = ( function () {
GLTFParser.prototype.loadAnimations = function () {
var scope = this;
var json = this.json;
return this._withDependencies( [
......@@ -1273,7 +1293,7 @@ THREE.GLTFLoader = ( function () {
] ).then( function ( dependencies ) {
return _each( scope.json.animations, function ( animation, animationId ) {
return _each( json.animations, function ( animation, animationId ) {
var interps = [];
......@@ -1322,7 +1342,10 @@ THREE.GLTFLoader = ( function () {
GLTFParser.prototype.loadNodes = function () {
return _each( this.json.nodes, function ( node ) {
var json = this.json;
var scope = this;
return _each( json.nodes, function ( node ) {
var matrix = new THREE.Matrix4();
......@@ -1372,9 +1395,9 @@ THREE.GLTFLoader = ( function () {
return _node;
}.bind( this ) ).then( function ( __nodes ) {
} ).then( function ( __nodes ) {
return this._withDependencies( [
return scope._withDependencies( [
"meshes",
"skins",
......@@ -1385,7 +1408,7 @@ THREE.GLTFLoader = ( function () {
return _each( __nodes, function ( _node, nodeId ) {
var node = this.json.nodes[ nodeId ];
var node = json.nodes[ nodeId ];
if ( node.meshes !== undefined ) {
......@@ -1491,17 +1514,19 @@ THREE.GLTFLoader = ( function () {
return _node;
}.bind( this ) );
} );
}.bind( this ) );
} );
}.bind( this ) );
} );
};
GLTFParser.prototype.loadExtensions = function () {
return _each( this.json.extensions, function ( extension, extensionId ) {
var json = this.json;
return _each( json.extensions, function ( extension, extensionId ) {
switch ( extensionId ) {
......@@ -1563,7 +1588,7 @@ THREE.GLTFLoader = ( function () {
GLTFParser.prototype.loadScenes = function () {
var scope = this;
var json = this.json;
// scene node hierachy builder
......@@ -1572,7 +1597,7 @@ THREE.GLTFLoader = ( function () {
var _node = allNodes[ nodeId ];
parentObject.add( _node );
var node = scope.json.nodes[ nodeId ];
var node = json.nodes[ nodeId ];
if ( node.children ) {
......@@ -1595,7 +1620,7 @@ THREE.GLTFLoader = ( function () {
] ).then( function ( dependencies ) {
return _each( scope.json.scenes, function ( scene ) {
return _each( json.scenes, function ( scene ) {
var _scene = new THREE.Scene();
_scene.name = scene.name;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册