|
@@ -10428,6 +10428,110 @@ THREE.Geometry.prototype = {
|
|
|
|
|
|
},
|
|
|
|
|
|
+ merge: function ( geometry, matrix, materialIndexOffset ) {
|
|
|
+
|
|
|
+ var normalMatrix,
|
|
|
+ vertexOffset = this.vertices.length,
|
|
|
+ uvPosition = this.faceVertexUvs[ 0 ].length,
|
|
|
+ vertices1 = this.vertices,
|
|
|
+ vertices2 = geometry.vertices,
|
|
|
+ faces1 = this.faces,
|
|
|
+ faces2 = geometry.faces,
|
|
|
+ uvs1 = this.faceVertexUvs[ 0 ],
|
|
|
+ uvs2 = geometry.faceVertexUvs[ 0 ];
|
|
|
+
|
|
|
+ if ( materialIndexOffset === undefined ) materialIndexOffset = 0;
|
|
|
+
|
|
|
+ if ( matrix !== undefined ) {
|
|
|
+
|
|
|
+ normalMatrix = new THREE.Matrix3().getNormalMatrix( matrix );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // vertices
|
|
|
+
|
|
|
+ for ( var i = 0, il = vertices2.length; i < il; i ++ ) {
|
|
|
+
|
|
|
+ var vertex = vertices2[ i ];
|
|
|
+
|
|
|
+ var vertexCopy = vertex.clone();
|
|
|
+
|
|
|
+ if ( matrix !== undefined ) vertexCopy.applyMatrix4( matrix );
|
|
|
+
|
|
|
+ vertices1.push( vertexCopy );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // faces
|
|
|
+
|
|
|
+ for ( i = 0, il = faces2.length; i < il; i ++ ) {
|
|
|
+
|
|
|
+ var face = faces2[ i ], faceCopy, normal, color,
|
|
|
+ faceVertexNormals = face.vertexNormals,
|
|
|
+ faceVertexColors = face.vertexColors;
|
|
|
+
|
|
|
+ faceCopy = new THREE.Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );
|
|
|
+ faceCopy.normal.copy( face.normal );
|
|
|
+
|
|
|
+ if ( normalMatrix !== undefined ) {
|
|
|
+
|
|
|
+ faceCopy.normal.applyMatrix3( normalMatrix ).normalize();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ for ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {
|
|
|
+
|
|
|
+ normal = faceVertexNormals[ j ].clone();
|
|
|
+
|
|
|
+ if ( normalMatrix !== undefined ) {
|
|
|
+
|
|
|
+ normal.applyMatrix3( normalMatrix ).normalize();
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ faceCopy.vertexNormals.push( normal );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ faceCopy.color.copy( face.color );
|
|
|
+
|
|
|
+ for ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {
|
|
|
+
|
|
|
+ color = faceVertexColors[ j ];
|
|
|
+ faceCopy.vertexColors.push( color.clone() );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ faceCopy.materialIndex = face.materialIndex + materialIndexOffset;
|
|
|
+
|
|
|
+ faces1.push( faceCopy );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // uvs
|
|
|
+
|
|
|
+ for ( i = 0, il = uvs2.length; i < il; i ++ ) {
|
|
|
+
|
|
|
+ var uv = uvs2[ i ], uvCopy = [];
|
|
|
+
|
|
|
+ if ( uv === undefined ) {
|
|
|
+
|
|
|
+ continue;
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ for ( var j = 0, jl = uv.length; j < jl; j ++ ) {
|
|
|
+
|
|
|
+ uvCopy.push( new THREE.Vector2( uv[ j ].x, uv[ j ].y ) );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ uvs1.push( uvCopy );
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ },
|
|
|
+
|
|
|
/*
|
|
|
* Checks for duplicate vertices with hashmap.
|
|
|
* Duplicated vertices are removed
|
|
@@ -28547,112 +28651,22 @@ THREE.GeometryUtils = {
|
|
|
|
|
|
// Merge two geometries or geometry and geometry from object (using object's transform)
|
|
|
|
|
|
- merge: function ( geometry1, object2 /* mesh | geometry */, materialIndexOffset ) {
|
|
|
-
|
|
|
- var matrix, normalMatrix,
|
|
|
- vertexOffset = geometry1.vertices.length,
|
|
|
- uvPosition = geometry1.faceVertexUvs[ 0 ].length,
|
|
|
- geometry2 = object2 instanceof THREE.Mesh ? object2.geometry : object2,
|
|
|
- vertices1 = geometry1.vertices,
|
|
|
- vertices2 = geometry2.vertices,
|
|
|
- faces1 = geometry1.faces,
|
|
|
- faces2 = geometry2.faces,
|
|
|
- uvs1 = geometry1.faceVertexUvs[ 0 ],
|
|
|
- uvs2 = geometry2.faceVertexUvs[ 0 ];
|
|
|
-
|
|
|
- if ( materialIndexOffset === undefined ) materialIndexOffset = 0;
|
|
|
-
|
|
|
- if ( object2 instanceof THREE.Mesh ) {
|
|
|
-
|
|
|
- object2.matrixAutoUpdate && object2.updateMatrix();
|
|
|
-
|
|
|
- matrix = object2.matrix;
|
|
|
-
|
|
|
- normalMatrix = new THREE.Matrix3().getNormalMatrix( matrix );
|
|
|
+ merge: function ( geometry1, geometry2, materialIndexOffset ) {
|
|
|
|
|
|
- }
|
|
|
+ console.warn( 'DEPRECATED: GeometryUtils\'s .merge() has been moved to Geometry. Use geometry.merge( geometry2, matrix, materialIndexOffset ) instead.' );
|
|
|
|
|
|
- // vertices
|
|
|
+ var matrix;
|
|
|
|
|
|
- for ( var i = 0, il = vertices2.length; i < il; i ++ ) {
|
|
|
+ if ( geometry2 instanceof THREE.Mesh ) {
|
|
|
|
|
|
- var vertex = vertices2[ i ];
|
|
|
+ geometry2.matrixAutoUpdate && geometry2.updateMatrix();
|
|
|
|
|
|
- var vertexCopy = vertex.clone();
|
|
|
-
|
|
|
- if ( matrix ) vertexCopy.applyMatrix4( matrix );
|
|
|
-
|
|
|
- vertices1.push( vertexCopy );
|
|
|
+ matrix = geometry2.matrix;
|
|
|
+ geometry2 = geometry2.geometry;
|
|
|
|
|
|
}
|
|
|
|
|
|
- // faces
|
|
|
-
|
|
|
- for ( i = 0, il = faces2.length; i < il; i ++ ) {
|
|
|
-
|
|
|
- var face = faces2[ i ], faceCopy, normal, color,
|
|
|
- faceVertexNormals = face.vertexNormals,
|
|
|
- faceVertexColors = face.vertexColors;
|
|
|
-
|
|
|
- faceCopy = new THREE.Face3( face.a + vertexOffset, face.b + vertexOffset, face.c + vertexOffset );
|
|
|
- faceCopy.normal.copy( face.normal );
|
|
|
-
|
|
|
- if ( normalMatrix ) {
|
|
|
-
|
|
|
- faceCopy.normal.applyMatrix3( normalMatrix ).normalize();
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- for ( var j = 0, jl = faceVertexNormals.length; j < jl; j ++ ) {
|
|
|
-
|
|
|
- normal = faceVertexNormals[ j ].clone();
|
|
|
-
|
|
|
- if ( normalMatrix ) {
|
|
|
-
|
|
|
- normal.applyMatrix3( normalMatrix ).normalize();
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- faceCopy.vertexNormals.push( normal );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- faceCopy.color.copy( face.color );
|
|
|
-
|
|
|
- for ( var j = 0, jl = faceVertexColors.length; j < jl; j ++ ) {
|
|
|
-
|
|
|
- color = faceVertexColors[ j ];
|
|
|
- faceCopy.vertexColors.push( color.clone() );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- faceCopy.materialIndex = face.materialIndex + materialIndexOffset;
|
|
|
-
|
|
|
- faces1.push( faceCopy );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- // uvs
|
|
|
-
|
|
|
- for ( i = 0, il = uvs2.length; i < il; i ++ ) {
|
|
|
-
|
|
|
- var uv = uvs2[ i ], uvCopy = [];
|
|
|
-
|
|
|
- if ( uv === undefined ) {
|
|
|
-
|
|
|
- continue;
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- for ( var j = 0, jl = uv.length; j < jl; j ++ ) {
|
|
|
-
|
|
|
- uvCopy.push( new THREE.Vector2( uv[ j ].x, uv[ j ].y ) );
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- uvs1.push( uvCopy );
|
|
|
-
|
|
|
- }
|
|
|
+ geometry1.merge( geometry2, matrix, materialIndexOffset );
|
|
|
|
|
|
},
|
|
|
|