Browse Source

Added Geometry2Loader and Geometry2Exporter.

Mr.doob 11 years ago
parent
commit
2269607b48

+ 1 - 0
editor/index.html

@@ -35,6 +35,7 @@
 		<script src="../examples/js/BufferGeometryUtils.js"></script>
 
 		<script src="../examples/js/exporters/BufferGeometryExporter.js"></script>
+		<script src="../examples/js/exporters/Geometry2Exporter.js"></script>
 		<script src="../examples/js/exporters/GeometryExporter.js"></script>
 		<script src="../examples/js/exporters/MaterialExporter.js"></script>
 		<script src="../examples/js/exporters/ObjectExporter.js"></script>

+ 5 - 0
editor/js/Menubar.File.js

@@ -91,6 +91,10 @@ Menubar.File = function ( editor ) {
 
 			exportGeometry( THREE.BufferGeometryExporter );
 
+		} else if ( geometry instanceof THREE.Geometry2 ) {
+
+			exportGeometry( THREE.Geometry2Exporter );
+
 		} else if ( geometry instanceof THREE.Geometry ) {
 
 			exportGeometry( THREE.GeometryExporter );
@@ -151,6 +155,7 @@ Menubar.File = function ( editor ) {
 		var output;
 
 		if ( exporter instanceof THREE.BufferGeometryExporter ||
+			 exporter instanceof THREE.Geometry2Exporter ||
 		     exporter instanceof THREE.GeometryExporter ) {
 
 			output = JSON.stringify( exporter.parse( object.geometry ), null, '\t' );

+ 1 - 0
editor/js/Sidebar.Material.js

@@ -313,6 +313,7 @@ Sidebar.Material = function ( editor ) {
 
 		if ( object instanceof THREE.Sprite ) objectHasUvs = true;
 		if ( geometry instanceof THREE.Geometry && geometry.faceVertexUvs[ 0 ].length > 0 ) objectHasUvs = true;
+		if ( geometry instanceof THREE.Geometry2 && geometry.uvs.length > 0 ) objectHasUvs = true;
 		if ( geometry instanceof THREE.BufferGeometry && geometry.attributes.uv !== undefined ) objectHasUvs = true;
 
 		if ( material ) {

+ 55 - 0
examples/js/exporters/Geometry2Exporter.js

@@ -0,0 +1,55 @@
+/**
+ * @author mrdoob / http://mrdoob.com/
+ */
+
+THREE.Geometry2Exporter = function () {};
+
+THREE.Geometry2Exporter.prototype = {
+
+	constructor: THREE.Geometry2Exporter,
+
+	parse: function ( geometry ) {
+
+		var output = {
+			metadata: {
+				version: 4.0,
+				type: 'Geometry2',
+				generator: 'Geometry2Exporter'
+			}
+		};
+
+		var attributes = [ 'vertices', 'normals', 'uvs' ];
+
+		for ( var key in attributes ) {
+
+			var attribute = attributes[ key ];
+			
+			var typedArray = geometry[ attribute ];
+			var array = [];
+
+			for ( var i = 0, l = typedArray.length; i < l; i ++ ) {
+
+				array[ i ] = typedArray[ i ];
+
+			}
+
+			output[ attribute ] = array;
+
+		}
+
+		var boundingSphere = geometry.boundingSphere;
+
+		if ( boundingSphere !== null ) {
+
+			output.boundingSphere = {
+				center: boundingSphere.center.toArray(),
+				radius: boundingSphere.radius
+			}
+
+		}
+
+		return output;
+
+	}
+
+};

+ 8 - 0
examples/js/exporters/ObjectExporter.js

@@ -24,6 +24,7 @@ THREE.ObjectExporter.prototype = {
 
 		var geometries = {};
 		var geometryExporter = new THREE.GeometryExporter();
+		var geometry2Exporter = new THREE.Geometry2Exporter();
 		var bufferGeometryExporter = new THREE.BufferGeometryExporter();
 
 		var parseGeometry = function ( geometry ) {
@@ -120,6 +121,13 @@ THREE.ObjectExporter.prototype = {
 
 					delete data.data.metadata;
 
+				} else if ( geometry instanceof THREE.Geometry2 ) {
+
+					data.type = 'Geometry2';
+					data.data = geometry2Exporter.parse( geometry );
+
+					delete data.data.metadata;
+
 				} else if ( geometry instanceof THREE.Geometry ) {
 
 					data.type = 'Geometry';

+ 62 - 0
src/loaders/Geometry2Loader.js

@@ -0,0 +1,62 @@
+/**
+ * @author mrdoob / http://mrdoob.com/
+ */
+
+THREE.Geometry2Loader = function ( manager ) {
+
+	this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
+
+};
+
+THREE.Geometry2Loader.prototype = {
+
+	constructor: THREE.Geometry2Loader,
+
+	load: function ( url, onLoad, onProgress, onError ) {
+
+		var scope = this;
+
+		var loader = new THREE.XHRLoader();
+		loader.setCrossOrigin( this.crossOrigin );
+		loader.load( url, function ( text ) {
+
+			onLoad( scope.parse( JSON.parse( text ) ) );
+
+		} );
+
+	},
+
+	setCrossOrigin: function ( value ) {
+
+		this.crossOrigin = value;
+
+	},
+
+	parse: function ( json ) {
+
+		var geometry = new THREE.Geometry2( json.vertices.length / 3 );
+
+		var attributes = [ 'vertices', 'normals', 'uvs' ];
+		var boundingSphere = json.boundingSphere;
+
+		for ( var key in attributes ) {
+
+			var attribute = attributes[ key ];
+			geometry[ attribute ].set( json[ attribute ] );
+
+		}
+
+		if ( boundingSphere !== undefined ) {
+
+			geometry.boundingSphere = new THREE.Sphere(
+				new THREE.Vector3().fromArray( boundingSphere.center !== undefined ? boundingSphere.center : [ 0, 0, 0 ] ),
+				boundingSphere.radius
+			);
+
+		}
+
+		return geometry;
+
+	}
+
+};

+ 0 - 41
src/loaders/GeometryLoader.js

@@ -1,41 +0,0 @@
-/**
- * @author mrdoob / http://mrdoob.com/
- */
-
-THREE.GeometryLoader = function ( manager ) {
-
-	this.manager = ( manager !== undefined ) ? manager : THREE.DefaultLoadingManager;
-
-};
-
-THREE.GeometryLoader.prototype = {
-
-	constructor: THREE.GeometryLoader,
-
-	load: function ( url, onLoad, onProgress, onError ) {
-
-		var scope = this;
-
-		var loader = new THREE.XHRLoader();
-		loader.setCrossOrigin( this.crossOrigin );
-		loader.load( url, function ( text ) {
-
-			onLoad( scope.parse( JSON.parse( text ) ) );
-
-		} );
-
-	},
-
-	setCrossOrigin: function ( value ) {
-
-		this.crossOrigin = value;
-
-	},
-
-	parse: function ( json ) {
-
-		
-
-	}
-
-};

+ 7 - 0
src/loaders/ObjectLoader.js

@@ -49,6 +49,7 @@ THREE.ObjectLoader.prototype = {
 		if ( json !== undefined ) {
 
 			var geometryLoader = new THREE.JSONLoader();
+			var geometry2Loader = new THREE.Geometry2Loader();
 			var bufferGeometryLoader = new THREE.BufferGeometryLoader();
 
 			for ( var i = 0, l = json.length; i < l; i ++ ) {
@@ -160,6 +161,12 @@ THREE.ObjectLoader.prototype = {
 
 						break;
 
+					case 'Geometry2':
+
+						geometry = geometry2Loader.parse( data.data );
+
+						break;
+
 					case 'Geometry':
 
 						geometry = geometryLoader.parse( data.data ).geometry;

+ 1 - 1
utils/build/includes/common.json

@@ -46,7 +46,7 @@
 	"src/loaders/JSONLoader.js",
 	"src/loaders/LoadingManager.js",
 	"src/loaders/BufferGeometryLoader.js",
-	"src/loaders/GeometryLoader.js",
+	"src/loaders/Geometry2Loader.js",
 	"src/loaders/MaterialLoader.js",
 	"src/loaders/ObjectLoader.js",
 	"src/loaders/SceneLoader.js",