|
@@ -95,6 +95,92 @@ THREE.Geometry.prototype = {
|
|
|
|
|
|
},
|
|
|
|
|
|
+ fromBufferGeometry: function ( geometry ) {
|
|
|
+
|
|
|
+ var scope = this;
|
|
|
+
|
|
|
+ var attributes = geometry.attributes;
|
|
|
+
|
|
|
+ var indices = attributes.index !== undefined && attributes.index.array;
|
|
|
+ var normals = attributes.normal !== undefined && attributes.normal.array;
|
|
|
+ var colors = attributes.color !== undefined && attributes.color.array;
|
|
|
+ var uvs = attributes.uv !== undefined && attributes.uv.array;
|
|
|
+
|
|
|
+ var vertices = attributes.position.array;
|
|
|
+
|
|
|
+ var tempNormals = [];
|
|
|
+ var tempUVs = [];
|
|
|
+
|
|
|
+ for ( var i = 0, j = 0; i < vertices.length; i += 3, j += 2 ) {
|
|
|
+
|
|
|
+ scope.vertices.push( new THREE.Vector3( vertices[ i ], vertices[ i + 1 ], vertices[ i + 2 ] ) );
|
|
|
+
|
|
|
+ if ( normals !== undefined ) {
|
|
|
+
|
|
|
+ tempNormals.push( new THREE.Vector3( normals[ i ], normals[ i + 1 ], normals[ i + 2 ] ) );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( colors !== undefined ) {
|
|
|
+
|
|
|
+ scope.colors.push( new THREE.Color( colors[ i ], colors[ i + 1 ], colors[ i + 2 ] ) );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( uvs !== undefined ) {
|
|
|
+
|
|
|
+ tempUVs.push( new THREE.Vector2( uvs[ j ], uvs[ j + 1 ] ) );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ var addFace = function ( a, b, c ) {
|
|
|
+
|
|
|
+ var vertexNormals = normals !== undefined ? [ tempNormals[ a ], tempNormals[ b ], tempNormals[ c ] ] : [];
|
|
|
+ var vertexColors = colors !== undefined ? [ scope.colors[ a ], scope.colors[ b ], scope.colors[ c ] ] : [];
|
|
|
+
|
|
|
+ scope.faces.push( new THREE.Face3( a, b, c, vertexNormals, vertexColors ) );
|
|
|
+ scope.faceVertexUvs[ 0 ].push( [ tempUVs[ a ], tempUVs[ b ], tempUVs[ c ] ] );
|
|
|
+
|
|
|
+ };
|
|
|
+
|
|
|
+ if ( indices !== undefined ) {
|
|
|
+
|
|
|
+ var indices = attributes.index.array;
|
|
|
+
|
|
|
+ for ( var i = 0; i < indices.length; i += 3 ) {
|
|
|
+
|
|
|
+ addFace( indices[ i ], indices[ i + 1 ], indices[ i + 2 ] );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ for ( var i = 0; i < vertices.length / 3; i += 3 ) {
|
|
|
+
|
|
|
+ addFace( i, i + 1, i + 2 );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( geometry.boundingBox !== null ) {
|
|
|
+
|
|
|
+ this.boundingBox = geometry.boundingBox.clone();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ if ( geometry.boundingSphere !== null ) {
|
|
|
+
|
|
|
+ this.boundingSphere = geometry.boundingSphere.clone();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ return this;
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
center: function () {
|
|
|
|
|
|
this.computeBoundingBox();
|