Explorar o código

SceneLoader2/SceneExporter2: Last minute format change. User level shouldn't notice it.

Mr.doob %!s(int64=12) %!d(string=hai) anos
pai
achega
be05c06f8b
Modificáronse 2 ficheiros con 65 adicións e 63 borrados
  1. 7 4
      examples/js/exporters/SceneExporter2.js
  2. 58 59
      examples/js/loaders/SceneLoader2.js

+ 7 - 4
examples/js/exporters/SceneExporter2.js

@@ -157,12 +157,15 @@ THREE.SceneExporter2.prototype = {
 
 			var data = {};
 
-			if ( object.name !== "" ) data.name = object.name;
+			if ( object.name !== '' ) data.name = object.name;
+			if ( JSON.stringify( object.userData ) !== '{}' ) data.userData = object.userData;
 			if ( object.visible !== true ) data.visible = object.visible;
 
-			data.userData = object.userData;
+			if ( object instanceof THREE.Scene ) {
 
-			if ( object instanceof THREE.PerspectiveCamera ) {
+				data.type = 'Scene';
+
+			} else if ( object instanceof THREE.PerspectiveCamera ) {
 
 				data.type = 'PerspectiveCamera';
 				data.fov = object.fov;
@@ -256,7 +259,7 @@ THREE.SceneExporter2.prototype = {
 
 		}
 
-		output.scene = parseObject( scene ).children;
+		output.scene = parseObject( scene );
 
 		return output;
 

+ 58 - 59
examples/js/loaders/SceneLoader2.js

@@ -44,10 +44,6 @@ THREE.SceneLoader2.prototype = {
 
 	parse: function ( json ) {
 
-		// console.log( json );
-
-		var scene = new THREE.Scene();
-
 		// geometries
 
 		var geometries = [];
@@ -177,102 +173,105 @@ THREE.SceneLoader2.prototype = {
 
 		// objects
 
-		var parseObject = function ( array, parent ) {
+		var parseObject = function ( data ) {
 
-			for ( var i = 0, l = array.length; i < l; i ++ ) {
+			var object;
 
-				var object;
-				var data = array[ i ];
+			switch ( data.type ) {
 
-				switch ( data.type ) {
+				case 'Scene':
 
-					case 'PerspectiveCamera':
+					object = new THREE.Scene();
 
-						object = new THREE.PerspectiveCamera( data.fov, data.aspect, data.near, data.far );
-						object.position.fromArray( data.position );
-						object.rotation.fromArray( data.rotation );
+					break;
 
-						break;
+				case 'PerspectiveCamera':
 
-					case 'OrthographicCamera':
+					object = new THREE.PerspectiveCamera( data.fov, data.aspect, data.near, data.far );
+					object.position.fromArray( data.position );
+					object.rotation.fromArray( data.rotation );
 
-						object = new THREE.OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );
-						object.position.fromArray( data.position );
-						object.rotation.fromArray( data.rotation );
+					break;
 
-						break;
+				case 'OrthographicCamera':
 
-					case 'AmbientLight':
+					object = new THREE.OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );
+					object.position.fromArray( data.position );
+					object.rotation.fromArray( data.rotation );
 
-						object = new THREE.AmbientLight( data.color );
+					break;
+
+				case 'AmbientLight':
 
-						break;
+					object = new THREE.AmbientLight( data.color );
+
+					break;
 
-					case 'DirectionalLight':
+				case 'DirectionalLight':
 
-						object = new THREE.DirectionalLight( data.color, data.intensity );
-						object.position.fromArray( data.position );
+					object = new THREE.DirectionalLight( data.color, data.intensity );
+					object.position.fromArray( data.position );
 
-						break;
+					break;
 
-					case 'PointLight':
+				case 'PointLight':
 
-						object = new THREE.PointLight( data.color, data.intensity );
-						object.position.fromArray( data.position );
+					object = new THREE.PointLight( data.color, data.intensity );
+					object.position.fromArray( data.position );
 
-						break;
+					break;
 
-					case 'SpotLight':
+				case 'SpotLight':
 
-						object = new THREE.SpotLight( data.color, data.intensity, data.distance, data.angle, data.exponent );
-						object.position.fromArray( data.position );
+					object = new THREE.SpotLight( data.color, data.intensity, data.distance, data.angle, data.exponent );
+					object.position.fromArray( data.position );
 
-						break;
+					break;
 
-					case 'HemisphereLight':
+				case 'HemisphereLight':
 
-						object = new THREE.HemisphereLight( data.color, data.groundColor, data.intensity );
-						object.position.fromArray( data.position );
+					object = new THREE.HemisphereLight( data.color, data.groundColor, data.intensity );
+					object.position.fromArray( data.position );
 
-						break;
+					break;
 
-					case 'Mesh':
+				case 'Mesh':
 
-						object = new THREE.Mesh( geometries[ data.geometry ], materials[ data.material ] );
-						object.position.fromArray( data.position );
-						object.rotation.fromArray( data.rotation );
-						object.scale.fromArray( data.scale );
+					object = new THREE.Mesh( geometries[ data.geometry ], materials[ data.material ] );
+					object.position.fromArray( data.position );
+					object.rotation.fromArray( data.rotation );
+					object.scale.fromArray( data.scale );
 
-						break;
+					break;
 
-					default:
+				default:
 
-						object = new THREE.Object3D();
-						object.position.fromArray( data.position );
-						object.rotation.fromArray( data.rotation );
-						object.scale.fromArray( data.scale );
+					object = new THREE.Object3D();
+					object.position.fromArray( data.position );
+					object.rotation.fromArray( data.rotation );
+					object.scale.fromArray( data.scale );
 
-				}
+			}
 
-				if ( data.name !== undefined ) object.name = data.name;
-				if ( data.visible !== undefined ) object.visible = data.visible;
-				if ( data.userData !== undefined ) object.userData = data.userData;
+			if ( data.name !== undefined ) object.name = data.name;
+			if ( data.visible !== undefined ) object.visible = data.visible;
+			if ( data.userData !== undefined ) object.userData = data.userData;
 
-				parent.add( object );
+			if ( data.children !== undefined ) {
 
-				if ( data.children !== undefined ) {
+				for ( var i = 0, l = data.children.length; i < l; i ++ ) {
 
-					parseObject( data.children, object );
+					object.add( parseObject( data.children[ i ] ) );
 
 				}
 
 			}
 
-		}
+			return object;
 
-		parseObject( json.scene, scene );
+		}
 
-		return scene;
+		return parseObject( json.scene );
 
 	}