Browse Source

Renamed JSONLoader.createModel to .parse. Using function return instead of a callback.

Mr.doob 12 years ago
parent
commit
51e49dd7ba
4 changed files with 29 additions and 115 deletions
  1. 9 9
      editor/index.html
  2. 6 101
      examples/js/loaders/SceneLoader2.js
  3. 12 4
      src/loaders/JSONLoader.js
  4. 2 1
      src/loaders/SceneLoader.js

+ 9 - 9
editor/index.html

@@ -266,19 +266,19 @@
 							if ( data.metadata.type === 'geometry' ) {
 							if ( data.metadata.type === 'geometry' ) {
 
 
 								var loader = new THREE.JSONLoader();
 								var loader = new THREE.JSONLoader();
+								var result = loader.parse( data );
 
 
-								loader.createModel( data, function ( geometry, materials ) {
+								var geometry = result.geometry;
+								var materials = result.materials;
 
 
-									geometry.sourceType = "ascii";
-									geometry.sourceFile = file.name;
-
-									var mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) );
-									mesh.name = filename;
+								geometry.sourceType = "ascii";
+								geometry.sourceFile = file.name;
 
 
-									signals.objectAdded.dispatch( mesh );
-									signals.objectSelected.dispatch( mesh );
+								var mesh = new THREE.Mesh( geometry, new THREE.MeshFaceMaterial( materials ) );
+								mesh.name = filename;
 
 
-								} );
+								signals.objectAdded.dispatch( mesh );
+								signals.objectSelected.dispatch( mesh );
 
 
 							} else if ( data.metadata.type === 'scene' ) {
 							} else if ( data.metadata.type === 'scene' ) {
 
 

+ 6 - 101
examples/js/loaders/SceneLoader2.js

@@ -46,113 +46,18 @@ THREE.SceneLoader2.prototype = {
 
 
 		console.log( json );
 		console.log( json );
 
 
-		/*
-		var output = {
-			metadata: {
-				formatVersion : 4.0,
-				type : "scene",
-				generatedBy : "SceneExporter"
-			}
-		};
+		var geometries = [];
+		var loader = new THREE.JSONLoader();
 
 
-		console.log( scene );
+		for ( var i = 0, l = json.geometries.length; i < l; i ++ ) {
 
 
-		var parseObject = function ( object ) {
+			console.log( json.geometries[ i ] );
 
 
-			var data = { name: object.name };
-
-			if ( object instanceof THREE.PerspectiveCamera ) {
-
-				data.type = 'PerspectiveCamera';
-				data.fov = object.fov;
-				data.aspect = object.aspect;
-				data.near = object.near;
-				data.far = object.far;
-				data.position = object.position.toArray();
-				data.rotation = object.rotation.toArray();
-
-			} else if ( object instanceof THREE.OrthographicCamera ) {
-
-				data.type = 'OrthographicCamera';
-				data.left = object.left;
-				data.right = object.right;
-				data.top = object.top;
-				data.bottom = object.bottom;
-				data.near = object.near;
-				data.far = object.far;
-				data.position = object.position.toArray();
-				data.rotation = object.rotation.toArray();
-
-			} else if ( object instanceof THREE.AmbientLight ) {
-
-				data.type = 'AmbientLight';
-				data.color = object.color.getHex();
-				data.intensity = object.intensity;
-
-			} else if ( object instanceof THREE.DirectionalLight ) {
-
-				data.type = 'DirectionalLight';
-				data.color = object.color.getHex();
-				data.intensity = object.intensity;
-				data.position = object.position.toArray();
-
-			} else if ( object instanceof THREE.PointLight ) {
-
-				data.type = 'PointLight';
-				data.color = object.color.getHex();
-				data.intensity = object.intensity;
-				data.position = object.position.toArray();
-
-			} else if ( object instanceof THREE.SpotLight ) {
-
-				data.type = 'SpotLight';
-				data.color = object.color.getHex();	
-				data.intensity = object.intensity;
-				data.position = object.position.toArray();
-
-			} else if ( object instanceof THREE.HemisphereLight ) {
-
-				data.type = 'HemisphereLight';
-				data.color = object.color.getHex();
-
-			} else if ( object instanceof THREE.Mesh ) {
-
-				data.type = 'Mesh';
-				data.position = object.position.toArray();
-				data.rotation = object.rotation.toArray();
-				data.scale = object.scale.toArray();
-
-			} else {
-
-				data.type = 'Object3D';
-				data.position = object.position.toArray();
-				data.rotation = object.rotation.toArray();
-				data.scale = object.scale.toArray();
-
-			}
-
-			// parse children
-
-			if ( object.children.length > 0 ) {
-
-				data.children = [];
-
-				for ( var i = 0; i < object.children.length; i ++ ) {
-
-					data.children.push( parseObject( object.children[ i ] ) );
-
-				}
-
-			}
-
-			return data;
+			geometries.push( loader.createModel( json.geometries[ i ] ) );
 
 
 		}
 		}
 
 
-		output.scene = parseObject( scene ).children;
-
-		return JSON.stringify( output, null, '\t' );
-		*/
+		console.log( geometries );
 
 
 	}
 	}
 
 

+ 12 - 4
src/loaders/JSONLoader.js

@@ -41,7 +41,8 @@ THREE.JSONLoader.prototype.loadAjaxJSON = function ( context, url, callback, tex
 				if ( xhr.responseText ) {
 				if ( xhr.responseText ) {
 
 
 					var json = JSON.parse( xhr.responseText );
 					var json = JSON.parse( xhr.responseText );
-					context.createModel( json, callback, texturePath );
+					var result = context.parse( json, texturePath );
+					callback( result.geometry, result.material );
 
 
 				} else {
 				} else {
 
 
@@ -89,7 +90,7 @@ THREE.JSONLoader.prototype.loadAjaxJSON = function ( context, url, callback, tex
 
 
 };
 };
 
 
-THREE.JSONLoader.prototype.createModel = function ( json, callback, texturePath ) {
+THREE.JSONLoader.prototype.parse = function ( json, texturePath ) {
 
 
 	var scope = this,
 	var scope = this,
 	geometry = new THREE.Geometry(),
 	geometry = new THREE.Geometry(),
@@ -420,8 +421,15 @@ THREE.JSONLoader.prototype.createModel = function ( json, callback, texturePath
 
 
 	var materials = this.initMaterials( json.materials, texturePath );
 	var materials = this.initMaterials( json.materials, texturePath );
 
 
-	if ( this.needsTangents( materials ) ) geometry.computeTangents();
+	if ( this.needsTangents( materials ) ) {
 
 
-	callback( geometry, materials );
+		geometry.computeTangents();
+
+	}
+
+	return {
+		geometry: geometry,
+		materials: materials
+	};
 
 
 };
 };

+ 2 - 1
src/loaders/SceneLoader.js

@@ -842,7 +842,8 @@ THREE.SceneLoader.prototype.parse = function ( json, callbackFinished, url ) {
 			if ( modelJson ) {
 			if ( modelJson ) {
 
 
 				var jsonLoader = this.geometryHandlerMap[ "ascii" ][ "loaderObject" ];
 				var jsonLoader = this.geometryHandlerMap[ "ascii" ][ "loaderObject" ];
-				jsonLoader.createModel( modelJson, create_callback_embed( geoID ), texture_path );
+				var model = jsonLoader.parse( modelJson, texture_path );
+				create_callback_embed( geoID )( model.geometry, model.material );
 
 
 			}
 			}