Sfoglia il codice sorgente

Refactored common methods out of JSONLoader into base Loader.

alteredq 14 anni fa
parent
commit
a71b541c48
2 ha cambiato i file con 176 aggiunte e 165 eliminazioni
  1. 9 165
      src/extras/io/JSONLoader.js
  2. 167 0
      src/extras/io/Loader.js

+ 9 - 165
src/extras/io/JSONLoader.js

@@ -5,10 +5,7 @@
 
 THREE.JSONLoader = function ( showStatus ) {
 
-	THREE.Loader.call( this );
-
-	this.showStatus = showStatus;	
-	this.statusDomElement = showStatus ? this.addStatusElement() : null;
+	THREE.Loader.call( this, showStatus );
 	
 };
 
@@ -19,47 +16,6 @@ THREE.JSONLoader.prototype.supr = THREE.Loader.prototype;
 
 THREE.JSONLoader.prototype = {
 
-	addStatusElement: function ( ) {
-		
-		var e = document.createElement( "div" );
-		
-		e.style.fontSize = "0.8em"; 
-		e.style.textAlign = "left";
-		e.style.background = "#b00"; 
-		e.style.color = "#fff"; 
-		e.style.width = "140px"; 
-		e.style.padding = "0.25em 0.25em 0.25em 0.5em"; 
-		e.style.position = "absolute"; 
-		e.style.right = "0px"; 
-		e.style.top = "0px"; 
-		e.style.zIndex = 1000;
-		
-		e.innerHTML = "Loading ...";
-		
-		return e;
-		
-	},
-	
-	updateProgress: function ( progress ) {
-
-		var message = "Loaded ";
-
-		if ( progress.total ) {
-
-			message += ( 100 * progress.loaded / progress.total ).toFixed(0) + "%";
-
-
-		} else {
-
-			message += ( progress.loaded / 1000 ).toFixed(2) + " KB";
-
-		}
-
-		this.statusDomElement.innerHTML = message;
-
-	},
-	
-
 	// Load models generated by slim OBJ converter with ASCII option (converter_obj_three_slim.py -t ascii)
 	//  - parameters
 	//		- model (required)
@@ -70,7 +26,7 @@ THREE.JSONLoader.prototype = {
 
 		var url = parameters.model,
 			callback = parameters.callback, 
-		    texture_path = parameters.texture_path ? parameters.texture_path : THREE.JSONLoader.prototype.extractUrlbase( url ),
+		    texture_path = parameters.texture_path ? parameters.texture_path : THREE.Loader.prototype.extractUrlbase( url ),
 		
 			s = (new Date).getTime(),
 			worker = new Worker( url );
@@ -93,7 +49,7 @@ THREE.JSONLoader.prototype = {
 
 			THREE.Geometry.call( this );
 
-			THREE.JSONLoader.prototype.init_materials( scope, json.materials, texture_path );
+			THREE.Loader.prototype.init_materials( scope, json.materials, texture_path );
 
 			parse();
 			init_skin();
@@ -110,6 +66,12 @@ THREE.JSONLoader.prototype = {
 
 				}
 	
+				function isBitSet( value, position ) {
+					
+					return value & ( 1 << position );
+
+				};
+				
 				var i, j, 
 				
 				type, offset,
@@ -341,124 +303,6 @@ THREE.JSONLoader.prototype = {
 
 		}
 
-	},		
-	
-	init_materials: function( scope, materials, texture_path ) {
-
-		scope.materials = [];
-
-		for ( var i = 0; i < materials.length; ++i ) {
-
-			scope.materials[ i ] = [ THREE.JSONLoader.prototype.createMaterial( materials[ i ], texture_path ) ];
-
-		}
-
-	},
-
-	createMaterial: function ( m, texture_path ) {
-
-		function is_pow2( n ) {
-
-			var l = Math.log(n) / Math.LN2;
-			return Math.floor(l) == l;
-
-		}
-
-		function nearest_pow2( n ) {
-
-			var l = Math.log(n) / Math.LN2;
-			return Math.pow( 2, Math.round(l) );
-
-		}
-
-		function load_image( where, url ) {
-			
-			var image = new Image();
-			
-			image.onload = function () {
-
-				if ( !is_pow2( this.width ) || !is_pow2( this.height ) ) {
-
-					var w = nearest_pow2( this.width ),
-						h = nearest_pow2( this.height );
-
-					where.image.width = w;
-					where.image.height = h;
-					where.image.getContext("2d").drawImage( this, 0, 0, w, h );
-
-				} else {
-
-					where.image = this;
-
-				}
-
-				where.needsUpdate = true;
-
-			};
-
-			image.src = url;
-			
-		}
-		
-		var material, mtype, mpars, texture, color;
-
-		// defaults
-		
-		mtype = "MeshLambertMaterial";
-		mpars = { color: 0xeeeeee, opacity: 1.0, map: null, lightMap: null, vertexColors: m.vertexColors };
-		
-		// parameters from model file
-		
-		if ( m.shading ) {
-			
-			if ( m.shading == "Phong" ) mtype = "MeshPhongMaterial";
-			
-		}
-		
-		if ( m.mapDiffuse && texture_path ) {
-
-			texture = document.createElement( 'canvas' );
-			
-			mpars.map = new THREE.Texture( texture );
-			mpars.map.sourceFile = m.mapDiffuse;
-			
-			load_image( mpars.map, texture_path + "/" + m.mapDiffuse );
-
-		} else if ( m.colorDiffuse ) {
-
-			color = ( m.colorDiffuse[0] * 255 << 16 ) + ( m.colorDiffuse[1] * 255 << 8 ) + m.colorDiffuse[2] * 255;
-			mpars.color = color;
-			mpars.opacity =  m.transparency;
-
-		} else if ( m.DbgColor ) {
-
-			mpars.color = m.DbgColor;
-
-		}
-
-		if ( m.mapLightmap && texture_path ) {
-
-			texture = document.createElement( 'canvas' );
-			
-			mpars.lightMap = new THREE.Texture( texture );
-			mpars.lightMap.sourceFile = m.mapLightmap;
-			
-			load_image( mpars.lightMap, texture_path + "/" + m.mapLightmap );
-
-		}
-		
-		material = new THREE[ mtype ]( mpars );
-
-		return material;
-
-	},
-	
-	extractUrlbase: function( url ) {
-		
-		var chunks = url.split( "/" );
-		chunks.pop();
-		return chunks.join( "/" );
-		
 	}
 
 };

+ 167 - 0
src/extras/io/Loader.js

@@ -4,4 +4,171 @@
 
 THREE.Loader = function () {
 
+	this.showStatus = showStatus;	
+	this.statusDomElement = showStatus ? this.addStatusElement() : null;
+
 };
+
+THREE.Loader.prototype = {
+
+	addStatusElement: function ( ) {
+		
+		var e = document.createElement( "div" );
+		
+		e.style.fontSize = "0.8em"; 
+		e.style.textAlign = "left";
+		e.style.background = "#b00"; 
+		e.style.color = "#fff"; 
+		e.style.width = "140px"; 
+		e.style.padding = "0.25em 0.25em 0.25em 0.5em"; 
+		e.style.position = "absolute"; 
+		e.style.right = "0px"; 
+		e.style.top = "0px"; 
+		e.style.zIndex = 1000;
+		
+		e.innerHTML = "Loading ...";
+		
+		return e;
+		
+	},
+	
+	updateProgress: function ( progress ) {
+
+		var message = "Loaded ";
+
+		if ( progress.total ) {
+
+			message += ( 100 * progress.loaded / progress.total ).toFixed(0) + "%";
+
+
+		} else {
+
+			message += ( progress.loaded / 1000 ).toFixed(2) + " KB";
+
+		}
+
+		this.statusDomElement.innerHTML = message;
+
+	},
+	
+	extractUrlbase: function( url ) {
+		
+		var chunks = url.split( "/" );
+		chunks.pop();
+		return chunks.join( "/" );
+		
+	},
+
+	init_materials: function( scope, materials, texture_path ) {
+
+		scope.materials = [];
+
+		for ( var i = 0; i < materials.length; ++i ) {
+
+			scope.materials[ i ] = [ THREE.Loader.prototype.createMaterial( materials[ i ], texture_path ) ];
+
+		}
+
+	},
+
+	createMaterial: function ( m, texture_path ) {
+
+		function is_pow2( n ) {
+
+			var l = Math.log( n ) / Math.LN2;
+			return Math.floor( l ) == l;
+
+		}
+
+		function nearest_pow2( n ) {
+
+			var l = Math.log( n ) / Math.LN2;
+			return Math.pow( 2, Math.round(  l ) );
+
+		}
+
+		function load_image( where, url ) {
+			
+			var image = new Image();
+			
+			image.onload = function () {
+
+				if ( !is_pow2( this.width ) || !is_pow2( this.height ) ) {
+
+					var w = nearest_pow2( this.width ),
+						h = nearest_pow2( this.height );
+
+					where.image.width = w;
+					where.image.height = h;
+					where.image.getContext("2d").drawImage( this, 0, 0, w, h );
+
+				} else {
+
+					where.image = this;
+
+				}
+
+				where.needsUpdate = true;
+
+			};
+
+			image.src = url;
+			
+		}
+		
+		var material, mtype, mpars, texture, color;
+
+		// defaults
+		
+		mtype = "MeshLambertMaterial";
+		mpars = { color: 0xeeeeee, opacity: 1.0, map: null, lightMap: null, vertexColors: m.vertexColors };
+		
+		// parameters from model file
+		
+		if ( m.shading ) {
+			
+			if ( m.shading == "Phong" ) mtype = "MeshPhongMaterial";
+			
+		}
+		
+		if ( m.mapDiffuse && texture_path ) {
+
+			texture = document.createElement( 'canvas' );
+			
+			mpars.map = new THREE.Texture( texture );
+			mpars.map.sourceFile = m.mapDiffuse;
+			
+			load_image( mpars.map, texture_path + "/" + m.mapDiffuse );
+
+		} else if ( m.colorDiffuse ) {
+
+			color = ( m.colorDiffuse[0] * 255 << 16 ) + ( m.colorDiffuse[1] * 255 << 8 ) + m.colorDiffuse[2] * 255;
+			mpars.color = color;
+			mpars.opacity =  m.transparency;
+
+		} else if ( m.DbgColor ) {
+
+			mpars.color = m.DbgColor;
+
+		}
+
+		if ( m.mapLightmap && texture_path ) {
+
+			texture = document.createElement( 'canvas' );
+			
+			mpars.lightMap = new THREE.Texture( texture );
+			mpars.lightMap.sourceFile = m.mapLightmap;
+			
+			load_image( mpars.lightMap, texture_path + "/" + m.mapLightmap );
+
+		}
+		
+		material = new THREE[ mtype ]( mpars );
+
+		return material;
+
+	}	
+	
+};
+	
+