Jelajahi Sumber

More LoadingManager tweaking.

Mr.doob 12 tahun lalu
induk
melakukan
5bc44f0564

+ 15 - 3
build/three.js

@@ -10537,13 +10537,15 @@ THREE.JSONLoader.prototype.parse = function ( json, texturePath ) {
  * @author mrdoob / http://mrdoob.com/
  */
 
-THREE.LoadingManager = function () {
+THREE.LoadingManager = function ( onLoad, onProgress, onError ) {
 
 	var scope = this;
 
 	var loaded = 0, total = 0;
 
-	this.onItemLoad = function () {};
+	this.onLoad = onLoad;
+	this.onProgress = onProgress;
+	this.onError = onError;
 
 	this.itemStart = function ( url ) {
 
@@ -10555,7 +10557,17 @@ THREE.LoadingManager = function () {
 
 		loaded ++;
 
-		scope.onItemLoad( url, loaded, total );
+		if ( scope.onProgress !== undefined ) {
+
+			scope.onProgress( url, loaded, total );
+
+		}
+
+		if ( loaded === total && scope.onLoad !== undefined ) {
+
+			scope.onLoad();
+
+		}
 
 	};
 

+ 1 - 1
build/three.min.js

@@ -213,7 +213,7 @@ THREE.JSONLoader.prototype.parse=function(a,b){var c=new THREE.Geometry,d=void 0
 z[h++],p.b=z[h++],p.c=z[h++],p.d=z[h++],j=4):(p=new THREE.Face3,p.a=z[h++],p.b=z[h++],p.c=z[h++],j=3);g&&(g=z[h++],p.materialIndex=g);g=c.faces.length;if(e)for(e=0;e<H;e++)r=a.uvs[e],m=z[h++],v=r[2*m],m=r[2*m+1],c.faceUvs[e][g]=new THREE.Vector2(v,m);if(f)for(e=0;e<H;e++){r=a.uvs[e];s=[];for(f=0;f<j;f++)m=z[h++],v=r[2*m],m=r[2*m+1],s[f]=new THREE.Vector2(v,m);c.faceVertexUvs[e][g]=s}n&&(n=3*z[h++],f=new THREE.Vector3,f.x=G[n++],f.y=G[n++],f.z=G[n],p.normal=f);if(l)for(e=0;e<j;e++)n=3*z[h++],f=new THREE.Vector3,
 f.x=G[n++],f.y=G[n++],f.z=G[n],p.vertexNormals.push(f);t&&(l=z[h++],l=new THREE.Color(C[l]),p.color=l);if(q)for(e=0;e<j;e++)l=z[h++],l=new THREE.Color(C[l]),p.vertexColors.push(l);c.faces.push(p)}if(a.skinWeights){h=0;for(i=a.skinWeights.length;h<i;h+=2)z=a.skinWeights[h],G=a.skinWeights[h+1],c.skinWeights.push(new THREE.Vector4(z,G,0,0))}if(a.skinIndices){h=0;for(i=a.skinIndices.length;h<i;h+=2)z=a.skinIndices[h],G=a.skinIndices[h+1],c.skinIndices.push(new THREE.Vector4(z,G,0,0))}c.bones=a.bones;
 c.animation=a.animation;if(void 0!==a.morphTargets){h=0;for(i=a.morphTargets.length;h<i;h++){c.morphTargets[h]={};c.morphTargets[h].name=a.morphTargets[h].name;c.morphTargets[h].vertices=[];C=c.morphTargets[h].vertices;H=a.morphTargets[h].vertices;z=0;for(G=H.length;z<G;z+=3)q=new THREE.Vector3,q.x=H[z]*d,q.y=H[z+1]*d,q.z=H[z+2]*d,C.push(q)}}if(void 0!==a.morphColors){h=0;for(i=a.morphColors.length;h<i;h++){c.morphColors[h]={};c.morphColors[h].name=a.morphColors[h].name;c.morphColors[h].colors=[];
-G=c.morphColors[h].colors;C=a.morphColors[h].colors;d=0;for(z=C.length;d<z;d+=3)H=new THREE.Color(16755200),H.setRGB(C[d],C[d+1],C[d+2]),G.push(H)}}c.computeCentroids();c.computeFaceNormals();if(void 0===a.materials)return{geometry:c};d=this.initMaterials(a.materials,b);this.needsTangents(d)&&c.computeTangents();return{geometry:c,materials:d}};THREE.LoadingManager=function(){var a=this,b=0,c=0;this.onItemLoad=function(){};this.itemStart=function(){c++};this.itemEnd=function(d){b++;a.onItemLoad(d,b,c)}};THREE.DefaultLoadingManager=new THREE.LoadingManager;THREE.GeometryLoader=function(a){this.manager=void 0!==a?a:THREE.DefaultLoadingManager};THREE.GeometryLoader.prototype={constructor:THREE.GeometryLoader,load:function(a,b){var c=this,d=new THREE.XHRLoader;d.setCrossOrigin(this.crossOrigin);d.load(a,function(a){b(c.parse(JSON.parse(a)))})},setCrossOrigin:function(a){this.crossOrigin=a},parse:function(){}};THREE.MaterialLoader=function(a){this.manager=void 0!==a?a:THREE.DefaultLoadingManager};
+G=c.morphColors[h].colors;C=a.morphColors[h].colors;d=0;for(z=C.length;d<z;d+=3)H=new THREE.Color(16755200),H.setRGB(C[d],C[d+1],C[d+2]),G.push(H)}}c.computeCentroids();c.computeFaceNormals();if(void 0===a.materials)return{geometry:c};d=this.initMaterials(a.materials,b);this.needsTangents(d)&&c.computeTangents();return{geometry:c,materials:d}};THREE.LoadingManager=function(a,b,c){var d=this,e=0,f=0;this.onLoad=a;this.onProgress=b;this.onError=c;this.itemStart=function(){f++};this.itemEnd=function(a){e++;if(void 0!==d.onProgress)d.onProgress(a,e,f);if(e===f&&void 0!==d.onLoad)d.onLoad()}};THREE.DefaultLoadingManager=new THREE.LoadingManager;THREE.GeometryLoader=function(a){this.manager=void 0!==a?a:THREE.DefaultLoadingManager};THREE.GeometryLoader.prototype={constructor:THREE.GeometryLoader,load:function(a,b){var c=this,d=new THREE.XHRLoader;d.setCrossOrigin(this.crossOrigin);d.load(a,function(a){b(c.parse(JSON.parse(a)))})},setCrossOrigin:function(a){this.crossOrigin=a},parse:function(){}};THREE.MaterialLoader=function(a){this.manager=void 0!==a?a:THREE.DefaultLoadingManager};
 THREE.MaterialLoader.prototype={constructor:THREE.MaterialLoader,load:function(a,b){var c=this,d=new THREE.XHRLoader;d.setCrossOrigin(this.crossOrigin);d.load(a,function(a){b(c.parse(JSON.parse(a)))})},setCrossOrigin:function(a){this.crossOrigin=a},parse:function(a){var b;switch(a.type){case "MeshBasicMaterial":b=new THREE.MeshBasicMaterial({color:a.color,opacity:a.opacity,transparent:a.transparent,wireframe:a.wireframe});break;case "MeshLambertMaterial":b=new THREE.MeshLambertMaterial({color:a.color,
 ambient:a.ambient,emissive:a.emissive,opacity:a.opacity,transparent:a.transparent,wireframe:a.wireframe});break;case "MeshPhongMaterial":b=new THREE.MeshPhongMaterial({color:a.color,ambient:a.ambient,emissive:a.emissive,specular:a.specular,shininess:a.shininess,opacity:a.opacity,transparent:a.transparent,wireframe:a.wireframe});break;case "MeshNormalMaterial":b=new THREE.MeshNormalMaterial({opacity:a.opacity,transparent:a.transparent,wireframe:a.wireframe});break;case "MeshDepthMaterial":b=new THREE.MeshDepthMaterial({opacity:a.opacity,
 transparent:a.transparent,wireframe:a.wireframe})}return b}};THREE.ObjectLoader=function(a){this.manager=void 0!==a?a:THREE.DefaultLoadingManager};

+ 1 - 1
examples/webgl_loader_obj.html

@@ -74,7 +74,7 @@
 				// texture
 
 				var manager = new THREE.LoadingManager();
-				manager.onItemLoad = function ( item, loaded, total ) {
+				manager.onProgress = function ( item, loaded, total ) {
 
 					console.log( item, loaded, total );
 

+ 1 - 1
examples/webgl_loader_scene.html

@@ -188,7 +188,7 @@
 
 			document.addEventListener( 'mousemove', onDocumentMouseMove, false );
 
-			THREE.DefaultLoadingManager.onItemLoad = function ( item, loaded, total ) {
+			THREE.DefaultLoadingManager.onProgress = function ( item, loaded, total ) {
 
 				console.log( item, loaded, total );
 

+ 15 - 3
src/loaders/LoadingManager.js

@@ -2,13 +2,15 @@
  * @author mrdoob / http://mrdoob.com/
  */
 
-THREE.LoadingManager = function () {
+THREE.LoadingManager = function ( onLoad, onProgress, onError ) {
 
 	var scope = this;
 
 	var loaded = 0, total = 0;
 
-	this.onItemLoad = function () {};
+	this.onLoad = onLoad;
+	this.onProgress = onProgress;
+	this.onError = onError;
 
 	this.itemStart = function ( url ) {
 
@@ -20,7 +22,17 @@ THREE.LoadingManager = function () {
 
 		loaded ++;
 
-		scope.onItemLoad( url, loaded, total );
+		if ( scope.onProgress !== undefined ) {
+
+			scope.onProgress( url, loaded, total );
+
+		}
+
+		if ( loaded === total && scope.onLoad !== undefined ) {
+
+			scope.onLoad();
+
+		}
 
 	};