Browse Source

SceneExporter2: Added handling of built-in geometries.
The problem now is that JSONLoader returns geometry/materials. By now I'll ignore the materials but I'll need to think how to solve that eventually.

Mr.doob 12 years ago
parent
commit
c4b43e869d
2 changed files with 90 additions and 26 deletions
  1. 36 2
      examples/js/exporters/SceneExporter2.js
  2. 54 24
      examples/js/loaders/SceneLoader2.js

+ 36 - 2
examples/js/exporters/SceneExporter2.js

@@ -37,14 +37,48 @@ THREE.SceneExporter2.prototype = {
 
 				geometries[ geometry.id ] = output.geometries.length;
 
-				output.geometries.push( geometryExporter.parse( geometry ) );
+				var data = { name: geometry.name };
+
+				if ( geometry instanceof THREE.PlaneGeometry ) {
+
+					data.type = 'PlaneGeometry';
+					data.width = geometry.width;
+					data.height = geometry.height;
+					data.widthSegments = geometry.widthSegments;
+					data.heightSegments = geometry.heightSegments;
+
+				} else if ( geometry instanceof THREE.CubeGeometry ) {
+
+					data.type = 'CubeGeometry';
+					data.width = geometry.width;
+					data.height = geometry.height;
+					data.depth = geometry.depth;
+					data.widthSegments = geometry.widthSegments;
+					data.heightSegments = geometry.heightSegments;
+					data.depthSegments = geometry.depthSegments;
+
+				} else if ( geometry instanceof THREE.SphereGeometry ) {
+
+					data.type = 'SphereGeometry';
+					data.radius = geometry.radius;
+					data.widthSegments = geometry.widthSegments;
+					data.heightSegments = geometry.heightSegments;
+
+				} else if ( geometry instanceof THREE.Geometry ) {
+
+					data.type = 'Geometry';
+					data.data = geometryExporter.parse( geometry );
+
+				}
+
+				output.geometries.push( data );
 
 			}
 
 			return geometries[ geometry.id ];
 
 		};
-		
+
 		/*
 		var materials = {};
 		var materialExporter = new THREE.MaterialExporter();

+ 54 - 24
examples/js/loaders/SceneLoader2.js

@@ -55,7 +55,55 @@ THREE.SceneLoader2.prototype = {
 
 		for ( var i = 0, l = json.geometries.length; i < l; i ++ ) {
 
-			geometries.push( loader.parse( json.geometries[ i ] ) );
+			var geometry;
+			var data = json.geometries[ i ];
+
+			switch ( data.type ) {
+
+				case 'PlaneGeometry':
+
+					geometry = new THREE.PlaneGeometry(
+						data.width,
+						data.height,
+						data.widthSegments,
+						data.heightSegments
+					);
+
+					break;
+
+				case 'CubeGeometry':
+
+					geometry = new THREE.CubeGeometry(
+						data.width,
+						data.height,
+						data.depth,
+						data.widthSegments,
+						data.heightSegments,
+						data.depthSegments
+					);
+
+					break;
+
+				case 'SphereGeometry':
+
+					geometry = new THREE.SphereGeometry(
+						data.radius,
+						data.widthSegments,
+						data.heightSegments
+					);
+
+					break;
+
+				case 'Geometry':
+
+					geometry = loader.parse( data.data ).geometry;
+
+					break;
+
+			}
+
+			geometry.name = data.name;
+			geometries.push( geometry );
 
 		}
 
@@ -75,92 +123,74 @@ THREE.SceneLoader2.prototype = {
 					case 'PerspectiveCamera':
 
 						object = new THREE.PerspectiveCamera( data.fov, data.aspect, data.near, data.far );
-						object.name = data.name;
 						object.position.fromArray( data.position );
 						object.rotation.fromArray( data.rotation );
-						object.userData = data.userData;
-						parent.add( object );
 
 						break;
 
 					case 'OrthographicCamera':
 
 						object = new THREE.OrthographicCamera( data.left, data.right, data.top, data.bottom, data.near, data.far );
-						object.name = data.name;
 						object.position.fromArray( data.position );
 						object.rotation.fromArray( data.rotation );
-						object.userData = data.userData;
-						parent.add( object );
 
 						break;
 
 					case 'AmbientLight':
 
 						object = new THREE.AmbientLight( data.color );
-						object.name = data.name;
-						parent.add( object );
 
 						break;
 
 					case 'DirectionalLight':
 
 						object = new THREE.DirectionalLight( data.color, data.intensity );
-						object.name = data.name;
 						object.position.fromArray( data.position );
-						parent.add( object );
 
 						break;
 
 					case 'PointLight':
 
 						object = new THREE.PointLight( data.color, data.intensity );
-						object.name = data.name;
 						object.position.fromArray( data.position );
-						parent.add( object );
 
 						break;
 
 					case 'SpotLight':
 
 						object = new THREE.SpotLight( data.color, data.intensity );
-						object.name = data.name;
 						object.position.fromArray( data.position );
-						parent.add( object );
 
 						break;
 
 					case 'HemisphereLight':
 
 						object = new THREE.HemisphereLight( data.color );
-						object.name = data.name;
-						parent.add( object );
 
 						break;
 
 					case 'Mesh':
 
-						object = new THREE.Mesh( geometries[ data.geometry ].geometry ); // TODO: Material
-						object.name = data.name;
+						object = new THREE.Mesh( geometries[ data.geometry ] ); // TODO: Material
 						object.position.fromArray( data.position );
 						object.rotation.fromArray( data.rotation );
 						object.scale.fromArray( data.scale );
-						object.userData = data.userData;
-						parent.add( object );
 
 						break;
 
 					default:
 
 						object = new THREE.Object3D();
-						object.name = data.name;
 						object.position.fromArray( data.position );
 						object.rotation.fromArray( data.rotation );
 						object.scale.fromArray( data.scale );
-						object.userData = data.userData;
-						parent.add( object );
 
 				}
 
+				object.name = data.name;
+				object.userData = data.userData;
+				parent.add( object );
+
 				if ( data.children !== undefined ) {
 
 					parseObject( data.children, object );